$ cat 7003/nodes-7003.conf #分配slots:12288-16383(注意127.0.0.1:7003对应的行尾) 2875f2155e3214d7950dd5916f5ecf5edd3d9fee 127.0.0.1:7001 master - 0 1438850264808 2 connected 75334aae3ced44cf0e8416691aeef8249e7a0621 127.0.0.1:7002 master - 0 1438850265819 3 connected 14d4071b97121e703e44bbc834f42d1b31c8ea95 127.0.0.1:7000 master - 0 1438850263798 1 connected 8b721ff1ac2e383ffcbcf133d502c6957f8df713 127.0.0.1:7003 myself,master - 0 0 0 connected 12288-16383 vars currentEpoch 3 lastVoteEpoch 0 $
配置修改成功之后,重新启动redis:
$ # 停止redis $ ps -ef|grep redis cjf 5834 1 0 16:33 ? 00:00:00 redis-server 127.0.0.1:7000 [cluster] cjf 5839 1 0 16:34 ? 00:00:00 redis-server 127.0.0.1:7001 [cluster] cjf 5843 1 0 16:34 ? 00:00:00 redis-server 127.0.0.1:7002 [cluster] cjf 5847 1 0 16:34 ? 00:00:00 redis-server 127.0.0.1:7003 [cluster] cjf 5921 5252 0 16:46 pts/2 00:00:00 grep redis $ kill 5834 5839 5843 5847 $ # 重新启动redis $ cd 7000 $ redis-server ./redis.conf $ cd ../7001 $ redis-server ./redis.conf $ cd ../7002 $ redis-server ./redis.conf $ cd ../7003 $ redis-server ./redis.conf $ # 检查分配的slots是否生效: $ redis-cli -p 7000 127.0.0.1:7000> cluster nodes 8b721ff1ac2e383ffcbcf133d502c6957f8df713 127.0.0.1:7003 master - 0 1438850861230 0 connected 12288-16383 14d4071b97121e703e44bbc834f42d1b31c8ea95 127.0.0.1:7000 myself,master - 0 0 1 connected 0-4095 2875f2155e3214d7950dd5916f5ecf5edd3d9fee 127.0.0.1:7001 master - 0 1438850860221 2 connected 4096-8191 75334aae3ced44cf0e8416691aeef8249e7a0621 127.0.0.1:7002 master - 0 1438850859209 3 connected 8192-12287 127.0.0.1:7000> 127.0.0.1:7000> cluster info cluster_state:ok cluster_slots_assigned:16384 cluster_slots_ok:16384 cluster_slots_pfail:0 cluster_slots_fail:0 cluster_known_nodes:4 cluster_size:4 cluster_current_epoch:3 cluster_my_epoch:1 cluster_stats_messages_sent:416 cluster_stats_messages_received:73 127.0.0.1:7000>
当前情况下,redis-cluster部署完毕。
6 给master节点配一个slave节点
在前面,我们配置好了redis的集群并分配了slots,集群已经可用了,集群中现在有4个master节点,所有写入这个集群中的数据都会分片到这4个redis实例中,但是现在存在这样一个问题:如果某个master节点挂掉的话,那么这个集群就不可用了,所以我们现在为集群中的4个master实例各启一个slave实例做主备。
$ mkdir 8000 8001 8002 8003 $ cp 7000/redis.conf 8000 $ cp 7000/redis.conf 8001 $ cp 7000/redis.conf 8002 $ cp 7000/redis.conf 8003
将redis.conf中下面两个配置修改为对应的端口:
port 800X cluster-config-file nodes-800X.conf
然后启动这4个实例:
$ cd 8000/ $ redis-server ./redis.conf $ cd ../8001 $ redis-server ./redis.conf $ cd ../8002 $ redis-server ./redis.conf $ cd ../8003 $ redis-server ./redis.conf $ $ ps -ef|grep redis cjf 5928 1 0 16:47 ? 00:00:02 redis-server 127.0.0.1:7000 [cluster] cjf 5933 1 0 16:47 ? 00:00:02 redis-server 127.0.0.1:7001 [cluster] cjf 5937 1 0 16:47 ? 00:00:02 redis-server 127.0.0.1:7002 [cluster] cjf 5941 1 0 16:47 ? 00:00:02 redis-server 127.0.0.1:7003 [cluster] cjf 6136 1 0 17:20 ? 00:00:00 redis-server 127.0.0.1:8000 [cluster] cjf 6141 1 0 17:20 ? 00:00:00 redis-server 127.0.0.1:8001 [cluster] cjf 6145 1 0 17:21 ? 00:00:00 redis-server 127.0.0.1:8002 [cluster] cjf 6150 1 0 17:21 ? 00:00:00 redis-server 127.0.0.1:8003 [cluster] cjf 6157 5252 0 17:21 pts/2 00:00:00 grep redis [cjf@host1 8003]$
再将这4个redis实例cluster meet到集群中:
$ redis-cli -p 7000 127.0.0.1:7000> cluster nodes 8b721ff1ac2e383ffcbcf133d502c6957f8df713 127.0.0.1:7003 master - 0 1438852991236 0 connected 12288-16383 14d4071b97121e703e44bbc834f42d1b31c8ea95 127.0.0.1:7000 myself,master - 0 0 1 connected