Redis集群以及自动故障转移测试

Redis中,与Sentinel(哨兵)实现的高可用相比,集群(cluster)更多的是强调数据的分片或者是节点的伸缩性,如果在集群的主节点上加入对应的从节点,集群还可以自动故障转移,因此相比Sentinel(哨兵)还是有不少优势的。
以下简单测试Redis的集群(单机多实例的模式),来体验一下集群的自动故障转移功能,同时结合Python,来观察自动故障转移过程中应用程序端的表现。

redis集群实例安装

启动6个redis集群实例,集群模式,除了正常的配置项目之外,需要在每个主节点中增加集群配置

cluster-enabled yes   # 开启集群模 cluster-node-timeout 1000 # 节点超时时间,单位毫秒,设置一个较小的超时时间,目的是为了后面测试自动故障转移的效果

Redis集群以及自动故障转移测试

分配slot & 主节点握手

主节点分配slot给主节点,三个主节点分配16383个slot
8001主----->8004从
8002主----->8005从
8003主----->8006从

#!/bin/bash
for ((i=0;i<=16383;i++))
do
if [ $i -le 5461 ]; then
  /usr/local/redis5_1/bin/redis-cli -h 127.0.0.1 -p 8001 -a root CLUSTER ADDSLOTS $i
elif [ $i -gt 5461 ]&&[ $i -le 10922 ]; then
  /usr/local/redis5_1/bin/redis-cli -h 127.0.0.1 -p 8002 -a root CLUSTER ADDSLOTS $i
elif [ $i -gt 10922 ]; then
  /usr/local/redis5_1/bin/redis-cli -h 127.0.0.1 -p 8003 -a root CLUSTER ADDSLOTS $i
fi
done

分配完slot之后,在第一个主节点上执行cluster meet 127.0.0.1 8002,cluster meet 127.0.0.1 8003
无须在其他两个主节点上meet另外两个主节点,随后三个主节点之间关系确定会自动确定,目前集群中是三个主节点

Redis集群以及自动故障转移测试

添加主节点对应的从节点,需要登录到每个主节点的实例上,执行

三个从节点分别加入到主节点之后,此时6个节点全部加入到集群中

Redis集群以及自动故障转移测试

Python连接至集群测试

这里需要安装redis-py-cluster依赖包

#!/usr/bin/env python3 import time from time import ctime,sleep from rediscluster import StrictRedisCluster startup_nodes = [ {"host":"111.231.253.***", "port":8001}, {"host":"111.231.253.***", "port":8002}, {"host":"111.231.253.***", "port":8003}, {"host":"111.231.253.***", "port":8004}, {"host":"111.231.253.***", "port":8005}, {"host":"111.231.253.***", "port":8006} ] redis_conn= StrictRedisCluster(startup_nodes=startup_nodes, decode_responses=True,password="root") for i in range(0, 100000): try: redis_conn.set('name' + str(i), str(i)) print('setting name' + str(i) +"--->" + time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))) except: print("connect to redis cluster error") time.sleep(2)

执行上述写入测试脚本之后,数据基本上均匀地落在三个节点上

Redis集群以及自动故障转移测试

自动故障转移测试

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/9b2cad6a31073ac9210c86032df44405.html