Skip to content

redis集群代理

集群代理方式介绍

redis主流代理有哪些:

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

特性predixytwemproxycodisredis-cerberus
高可用Redis Sentinel或Redis Cluster一致性哈希Redis SentinelRedis Cluster
可扩展Key哈希分布或Redis ClusterKey哈希分布Key哈希分布Redis Cluster
开发语言C++CGOC++
多线程
事务Redis Sentinel模式单Redis组下支持不支持不支持不支持
BLPOP/BRPOP/BLPOPRPUSH支持不支持不支持支持
Pub/Sub支持不支持不支持支持
Script支持load不支持不支持不支持
Scan支持不支持不支持不支持
Select DB支持不支持支持Redis Cluster只有一个DB
Auth支持定义多个密码,给予不同读写及管理权限和Key访问空间不支持同redis不支持
读从节点支持,可定义丰富规则读指定的从节点不支持支持,简单规则支持,简单规则
多机房支持支持,可定义丰富规则调度流量不支持有限支持有限支持
统计信息丰富丰富丰富简单

一、搭建redis-cluster-proxy

1.1 介绍

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

1.2 优缺点

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

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

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

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

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

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

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

  • 无法支持故障转移

1.3 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

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