Redis 超详细的手动搭建Cluster集群步骤 (2)

image-20210401221228929

​ 每个节点上执行以下2条命令进行服务启动:

$ redis-server /usr/local/redis_cluster/redis_6379/conf/redis.cnf $ redis-server /usr/local/redis_cluster/redis_6380/conf/redis.cnf


集群模式启动,进程后会加上[cluster]的字样:

$ ps -ef | grep redis root 51311 1 0 11:30 ? 00:00:00 redis-server 192.168.0.120:6379 [cluster] root 51329 1 0 11:30 ? 00:00:00 redis-server 192.168.0.120:6380 [cluster] root 51396 115516 0 11:31 pts/1 00:00:00 grep --color=auto redis

​ 同时,查看一下集群节点配置文件,会发现生成了一组集群信息,每个Redis服务都是不同的:

$ cat /usr/local/redis_cluster/redis_6379/nodes_6379.conf c8a8c7d52e6e7403e799c75302b6411e2027621b :0@0 myself,master - 0 0 0 connected vars currentEpoch 0 lastVoteEpoch 0 $ cat /usr/local/redis_cluster/redis_6380/nodes_6380.conf baa10306639fcaca833db0d521235bc9593dbeca :0@0 myself,master - 0 0 0 connected vars currentEpoch 0 lastVoteEpoch 0 # 第一段信息是这个Redis服务作为集群节点的一个身份编码 # 别名为集群的node-id 加入集群

​ 现在虽然说每个服务都成功启动了,但是彼此之间并没有任何联系。

​ 所以下一步要做的就是将6个服务加入至一个集群中,如下操作示例:

$ redis-cli -h node1 -p 6379 node1:6379> cluster meet 192.168.0.130 6379 node1:6379> cluster meet 192.168.0.140 6379 node1:6379> cluster meet 192.168.0.120 6380 node1:6379> cluster meet 192.168.0.130 6380 node1:6379> cluster meet 192.168.0.140 6380

​ 查看当前集群所有的节点:

node1:6379> cluster nodes 214dc5a10149091047df1c61fd3415d91d6204ea 192.168.0.130:6379@16379 master - 0 1617291123000 1 connected baa10306639fcaca833db0d521235bc9593dbeca 192.168.0.120:6380@16380 master - 0 1617291120000 3 connected 7a151f97ee9b020a3c954bbf78cd7ed8a674aa70 192.168.0.140:6379@16379 master - 0 1617291123000 2 connected bae708f7b8df32edf4571c72bbf87715eb45c169 192.168.0.130:6380@16380 master - 0 1617291124175 4 connected fd1dde2a641727e52b4e82cfb351fe3c17690a17 192.168.0.140:6380@16380 master - 0 1617291124000 0 connected c8a8c7d52e6e7403e799c75302b6411e2027621b 192.168.0.120:6379@16379 myself,master - 0 1617291121000 5 connected

​ 查看端口监听,可以发现Gossip监听的1000+端口出现了,此时代表集群各个节点之间已经能互相通信了:

$ netstat -lnpt | grep redis tcp 0 0 192.168.0.120:6379 0.0.0.0:* LISTEN 51311/redis-server tcp 0 0 192.168.0.120:6380 0.0.0.0:* LISTEN 51329/redis-server tcp 0 0 192.168.0.120:16379 0.0.0.0:* LISTEN 51311/redis-server tcp 0 0 192.168.0.120:16380 0.0.0.0:* LISTEN 51329/redis-server 主从配置

​ 6个服务之间并没有任何主从关系,所以现在进行主从配置,记录下上面cluster nodes命令输出的node-id信息,只记录主节点:

hostname 节点 node-id
node1   192.168.0.120:6379   c8a8c7d52e6e7403e799c75302b6411e2027621b  
node2   192.168.0.130:6379   214dc5a10149091047df1c61fd3415d91d6204ea  
node3   192.168.0.140:6379   7a151f97ee9b020a3c954bbf78cd7ed8a674aa70  

​ 首先是node1的6380,将它映射到node2的6379:

$ redis-cli -h node1 -p 6380 node1:6380> cluster replicate 214dc5a10149091047df1c61fd3415d91d6204ea

​ 然后是node2的6380,将它映射到node3的6379:

$ redis-cli -h node2 -p 6380 node2:6380> cluster replicate 7a151f97ee9b020a3c954bbf78cd7ed8a674aa70

​ 最后是node3的6380,将它映射到node1的6379:

$ redis-cli -h node3 -p 6380 node3:6380> cluster replicate c8a8c7d52e6e7403e799c75302b6411e2027621b

​ 查看集群节点信息,内容有精简:

$ redis-cli -h node1 -p 6379 node1:6379> cluster nodes 192.168.0.130:6379@16379 master 192.168.0.120:6380@16380 slave 192.168.0.140:6379@16379 master 192.168.0.130:6380@16380 slave 192.168.0.140:6380@16380 slave 192.168.0.120:6379@16379 myself,master # myself表示当前登录的是那个服务 分配槽位

​ 接下来我们要开始分配槽位了,为了考虑今后的写入操作能分配均匀,槽位也要进行均匀分配。

​ 仅在Master上进行分配,从库不进行分配,仅做主库的备份和读库使用。

​ 使用python计算每个master节点分多少槽位:

$ python3 >>> divmod(16384,3) (5461, 1)

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

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