redis cluster集群搭建

安装redis-5.0.5

yum -y install gcc make
tar  xf redis-5.0.5.tar.gz
mv redis-5.0.5 redis
cd redis
make
make install

因为redis 集群最低6个节点,不然无法创建
创建6个不同的redis配置文件存放目录,方便寻找

#mkdir -p /usr/local/redis-cluster/{6379,6380,6381,6382,6383,6384}

修改配置文件

#bind 127.0.0.1      #注释掉,或者指定访问IP
protected-mode no    #非保护模式
port 6379            #端口修改,这里安装目录依次修改端口
daemonize yes         #以后台方式运行
cluster-enabled yes   #启动集群模式
cluster-config-file nodes-6379.conf  #集群节点配置文件,会在指定的目录下创建自动创建这个文件
cluster-node-timeout 15000   #指定集群节点超时时间
appendonly yes             #指定持久化方式
dir /usr/local/redis-cluster/6379/    #指定持久化存储数据的目录,nodes-6379.conf也会在这个下面生成

[root@registry redis-cluster]# ll 6379 6380 6381 6382 6383 6384
6379:
total 64
-rw-r--r-- 1 root root 61794 Aug  8 07:35 redis-6379.conf
6380:
total 64
-rw-r--r-- 1 root root 61794 Aug  8 07:39 redis-6380.conf
6381:
total 64
-rw-r--r-- 1 root root 61794 Aug  8 07:49 redis-6381.conf
6382:
total 64
-rw-r--r-- 1 root root 61794 Aug  8 07:43 redis-6382.conf
6383:
total 64
-rw-r--r-- 1 root root 61794 Aug  8 07:44 redis-6383.conf
6384:
total 64
-rw-r--r-- 1 root root 61794 Aug  8 07:44 redis-6384.conf


启动六个redis服务
[root@registry src]# ./redis-server /usr/local/redis-cluster/6379/redis-6379.conf
[root@registry src]# ./redis-server /usr/local/redis-cluster/6380/redis-6380.conf
[root@registry src]# ./redis-server /usr/local/redis-cluster/6381/redis-6381.conf
[root@registry src]# ./redis-server /usr/local/redis-cluster/6382/redis-6382.conf
[root@registry src]# ./redis-server /usr/local/redis-cluster/6383/redis-6383.conf
[root@registry src]# ./redis-server /usr/local/redis-cluster/6384/redis-6384.conf
[root@registry src]# ps aux|grep redis
root      6794  0.0  0.0  50304  5092 ?        Ssl  07:45   0:00 ./redis-server *:6379 [cluster]
root      6801  0.0  0.0  50304  5120 ?        Ssl  07:45   0:00 ./redis-server *:6380 [cluster]
root      6808  0.0  0.0  50304  2836 ?        Ssl  07:45   0:00 ./redis-server *:6382 [cluster]
root      6813  0.0  0.0  50304  2832 ?        Ssl  07:46   0:00 ./redis-server *:6383 [cluster]
root      6818  0.0  0.0  50304  2832 ?        Ssl  07:46   0:00 ./redis-server *:6384 [cluster]
root      6834  0.0  0.0  50304  4872 ?        Ssl  07:49   0:00 ./redis-server *:6381 [cluster]
root      6839  0.0  0.0   9092   668 ?        S+   07:49   0:00 grep --color=auto redis

创建集群(-a 是指定密码,这里没有使用)

cd /opt/redis/src/
[root@registry src]# ./redis-cli --cluster create 127.0.0.1:6379 127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384 --cluster-replicas 1
>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 127.0.0.1:6383 to 127.0.0.1:6379
Adding replica 127.0.0.1:6384 to 127.0.0.1:6380
Adding replica 127.0.0.1:6382 to 127.0.0.1:6381
>>> Trying to optimize slaves allocation for anti-affinity
[WARNING] Some slaves are in the same host as their master
M: 7e030bd39d2f7e9c8c5cb5335d5962bd71deb939 127.0.0.1:6379
   slots:[0-5460] (5461 slots) master
M: 2b62ffdf805c84833986e7c7ca6049e2556a0f6b 127.0.0.1:6380
   slots:[5461-10922] (5462 slots) master
M: 3ed213af8a99648d130a6c8160c83d8b68885912 127.0.0.1:6381
   slots:[10923-16383] (5461 slots) master
S: 121dc67d8bc3d08cd11500c53bb541bae7ef2c88 127.0.0.1:6382
   replicates 2b62ffdf805c84833986e7c7ca6049e2556a0f6b
S: 6dcb381df2435b6000d139fcdae933227a136498 127.0.0.1:6383
   replicates 3ed213af8a99648d130a6c8160c83d8b68885912
S: 0299f423f4281059ae7669af04042192abb7af03 127.0.0.1:6384
   replicates 7e030bd39d2f7e9c8c5cb5335d5962bd71deb939
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join
......
>>> Performing Cluster Check (using node 127.0.0.1:6379)
M: 7e030bd39d2f7e9c8c5cb5335d5962bd71deb939 127.0.0.1:6379
   slots:[0-5460] (5461 slots) master
   1 additional replica(s)
S: 6dcb381df2435b6000d139fcdae933227a136498 127.0.0.1:6383
   slots: (0 slots) slave
   replicates 3ed213af8a99648d130a6c8160c83d8b68885912
M: 2b62ffdf805c84833986e7c7ca6049e2556a0f6b 127.0.0.1:6380
   slots:[5461-10922] (5462 slots) master
   1 additional replica(s)
M: 3ed213af8a99648d130a6c8160c83d8b68885912 127.0.0.1:6381
   slots:[10923-16383] (5461 slots) master
   1 additional replica(s)
S: 0299f423f4281059ae7669af04042192abb7af03 127.0.0.1:6384
   slots: (0 slots) slave
   replicates 7e030bd39d2f7e9c8c5cb5335d5962bd71deb939
S: 121dc67d8bc3d08cd11500c53bb541bae7ef2c88 127.0.0.1:6382
   slots: (0 slots) slave
   replicates 2b62ffdf805c84833986e7c7ca6049e2556a0f6b
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

查看集群

[root@registry src]# ./redis-cli -c -h 127.0.0.1 -p 6379
127.0.0.1:6379> cluster info         #查看集群信息
cluster_state:ok                     #集群状态
cluster_slots_assigned:16384         #槽分配
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:3
cluster_current_epoch:6
cluster_my_epoch:1
cluster_stats_messages_ping_sent:149
cluster_stats_messages_pong_sent:158
cluster_stats_messages_sent:307
cluster_stats_messages_ping_received:153
cluster_stats_messages_pong_received:149
cluster_stats_messages_meet_received:5
cluster_stats_messages_received:307
127.0.0.1:6379> cluster nodes           #查看集群节点信息
6dcb381df2435b6000d139fcdae933227a136498 127.0.0.1:6383@16383 slave 3ed213af8a99648d130a6c8160c83d8b68885912 0 1565250958425 5 connected
2b62ffdf805c84833986e7c7ca6049e2556a0f6b 127.0.0.1:6380@16380 master - 0 1565250960428 2 connected 5461-10922
3ed213af8a99648d130a6c8160c83d8b68885912 127.0.0.1:6381@16381 master - 0 1565250957000 3 connected 10923-16383
0299f423f4281059ae7669af04042192abb7af03 127.0.0.1:6384@16384 slave 7e030bd39d2f7e9c8c5cb5335d5962bd71deb939 0 1565250959427 6 connected
7e030bd39d2f7e9c8c5cb5335d5962bd71deb939 127.0.0.1:6379@16379 myself,master - 0 1565250959000 1 connected 0-5460
121dc67d8bc3d08cd11500c53bb541bae7ef2c88 127.0.0.1:6382@16382 slave 2b62ffdf805c84833986e7c7ca6049e2556a0f6b 0 1565250958000 4 connected

测试集群

127.0.0.1:6379> set name www
-> Redirected to slot [5798] located at 127.0.0.1:6380
OK
127.0.0.1:6380> set age 20
-> Redirected to slot [741] located at 127.0.0.1:6379
OK
127.0.0.1:6379> get name
-> Redirected to slot [5798] located at 127.0.0.1:6380
"www"
127.0.0.1:6380> get age
-> Redirected to slot [741] located at 127.0.0.1:6379
"20"
127.0.0.1:6379> 


[root@registry src]# ./redis-cli -h 127.0.0.1 -p 6379
127.0.0.1:6379> set name www
(error) MOVED 5798 127.0.0.1:6380
127.0.0.1:6379> set aget 20
(error) MOVED 15185 127.0.0.1:6381
127.0.0.1:6379> get name
(error) MOVED 5798 127.0.0.1:6380
127.0.0.1:6379> get age
"20"

可以看到,客户端连接加-c选项的时候,存储和提取key的时候不断在7031和7032之间跳转,这个称为客户端重定向。之所以发生客户端重定向,是因为Redis Cluster中的每个Master节点都会负责一部分的槽(slot),存取的时候都会进行键值空间计算定位key映射在哪个槽(slot)上,如果映射的槽(slot)正好是当前Master节点负责则直接存取,否则就跳转到其他Master节点负的槽(slot)中存取,这个过程对客户端是透明的。

增加新节点

[root@registry redis-cluster]# cp -r 6384 6385 
[root@registry redis-cluster]# cd 6385
[root@registry 6385]# mv redis-6384.conf redis-6385.conf 
[root@registry 6385]# vim redis-6385.conf 
port 6385
cluster-config-file redis-6385.conf   #因为其他的已经修改,所以只需要修改这两处就可以
[root@registry src]# ./redis-server /usr/local/redis-cluster/6385/redis-6385.conf 
6886:C 08 Aug 2019 08:23:48.754 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
6886:C 08 Aug 2019 08:23:48.754 # Redis version=5.0.5, bits=64, commit=00000000, modified=0, pid=6886, just started
6886:C 08 Aug 2019 08:23:48.754 # Configuration loaded
#启动新增加节点
[root@registry src]# ps aux|grep -v grep|grep redis
root      6794  0.0  0.0  67712  7336 ?        Ssl  07:45   0:01 ./redis-server *:6379 [cluster]
root      6801  0.0  0.0  54912  7452 ?        Ssl  07:45   0:01 ./redis-server *:6380 [cluster]
root      6808  0.0  0.0  56960  7500 ?        Ssl  07:45   0:01 ./redis-server *:6382 [cluster]
root      6813  0.0  0.0  56960  7480 ?        Ssl  07:46   0:01 ./redis-server *:6383 [cluster]
root      6818  0.0  0.0  56960  7496 ?        Rsl  07:46   0:01 ./redis-server *:6384 [cluster]
root      6834  0.0  0.0  52864  5340 ?        Ssl  07:49   0:01 ./redis-server *:6381 [cluster]
root      6887  0.0  0.0  50304  2940 ?        Ssl  08:23   0:00 ./redis-server *:6385 [cluster]

添加节点到集群

[root@registry src]# ./redis-cli --cluster add-node 127.0.0.1:6385 127.0.0.1:6379 --cluster-slave

格式:
redis-cli --cluster add-node  {新节点IP}:{新节点端口} {任意集群节点IP}:{对应端口}                               #如果添加集群中的主节点,则新添加的就是主节点,如果是从节点则是从节点,可以自己添加自己为主节点

查看节点添加是否成功

在这里插入图片描述在这里插入图片描述

 # ./redis-cli --cluster add-node 127.0.0.1:6386 127.0.0.1:6379 --cluster-slave --cluster-master-id 9a9548b9d55a741d06db646b9411b3008a59bd21
    #将新副本分配给特定的主副本9a9548b9d55a741d06db646b9411b3008a59bd21

查看新节点是否成为9a9548b9d55a741d06db646b9411b3008a59bd21的从节点

在这里插入图片描述在这里插入图片描述


版权声明:本文为weixin_43887359原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。