HAProxy+Redis实现负载负载均衡(待实践)
Posted Jim
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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://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
以上是关于HAProxy+Redis实现负载负载均衡(待实践)的主要内容,如果未能解决你的问题,请参考以下文章