Skip to content

redis集群代理

一、集群代理方式介绍

redis主流代理有哪些:

目前市面上主流的代理包含:predixy、twemproxy、codis、redis-cerberus四款,这四款各有各的优势,我们逐个对比进行对比分析。

|特性|predixy|twemproxy|codis|redis-cerberus|

| ---- | ---- | ---- | ---- | ---- |

|高可用|Redis Sentinel或Redis Cluster|一致性哈希|Redis Sentinel|Redis Cluster|

|可扩展|Key哈希分布或Redis Cluster|Key哈希分布|Key哈希分布|Redis Cluster|

|开发语言|C++|C|GO|C++|

|多线程|是|否|是|是|

|事务|Redis Sentinel模式单Redis组下支持|不支持|不支持|不支持|

|BLPOP/BRPOP/BLPOPRPUSH|支持|不支持|不支持|支持|

|Pub/Sub|支持|不支持|不支持|支持|

|Script|支持load|不支持|不支持|不支持|

|Scan|支持|不支持|不支持|不支持|

|Select DB|支持|不支持|支持|Redis Cluster只有一个DB|

|Auth|支持定义多个密码,给予不同读写及管理权限和Key访问空间|不支持|同redis|不支持|

|读从节点|支持,可定义丰富规则读指定的从节点|不支持|支持,简单规则|支持,简单规则|

|多机房支持|支持,可定义丰富规则调度流量|不支持|有限支持|有限支持|

|统计信息|丰富|丰富|丰富|简单|

二、搭建redis-cluster-proxy

三、介绍

redis cluster是redis的官方集群方案,但是他要求客户端自己做重定向,所以连接单机redis和集群redis的客户端会有些不同,连接集群版redis的时候要客户端连接6个redis实例。 官方为了屏蔽这种差异,做了一个redis-cluster-proxy,经过这个proxy的代理后,连接redis集群就和连接单机redis一样了。

四、优缺点

建议不要在生产环境使用,目前官方已经很久不更新,并且不能够友好的动态支持故障转移问题

  • 集群某个机器down后,如果不更新代理连接集群,还是可以正常使用的;

如果down的是主库,则通过代理无法访问该主库节点

如果down的是从库,则不影响

  • 代理在启动重新、拉取集群连接信息时,如果在配置文件中配置的任意实例无法连接,则整个代理不可用;

  • 如果redis 集群没有启动成功,redis-cluster-proxy 启动是无法连接到 redis 节点的;

如果出现 redis 集群启动 Waiting for the cluster to join 的情况,redis-cluster-proxy 可以启动成功,但是无法操作。

  • 无法支持故障转移

五、docker安装

docker安装

#获取镜像
docker pull ableuler/redis-cluster-proxy
#启动
docker run -d -p 7777:7777 -v /path/proxy.conf:/redis-cluster-proxy/proxy.conf ableuler/redis-cluster-proxy

配置文件修改(源文件在docker里的/redis-cluster-proxy里的proxy.conf ):

增加集群的地址:

cluster 192.168.1.31:7001
cluster 192.168.1.31:7002
cluster 192.168.1.31:7003
cluster 192.168.1.31:7004
cluster 192.168.1.31:7005
cluster 192.168.1.31:7006

启动容器的时候映射好配置文件即可