目录
00.节点启动、关闭、登录、查看集群信息、配置文件参数、动态改参数
00.节点启动、关闭、登录、查看集群信息、配置文件参数、动态改参数
/data/redis/bin/redis-server /data/redis/conf/redis6379.conf
ps aux|grep redis
/data/redis/bin/redis-cli -a ...... -h 127.0.0.1 -p 6379 SHUTDOWN
ps -ef | grep redis-server | grep -v grep | awk '{print $2}' | xargs kill
/data/redis/bin/redis-cli -a ...... -h 127.0.0.1 -p 6379
CLUSTER nodes
CLUSTER INFO
config get maxmemory/maxclients
config SET maxmemory 6G
01.创建主节点
/data/redis/bin/redis-cli -a ...... --cluster create --cluster-replicas 0 192.168.134.143:6379 192.168.134.143:6380 192.168.134.143:6381
--获取master-id
/data/redis/bin/redis-cli -c -a ...... -h 127.0.0.1 -p 6379 cluster nodes
ip=`ip ad|grep "10.35.2"|awk '{print $2}'|awk -F\/ '{print $1}'`
/data/redis/bin/redis-cli -a ...... --cluster check $ip:6379 --cluster-search-multiple-owners
[root@localhost data]# /data/redis/bin/redis-cli -c -a ...... -h 127.0.0.1 -p 6379 cluster nodes
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
0bc9e58115869b5458a0aaf474b7b9d01ac4dd6a 192.168.134.143:6381@16381 master - 0 1658993413889 3 connected 10923-16383
056ca47dc3945072b9fd28b663f1eb8b569e9cc5 192.168.134.143:6380@16380 master - 0 1658993414897 2 connected 5461-10922
12b09b0ccd152d1267bb94a6ad8d268d9e424cec 192.168.134.143:6379@16379 myself,master - 0 1658993413000 1 connected 0-5460
--为主节点添加从节点
/data/redis/bin/redis-cli -a ...... --cluster add-node 192.168.134.143:6382 192.168.134.143:6379 --cluster-slave --cluster-master-id 12b09b0ccd152d1267bb94a6ad8d268d9e424cec
/data/redis/bin/redis-cli -a ...... --cluster add-node 192.168.134.143:6383 192.168.134.143:6379 --cluster-slave --cluster-master-id 056ca47dc3945072b9fd28b663f1eb8b569e9cc5
/data/redis/bin/redis-cli -a ...... --cluster add-node 192.168.134.143:6384 192.168.134.143:6379 --cluster-slave --cluster-master-id 0bc9e58115869b5458a0aaf474b7b9d01ac4dd6a
--登录
/data/redis/bin/redis-cli -h 127.0.0.1 -p 6379 -a ......
--测试集群的运行状况:
CLUSTER nodes
CLUSTER INFO
02.添加删除节点
添加192.168.134.143:6385到现有集群,新节点的数据路径下确保没有.conf、.aof、.rdb文件才能重启(严格时要先停掉节点该服务,清空甚至删除相关文件,再启动)
/data/redis/bin/redis-cli -a ...... --cluster add-node 192.168.134.143:6385 192.168.134.143:6379
192.168.134.143:6385 的id
6a8c075d50029d7beb67fc71c44d0eac4aa02440
--删除副本节点
/data/redis/bin/redis-cli -a ...... --cluster del-node 192.168.134.143:6379 6a8c075d50029d7beb67fc71c44d0eac4aa02440
要移除主节点,它必须为空。如果主节点不为空,则需要在之前将数据从主节点重新分配到其他主节点。
03.哈希槽重新分配
/data/redis/bin/redis-cli -a ...... --cluster reshard 192.168.134.143:6379 --cluster-from b2e5432b19243972c9eeafd5cca39d5fd8a42200 --cluster-to 6a8c075d50029d7beb67fc71c44d0eac4aa02440 --cluster-slots 2731
04.升级Redis集群中的节点
升级副本节点很容易,因为您只需要停止节点并使用更新版本的Redis重新启动。如果有客户机使用副本节点缩放读取,如果givenone不可用,它们应该能够重新连接到不同的副本。
升级masters有点复杂,建议的步骤是:
使用CLUSTER FAILOVER触发主服务器到其中一个副本的手动故障转移。(参见手动故障转移本文件中的章节。)
等待主机变成副本
最后,像对副本一样升级节点。
如果希望主节点成为刚升级的节点,请触发新的手动故障转移,以便将升级的节点变回主节点。
按照此过程,您应该依次升级一个节点,直到所有节点都升级为止。
05.手动故障转移
该命令必须在要进行故障转移master的任意slave节点上执行,执行后master和slave身份自动互换
cluster failover
[root@localhost data]# /data/redis/bin/redis-cli -h 127.0.0.1 -p 6382 -a ......
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
127.0.0.1:6382>
127.0.0.1:6382> ping
PONG
127.0.0.1:6382>
127.0.0.1:6382> CLUSTER nodes
d92be4765051dcabe4d9c9a98af7b3614f2c929a 192.168.134.143:6384@16384 slave 0bc9e58115869b5458a0aaf474b7b9d01ac4dd6a 0 1658994296073 3 connected
f8d7ab3de2a8316687d417ae1522077f60ed49de 192.168.134.143:6382@16382 myself,slave 12b09b0ccd152d1267bb94a6ad8d268d9e424cec 0 1658994292000 0 connected
0bc9e58115869b5458a0aaf474b7b9d01ac4dd6a 192.168.134.143:6381@16381 master - 0 1658994295000 3 connected 10923-16383
6e1075d9556d62e7d73cdf2139b242472ce4bf81 192.168.134.143:6383@16383 slave 056ca47dc3945072b9fd28b663f1eb8b569e9cc5 0 1658994295000 2 connected
056ca47dc3945072b9fd28b663f1eb8b569e9cc5 192.168.134.143:6380@16380 master - 0 1658994295067 2 connected 5461-10922
12b09b0ccd152d1267bb94a6ad8d268d9e424cec 192.168.134.143:6379@16379 master - 0 1658994295000 1 connected 0-5460
127.0.0.1:6382>
127.0.0.1:6382>
127.0.0.1:6382> cluster failover
OK
127.0.0.1:6382>
127.0.0.1:6382> CLUSTER nodes
d92be4765051dcabe4d9c9a98af7b3614f2c929a 192.168.134.143:6384@16384 slave 0bc9e58115869b5458a0aaf474b7b9d01ac4dd6a 0 1658994315000 3 connected
f8d7ab3de2a8316687d417ae1522077f60ed49de 192.168.134.143:6382@16382 myself,master - 0 1658994316000 4 connected 0-5460
0bc9e58115869b5458a0aaf474b7b9d01ac4dd6a 192.168.134.143:6381@16381 master - 0 1658994313000 3 connected 10923-16383
6e1075d9556d62e7d73cdf2139b242472ce4bf81 192.168.134.143:6383@16383 slave 056ca47dc3945072b9fd28b663f1eb8b569e9cc5 0 1658994314000 2 connected
056ca47dc3945072b9fd28b663f1eb8b569e9cc5 192.168.134.143:6380@16380 master - 0 1658994316225 2 connected 5461-10922
12b09b0ccd152d1267bb94a6ad8d268d9e424cec 192.168.134.143:6379@16379 slave f8d7ab3de2a8316687d417ae1522077f60ed49de 0 1658994315217 4 connected
127.0.0.1:6382>
06.迁移到redis集群
可以将数据从外部实例导入到 Redis 集群,即使用redis-cli --cluster import命令
redis-cli --cluster import 10.35.2.68:6379 --cluster-from 10.35.2.87:6379 --cluster-replace --cluster-copy
说明:外部Redis实例(10.35.2.87:6379)导入到集群中的任意一节点,倒入之后,原来集群的key变为空,导入到新集群的key会自动分片到各个mater节点的slot
--cluster-replace 如果集群(10.35.2.68:6379)中存在外部redis实例(10.35.2.87:6379)的key,则会覆盖掉(10.35.2.68:6379)的value
--cluster-copy 默认情况下,import 命令在向集群导入数据的同时,还会删除单机服务器中源数据。如果用户想要保留单机服务器中的数据,那么可以在执行命令的同时给定 –cluster-copy 选项
该命令将正在运行的实例的所有键(从源实例中删除键)移动到指定的预先存在的 Redis 集群。但是请注意,如果您使用 Redis 2.8 实例作为源实例,操作可能会很慢,因为 2.8 没有实现迁移连接缓存,因此您可能希望在执行此类操作之前使用 Redis 3.x 版本重新启动源实例(在进行这个操作之前,将redis的版本升级到Redis 3.x版本)。
07.集群扩容
添加2个节点主6385,从6386
/data/redis/bin/redis-cli -a ...... --cluster add-node 192.168.134.143:6385 192.168.134.143:6379
/data/redis/bin/redis-cli -a ...... --cluster add-node 192.168.134.143:6386 192.168.134.143:6379 --cluster-slave --cluster-master-id 96f15f431b2dff2fde63e94f5b4cabac0aed69ca
分配哈希槽给新主节点
--方法一:按需分配
/data/redis/bin/redis-cli -a ...... --cluster reshard 192.168.134.143:6379
然后根据提示依次填写分配的槽位、新主节点id、槽位来源(all、done)
或者非交互命令:
/data/redis/bin/redis-cli -a ...... --cluster reshard 192.168.134.143:6379 --cluster-from b2e5432b19243972c9eeafd5cca39d5fd8a42200 --cluster-to 6a8c075d50029d7beb67fc71c44d0eac4aa02440 --cluster-slots 2731
--方法二
--直接重新分片集群
/data/redis/bin/redis-cli -a ...... --cluster rebalance --cluster-threshold 1 --cluster-use-empty-masters 192.168.134.143:6379
fa14516c9901a8e8d213bfc2c0c80dffc1ecec5b 192.168.134.143:6386@16386 slave 96f15f431b2dff2fde63e94f5b4cabac0aed69ca 0 1658995781000 6 connected
0bc9e58115869b5458a0aaf474b7b9d01ac4dd6a 192.168.134.143:6381@16381 master - 0 1658995781000 3 connected 12288-16383
6e1075d9556d62e7d73cdf2139b242472ce4bf81 192.168.134.143:6383@16383 slave 056ca47dc3945072b9fd28b663f1eb8b569e9cc5 0 1658995780000 2 connected
12b09b0ccd152d1267bb94a6ad8d268d9e424cec 192.168.134.143:6379@16379 myself,master - 0 1658995776000 5 connected 1365-5460
f8d7ab3de2a8316687d417ae1522077f60ed49de 192.168.134.143:6382@16382 slave 12b09b0ccd152d1267bb94a6ad8d268d9e424cec 0 1658995780000 5 connected
96f15f431b2dff2fde63e94f5b4cabac0aed69ca 192.168.134.143:6385@16385 master - 0 1658995783154 6 connected 0-1364 5461-6826 10923-12287
d92be4765051dcabe4d9c9a98af7b3614f2c929a 192.168.134.143:6384@16384 slave 0bc9e58115869b5458a0aaf474b7b9d01ac4dd6a 0 1658995782149 3 connected
056ca47dc3945072b9fd28b663f1eb8b569e9cc5 192.168.134.143:6380@16380 master - 0 1658995781144 2 connected 6827-10922
08.集群缩容
要求:删除master节点A及此slave节点A1
操作步骤:
1)先删除slave A1节点(此操作理论上,应该删除掉A节点所有的slave节点);参考02中的删除节点
2)将A上的slot重新分片到其他的master节点;可参考03或者07目录下的分配哈希槽
操作完成以后可能会有如下报错,没有关系:
Node 127.0.0.1:6381 replied with error:
ERR Please use SETSLOT only with masters.
3)此时查看A节点,A已经变为了接受分片槽节点的master节点
4)删除A节点 ;参考02中的删除节点
09.节点挂掉处理
从节点挂掉:
能重启且数据目录下文件没有丢失就自动加入集群;
若目录下的文件丢失,重启后该节点状态有问题,处理思路:先删除再指定主节点
cluster forget cdc33acca6797723b3fcb3c2386030b0759abe06
/data/redis/bin/redis-cli -a ...... --cluster add-node 192.168.134.143:6386 192.168.134.143:6379 --cluster-slave --cluster-master-id 33efb30b242b28509c0b8f85e791aa6af17d9ef0
主节点挂掉:slave会转为新主
能重启且数据目录下文件没有丢失就自动加入集群;
若目录下的文件丢失,重启后该节点状态有问题,处理思路同上。
若同一主从挂掉:能重启且数据目录下文件没有丢失就自动加入集群;
若目录下的文件丢失,重启后该节点状态有问题,处理思路:
cluster forget feba58aa118956ddebc1dd162276c5e4c0c18d7d
cluster forget cdc33acca6797723b3fcb3c2386030b0759abe06
/data/redis/bin/redis-cli -a ...... --cluster fix 192.168.134.143:6379
/data/redis/bin/redis-cli -a ...... --cluster add-node 192.168.134.143:6385 192.168.134.143:6379
/data/redis/bin/redis-cli -a ...... --cluster add-node 192.168.134.143:6386 192.168.134.143:6379 --cluster-slave --cluster-master-id 96f15f431b2dff2fde63e94f5b4cabac0aed69ca
/data/redis/bin/redis-cli -a ...... --cluster rebalance --cluster-threshold 1 --cluster-use-empty-masters 192.168.134.143:6379
10.扩展
redis-cli --cluster reshard <host>:<port> --cluster-from <node-id> --cluster-to <node-id> --cluster-slots <number of slots> --cluster-yes
--cluster-yes选项指示集群管理器对命令的提示自动回答“是”,允许它以非交互模式运行。请注意,也可以通过设置REDISCLI_CLUSTER_是环境变量