【1】试验环境
结构图如下:
(这里试验没有那么多机器,就用3台机器搭建试验)
redis1是redis集群的一个节点A,上面运行了两个redis实例,7001 7004
redis2是redis集群的一个节点B,上面运行了两个redis实例,7002 7005
redis3是redis集群的一个节点C,上面运行了两个redis实例,7003 7006
-- 试验集群包含 A/B/C A1/B1/C1 6个节点
A、B、C 为主节点对应Redis实例:7001 7002 7003
A1、A2、A3 为主节点的从库,对应Redis实例:7004 7005 7006
-- 交叉构建主从节点,对应关系为
【A > B】 【B>C】 【C>A1】
A:192.168.135.173
B:192.168.135.174
C:192.168.135.175
-- IP与端口分布:
cluster1:
主:192.168.135.173 7001 /data/redis/redis-cluster/nodes-7001/redis.conf
备:192.168.135.174 7005 /data/redis/redis-cluster/nodes-7005/redis.conf
cluster2:
主:192.168.135.174 7002 /data/redis/redis-cluster/nodes-7002/redis.conf
备:192.168.135.175 7006 /data/redis/redis-cluster/nodes-7006/redis.conf
cluster3:
主:192.168.135.175 7003 /data/redis/redis-cluster/nodes-7003/redis.conf
备:192.168.135.175 7004 /data/redis/redis-cluster/nodes-7004/redis.conf
【2】清除现有集群
如果有的话,才做这一步,没有的话,直接下一步【3】即可
(2.1)清理现有数据
#登录集群
redis-cli -c -h 192.168.135.173 -p 7001
#删除数据
flushdb
(2.2)删掉现有集群
#停掉集群节点的redis服务,举例代码如下:
《1》./startall.sh stop 《2》redis-cli -h 192.168.135.173 -p 7001
#删掉集群节点的所有 aof/rdb/pid/nodes.conf,举例代码如下:
rm -rf /data/redis/7001conf/{appendonly.aof,redis.rdb,redis.pid,nodes-7001.conf}
【3】手动配置集群
(3.1)启动各节点的redis服务
案例代码如下:
《1》./startall.sh start 《2》redis-server /data/redis/7001conf/7001redis.conf
(3.2)登录集群,开始握手
redis-cli -p 7001 -h 192.168.135.173 -c
cluster meet 192.168.135.173 7001
cluster meet 192.168.135.173 7004
cluster meet 192.168.135.174 7002
cluster meet 192.168.135.174 7005
cluster meet 192.168.135.175 7003
cluster meet 192.168.135.175 7006
(3.3)查看节点
cluster nodes
#这个时候如果想操作,比如使用set test1 a,会报错 (error) CLUSTERDOWN Hash slot not served,说是还没有分配哈希槽来提供服务。
(3.4)分配 16384个哈希槽
主:
redis-cli -h 192.168.135.173 -p 7001 cluster addslots {0..5461}
redis-cli -h 192.168.135.174 -p 7002 cluster addslots {5462..10922}
redis-cli -h 192.168.135.175 -p 7003 cluster addslots {10923..16383}
(3.5)主从映射
#登录上从库开始复制,利用cluster nodes 查看对应主库的 node_id
(主从对应关系在【0】已经规划好,大致如:7001~7005,7002~7006,7003~7004)
#cluster replicate 7001node_id redis-cli -h 192.168.135.174 -p 7005 cluster replicate b7fcec9116ec14593e821104fa00ae8019d91054
exit #cluster replicate 7002node_id redis-cli -h 192.168.135.175 -p 7006 cluster replicate 5de5cda4fb5ad46f1d7a67b75b04946a0c203ff5
exit #cluster replicate 7003node_id redis-cli -h 192.168.135.173 -p 7004 cluster replicate 77ad3c48f3e8903d369c6190600aadfdbaa1ef20
exit
最终IP、主从、槽位 效果: