redis集群基本可用性测试

redis常用命令机制验证

redis-cli -h 192.168.23.128 -p 6003 cluster nodes
redis-server /home/user/software/redis-5.0.5/redis_cluster/8004/redis.conf
redis-cli --cluster create 127.0.0.1:7000 127.0.0.1:7001
127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005
–cluster-replicas 1
redis-cli -c -p 7000 //-c代表集群模式下工作

redis-cli --cluster create 192.168.23.128:8000 192.168.23.128:8001 192.168.23.128:8002 192.168.23.128:8003 192.168.23.134:8004 192.168.23.134:8005 192.168.23.134:8006 --cluster-replicas 1
redis集群基本可用性测试
创建集群时候,匹配之外多余的redis节点将会随机成为从节点
redis-cli --cluster reshard 127.0.0.1:7000 //slot重载的入口,根据提示选择数量和拆分、接受节点
redis-cli reshard : --cluster-from --cluster-to --cluster-slots --cluster-yes
//命令行模式无需人工干预
redis-cli --cluster check 127.0.0.1:7000
redis-cli -h 127.0.0.1 -p 7000 set key_217 0 //运行中设置值
$ redis-cli -p 7002 debug segfault //调试段故障,可以通过重新运行相应redis服务端,会重新自动加入集群成为从节点,服从之前的主从关系。
redis-cli --cluster add-node 127.0.0.1:7006 127.0.0.1:7000 //第一个字段是新节点,第二个字段是集群入口。成为一个没有slot的master.实际操作是成为随机master的slave。
redis-cli --cluster add-node 127.0.0.1:7006 127.0.0.1:7000 --cluster-slave
//会随机成为某master的slave。
redis-cli --cluster add-node 127.0.0.1:7006 127.0.0.1:7000 --cluster-slave --cluster-master-id 3c3a0c74aae0b56170ccb03a76b60cfe7dc1912e
//成为指定master的slave
redis 127.0.0.1:7006> cluster replicate 3c3a0c74aae0b56170ccb03a76b60cfe7dc1912e //7006是新添加的master,这个命令使其成为指定ID的从节点,
副本转移策略验证:
将每一个节点配置文件 cluster-migration-barrier:启用。
redis集群基本可用性测试
redis集群基本可用性测试
redis集群基本可用性测试

缺失slot(直接kill相关进程):
java程序无法访问

应该是达到最大尝试连接次数后报错。

单独主节点不可连接,从节点可连接,从节点本来只读属性,现在可连接,但是不可访问操作(提示the cluster is down)。
redis集群基本可用性测试
以上在主节点重新运行后恢复正常。
以上在主节点对应的从节点重新运行后恢复正常。

集群所在计算机重启:
把所有相关redis节点重新运行即可,redis集群自动回复运行。
redis集群基本可用性测试

节点需要的配置更改

port 7000 //端口7000,7002,7003
bind 本机ip //默认ip为127.0.0.1 需要改为其他节点机器可访问的ip 否则创建集群时无法访问对应的端口,无法创建集群
daemonize yes //redis后台运行
pidfile /var/run/redis_7000.pid //pidfile文件对应7000,7001,7002
cluster-enabled yes //开启集群 把注释#去掉
cluster-config-file nodes_7000.conf //集群的配置 配置文件首次启动自动生成 7000,7001,7002
cluster-node-timeout 15000 //请求超时 默认15秒,可自行设置
appendonly yes //aof日志开启 有需要就开启,它会每次写操作都记录一条日志

遇到问题及解决办法

问题:add-node作为空master时遇到以下提示,以前就遇到过
redis集群基本可用性测试

解决:看了没有相应的appendonly.aof dump.rdb nodes.conf,进入 redis-cli -h 192.168.23.134 -p 8008,flushdb清空数据库后重试成功。
参考https://www.jianshu.com/p/338bc2a74300

问题:java编码运行时提示
redis集群基本可用性测试
org.apache.commons.pool2.impl这个东西!
commons-pool2.x!!!缺少依赖
解决:换到了script-tools工程里面,或者可以试一试安装依赖。
参考:https://blog.****.net/hiredme/article/details/46999975

问题:remove的节点无法重新加入集群
redis集群基本可用性测试
redis集群基本可用性测试

问题: debug segfault时候访问拒绝,进程却都还在,从其他端口进入集群也失败。
解决:过了将近一个小时,尝试其他端口进入集群成功。可能是调试段故障时候节点直接挂掉不可用,整个集群选举算法进行中,集群暂时不可用。比较迷。