HAProxy+Redis实现负载负载均衡(待实践)

为什么要使用HA,原因是可以聚合出一个VIP,也就是可以使用单一IP来访问下面多个Redis的实例。

首先说明一下,如果基于3.0以后搭建的官方原始Redis Cluster方案,使用HAProxy是没什么效果的,打个比方,如果使用HA聚合出一个VIP,然后通过这个VIP访问时,会根据Key返回MOVED的命令,然后客户端通过协议识别MOVED命令去连接另一台Redis取数据,那么此时就会访问原始IP,而不是HA的VIP,也就是绕过去了,造成HA是多余的一个点。所以HA对于这种模式是无效的。

参考:https://stackoverflow.com/questions/31785184/redis-cluster-via-haproxy

再次说明,原来Redis还可以通过HA实现负载均衡。

但是这种模式配置可能有点难以理解,比如:

1、如果是基于Redis的原生主从复制时,从节点写的数据不会同步到主节点,那么用HA也是没什么效果的。

2、如果不用主从复制,单纯的部署多个Redis时,通过HA确实能负载多台,但是会有这个现象,比如我写的时候是A,而读的时候到了B,也就造成数据不同步,写时也会有这个现象。

那么通过以上问题,看下下面的解决分析:

先说下以下两篇文章提到的HA+Redis的实现:

http://blog.csdn.net/citi007/article/details/39636567

http://blog.csdn.net/ownfire/article/details/39373399

是不能用的,就单纯的两个Redis,期间没有配置主从和哨兵或者Twemproxy的模式,是完全不能实现,所以以上是反面教材。

下面说下要实现HA来做负载均衡所要具备的条件和解决上述问题的分析:

1、一般HA是结合Twemproxy和哨兵模式一起使用。

2、如果使用Twemproxy时,本身T是一个代理层,用于分片算法,而T支持平行节点部署来达到T的集群,然后可以通过HA来做IP的聚合实现负载均衡指向T的集群。

3、如果基于哨兵模式的Redis集群时,那么HA需要在负载均衡规则上做过滤条件,哨兵本身不能写数据,就需要把所有的发送流量指向master,也就是主节点。

4、当然,再高可用就是HA+哨兵+T的组合。

下面这篇文章是Redis集群方案最全的一篇:

http://blog.csdn.net/shmilychan/article/details/73433804

下面这些文章是HA做负载均衡找到的突破口(留意规则的过滤):

https://karlstoney.com/2015/07/23/redis-sentinel-behind-haproxy/

https://discuss.pivotal.io/hc/en-us/articles/205309388-How-to-setup-HAProxy-and-Redis-Sentinel-for-automatic-failover-between-Redis-Master-and-Slave-servers

https://www.haproxy.com/blog/haproxy-advanced-redis-health-check/

https://serverfault.com/questions/772064/redis-haproxy-updated-configuration-settings

http://www.cnblogs.com/xiazh/archive/2012/11/13/2630846.html

http://blog.csdn.net/houzhe_adore/article/details/48262873

http://blog.csdn.net/houzhe_adore/article/details/48245435

http://www.cnblogs.com/tzm7614/p/5691912.html

http://blog.csdn.net/ownfire/article/details/39373399

posted @ 2017-10-06 01:44  EasonJim  阅读(2874)  评论(0编辑  收藏  举报