1. 程式人生 > 實用技巧 >Redis5.0 Cluster叢集搭建及擴容

Redis5.0 Cluster叢集搭建及擴容

Redis3.0之後,Redis官方提供了完整的叢集解決方案。該方案採用去中心化的方式,包括:sharding(分割槽)、replication(複製)、failover(故障轉移),稱為RedisCluster。Redis5.0前採用redis-trib進行叢集的建立和管理,需要ruby支援。Redis5.0可以直接使用Redis-cli進行叢集的建立和管理。這裡主要介紹使用Redis5.0.10搭建RedisCluster叢集

1.環境準備

1.1 叢集規劃

Maste1 - 192.168.1.161:6379 
Slave1 - 192.168.1.161:6380
Maste2 - 192.168.1.162:6379
Slave2 - 192.168.1.162:6380
Maste3 - 192.168.1.163:6379
Slave3 - 192.168.1.163:6380
Maste4(擴容) - 192.168.1.165:6379
Slave4(擴容) - 192.168.1.165:6380

Redis叢集最少需要6個節點,可以分佈在一臺或者多臺主機上。本次使用4臺虛擬機器,先161,162,163上搭建一個三主三從的叢集,每臺虛擬機器上安裝6379和6380兩個節點。叢集搭建成功後,在165上新建兩個節點(一主一從),將兩個新的節點加入叢集,來驗證叢集擴容。

1.2 安裝包下載準備

wget https://download.redis.io/releases/redis-5.0.10.tar.gz
tar -zxvf redis-5.0.10.tar.gz
cd redis-5.0.10
mkdir -p /opt/redis-cluster/6379 /opt/redis-cluster/6380
make install PREFIX=/opt/redis-cluster/6379
make install PREFIX=/opt/redis-cluster/6380
cp redis.conf  /opt/redis-cluster/6379/bin
cp redis.conf  /opt/redis-cluster/6380/bin

2.叢集配置

2.1 修改每臺伺服器上的節點配置檔案

修改/opt/redis-cluster/6379/bin/redis.conf

###1.註釋掉bind
#bind 127.0.0.1
###2.修改protected-mode為no
protected-mode no
###3.修改cluster-enable為 yes
cluster-enable yes
###4.修改daemonize為 yes
daemonize yes

修改/opt/redis-cluster/6380/bin/redis.conf

###1.註釋掉bind
#bind 127.0.0.1
###2.修改protected-mode為no
protected-mode no
###3.修改cluster-enable為 yes
cluster-enable yes
###4.修改daemonize為 yes
daemonize yes
###5.port 修改為6380
port 6380
###6.修改pidfile 為 /var/run/redis_6380.pid
pidfile /var/run/redis_6380.pid

2.2 啟動節點

cd /opt/redis-cluster/6379/bin/
./redis-server redis.conf
cd /opt/redis-cluster/6380/bin/
./redis-server redis.conf
##檢視節點是否啟動
 ps -ef|grep redis

2.3 建立Redis叢集

選取一個節點執行建立叢集命令,如下:

[root@master bin]# cd /opt/redis-cluster/6379/bin/
[root@master bin]# ./redis-cli --cluster create 192.168.1.161:6379 192.168.1.162:6379 192.168.1.163:6379 192.168.1.161:6380 192.168.1.162:6380 192.168.1.163:6380 --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 192.168.1.162:6380 to 192.168.1.161:6379
Adding replica 192.168.1.163:6380 to 192.168.1.162:6379
Adding replica 192.168.1.161:6380 to 192.168.1.163:6379
M: 64364a4b2de9a82653b46be040e86f600fb5ac2d 192.168.1.161:6379
   slots:[0-5460] (5461 slots) master
M: 9ee1767e39b07033b480c82337620ed006162c8a 192.168.1.162:6379
   slots:[5461-10922] (5462 slots) master
M: 041fcc81090840f67efed70d3cd623076d15dbc4 192.168.1.163:6379
   slots:[10923-16383] (5461 slots) master
S: f59d4108d4fbe145c2d9c6f2d70e06991a4d63be 192.168.1.161:6380
   replicates 041fcc81090840f67efed70d3cd623076d15dbc4
S: 113134e4cedc9069db1af667b2f6cf23097d0b3e 192.168.1.162:6380
   replicates 64364a4b2de9a82653b46be040e86f600fb5ac2d
S: 65ad86c316f6452ca6a7429febe4a9d96f6c2e43 192.168.1.163:6380
   replicates 9ee1767e39b07033b480c82337620ed006162c8a
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 192.168.1.161:6379)
M: 64364a4b2de9a82653b46be040e86f600fb5ac2d 192.168.1.161:6379
   slots:[0-5460] (5461 slots) master
   1 additional replica(s)
S: 113134e4cedc9069db1af667b2f6cf23097d0b3e 192.168.1.162:6380
   slots: (0 slots) slave
   replicates 64364a4b2de9a82653b46be040e86f600fb5ac2d
M: 041fcc81090840f67efed70d3cd623076d15dbc4 192.168.1.163:6379
   slots:[10923-16383] (5461 slots) master
   1 additional replica(s)
M: 9ee1767e39b07033b480c82337620ed006162c8a 192.168.1.162:6379
   slots:[5461-10922] (5462 slots) master
   1 additional replica(s)
S: 65ad86c316f6452ca6a7429febe4a9d96f6c2e43 192.168.1.163:6380
   slots: (0 slots) slave
   replicates 9ee1767e39b07033b480c82337620ed006162c8a
S: f59d4108d4fbe145c2d9c6f2d70e06991a4d63be 192.168.1.161:6380
   slots: (0 slots) slave
   replicates 041fcc81090840f67efed70d3cd623076d15dbc4
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
[root@master bin]# 

如上,叢集建立成功。可以通過redis-cli連線檢視叢集狀態:

./redis-cli -h 127.0.0.1 -p 6379 -c
###檢視叢集狀態
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:168
cluster_stats_messages_pong_sent:164
cluster_stats_messages_sent:332
cluster_stats_messages_ping_received:159
cluster_stats_messages_pong_received:168
cluster_stats_messages_meet_received:5
cluster_stats_messages_received:332
###檢視進群節點
127.0.0.1:6379> cluster nodes
113134e4cedc9069db1af667b2f6cf23097d0b3e 192.168.1.162:6380@16380 slave 64364a4b2de9a82653b46be040e86f600fb5ac2d 0 1604321562000 5 connected
041fcc81090840f67efed70d3cd623076d15dbc4 192.168.1.163:6379@16379 master - 0 1604321563496 3 connected 10923-16383
64364a4b2de9a82653b46be040e86f600fb5ac2d 192.168.1.161:6379@16379 myself,master - 0 1604321563000 1 connected 0-5460
9ee1767e39b07033b480c82337620ed006162c8a 192.168.1.162:6379@16379 master - 0 1604321562000 2 connected 5461-10922
65ad86c316f6452ca6a7429febe4a9d96f6c2e43 192.168.1.163:6380@16380 slave 9ee1767e39b07033b480c82337620ed006162c8a 0 1604321564506 6 connected
f59d4108d4fbe145c2d9c6f2d70e06991a4d63be 192.168.1.161:6380@16380 slave 041fcc81090840f67efed70d3cd623076d15dbc4 0 1604321562484 4 connected

3.叢集擴容

3.1 新增新節點

[root@master bin]# cd /opt/redis-cluster/6379/bin/
[root@master bin]# ./redis-cli --cluster add-node 192.168.1.165:6379 192.168.1.161:6379
>>> Adding node 192.168.1.165:6379 to cluster 192.168.1.161:6379
>>> Performing Cluster Check (using node 192.168.1.161:6379)
M: 64364a4b2de9a82653b46be040e86f600fb5ac2d 192.168.1.161:6379
   slots:[0-5460] (5461 slots) master
   1 additional replica(s)
S: 113134e4cedc9069db1af667b2f6cf23097d0b3e 192.168.1.162:6380
   slots: (0 slots) slave
   replicates 64364a4b2de9a82653b46be040e86f600fb5ac2d
M: 041fcc81090840f67efed70d3cd623076d15dbc4 192.168.1.163:6379
   slots:[10923-16383] (5461 slots) master
   1 additional replica(s)
M: 9ee1767e39b07033b480c82337620ed006162c8a 192.168.1.162:6379
   slots:[5461-10922] (5462 slots) master
   1 additional replica(s)
S: 65ad86c316f6452ca6a7429febe4a9d96f6c2e43 192.168.1.163:6380
   slots: (0 slots) slave
   replicates 9ee1767e39b07033b480c82337620ed006162c8a
S: f59d4108d4fbe145c2d9c6f2d70e06991a4d63be 192.168.1.161:6380
   slots: (0 slots) slave
   replicates 041fcc81090840f67efed70d3cd623076d15dbc4
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
>>> Send CLUSTER MEET to node 192.168.1.165:6379 to make it join the cluster.
[OK] New node added correctly.

此時檢視節點狀態:

[root@master bin]# ./redis-cli -h 127.0.0.1 -p 6379 -c
127.0.0.1:6379> cluster nodes
113134e4cedc9069db1af667b2f6cf23097d0b3e 192.168.1.162:6380@16380 slave 64364a4b2de9a82653b46be040e86f600fb5ac2d 0 1604321847825 5 connected
041fcc81090840f67efed70d3cd623076d15dbc4 192.168.1.163:6379@16379 master - 0 1604321842740 3 connected 10923-16383
64364a4b2de9a82653b46be040e86f600fb5ac2d 192.168.1.161:6379@16379 myself,master - 0 1604321844000 1 connected 0-5460
9ee1767e39b07033b480c82337620ed006162c8a 192.168.1.162:6379@16379 master - 0 1604321846808 2 connected 5461-10922
828c48dc72d52ff5be972512d3d87b70236af87c 192.168.1.165:6379@16379 master - 0 1604321845792 0 connected
65ad86c316f6452ca6a7429febe4a9d96f6c2e43 192.168.1.163:6380@16380 slave 9ee1767e39b07033b480c82337620ed006162c8a 0 1604321847000 6 connected
f59d4108d4fbe145c2d9c6f2d70e06991a4d63be 192.168.1.161:6380@16380 slave 041fcc81090840f67efed70d3cd623076d15dbc4 0 1604321844779 4 connected
127.0.0.1:6379>

看到165的6379節點已經存在,

3.2 新節點hash槽分配

需要給新節點進行hash槽分配,這樣該主節才可以儲存資料

連線上叢集(連線叢集中任意一個可用結點都行)

[root@master bin]# ./redis-cli --cluster reshard 192.168.1.165:6379
>>> Performing Cluster Check (using node 192.168.1.165:6379)
M: 828c48dc72d52ff5be972512d3d87b70236af87c 192.168.1.165:6379
   slots: (0 slots) master
M: 9ee1767e39b07033b480c82337620ed006162c8a 192.168.1.162:6379
   slots:[5461-10922] (5462 slots) master
   1 additional replica(s)
M: 64364a4b2de9a82653b46be040e86f600fb5ac2d 192.168.1.161:6379
   slots:[0-5460] (5461 slots) master
   1 additional replica(s)
M: 041fcc81090840f67efed70d3cd623076d15dbc4 192.168.1.163:6379
   slots:[10923-16383] (5461 slots) master
   1 additional replica(s)
S: 65ad86c316f6452ca6a7429febe4a9d96f6c2e43 192.168.1.163:6380
   slots: (0 slots) slave
   replicates 9ee1767e39b07033b480c82337620ed006162c8a
S: 113134e4cedc9069db1af667b2f6cf23097d0b3e 192.168.1.162:6380
   slots: (0 slots) slave
   replicates 64364a4b2de9a82653b46be040e86f600fb5ac2d
S: f59d4108d4fbe145c2d9c6f2d70e06991a4d63be 192.168.1.161:6380
   slots: (0 slots) slave
   replicates 041fcc81090840f67efed70d3cd623076d15dbc4
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
How many slots do you want to move (from 1 to 16384)?

輸入要分配的槽數量

How many slots do you want to move (from 1 to 16384)? 4000 

輸入接收槽的結點id

通過cluster nodes 檢視新增的192.168.1.165:6379 的id為828c48dc72d52ff5be972512d3d87b70236af87c

What is the receiving node ID? 828c48dc72d52ff5be972512d3d87b70236af87c
Please enter all the source node IDs.
  Type 'all' to use all the nodes as source nodes for the hash slots.
  Type 'done' once you entered all the source nodes IDs.

輸入all

然後輸入輸入yes確認

此時再通過cluster nodes檢視節點,可以看到新節點分配的槽為0-1332 5461-6794 10923-12255

127.0.0.1:6379> cluster nodes
113134e4cedc9069db1af667b2f6cf23097d0b3e 192.168.1.162:6380@16380 slave 64364a4b2de9a82653b46be040e86f600fb5ac2d 0 1604322686164 5 connected
041fcc81090840f67efed70d3cd623076d15dbc4 192.168.1.163:6379@16379 master - 0 1604322684000 3 connected 12256-16383
64364a4b2de9a82653b46be040e86f600fb5ac2d 192.168.1.161:6379@16379 myself,master - 0 1604322684000 1 connected 1333-5460
9ee1767e39b07033b480c82337620ed006162c8a 192.168.1.162:6379@16379 master - 0 1604322685155 2 connected 6795-10922
828c48dc72d52ff5be972512d3d87b70236af87c 192.168.1.165:6379@16379 master - 0 1604322686000 7 connected 0-1332 5461-6794 10923-12255
65ad86c316f6452ca6a7429febe4a9d96f6c2e43 192.168.1.163:6380@16380 slave 9ee1767e39b07033b480c82337620ed006162c8a 0 1604322683000 6 connected
f59d4108d4fbe145c2d9c6f2d70e06991a4d63be 192.168.1.161:6380@16380 slave 041fcc81090840f67efed70d3cd623076d15dbc4 0 1604322685000 4 connected
127.0.0.1:6379>

3.3 給新節點新增從節點

給192.168.1.165:6379增加從節點192.168.1.165:6380

[root@master bin]# ./redis-cli --cluster add-node 192.168.1.165:6380 192.168.1.165:6379 --cluster-slave --cluster-master-id 828c48dc72d52ff5be972512d3d87b70236af87c
>>> Adding node 192.168.1.165:6380 to cluster 192.168.1.165:6379
>>> Performing Cluster Check (using node 192.168.1.165:6379)
M: 828c48dc72d52ff5be972512d3d87b70236af87c 192.168.1.165:6379
   slots:[0-1332],[5461-6794],[10923-12255] (4000 slots) master
M: 9ee1767e39b07033b480c82337620ed006162c8a 192.168.1.162:6379
   slots:[6795-10922] (4128 slots) master
   1 additional replica(s)
M: 64364a4b2de9a82653b46be040e86f600fb5ac2d 192.168.1.161:6379
   slots:[1333-5460] (4128 slots) master
   1 additional replica(s)
M: 041fcc81090840f67efed70d3cd623076d15dbc4 192.168.1.163:6379
   slots:[12256-16383] (4128 slots) master
   1 additional replica(s)
S: 65ad86c316f6452ca6a7429febe4a9d96f6c2e43 192.168.1.163:6380
   slots: (0 slots) slave
   replicates 9ee1767e39b07033b480c82337620ed006162c8a
S: 113134e4cedc9069db1af667b2f6cf23097d0b3e 192.168.1.162:6380
   slots: (0 slots) slave
   replicates 64364a4b2de9a82653b46be040e86f600fb5ac2d
S: f59d4108d4fbe145c2d9c6f2d70e06991a4d63be 192.168.1.161:6380
   slots: (0 slots) slave
   replicates 041fcc81090840f67efed70d3cd623076d15dbc4
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
>>> Send CLUSTER MEET to node 192.168.1.165:6380 to make it join the cluster.
Waiting for the cluster to join

>>> Configure node as replica of 192.168.1.165:6379.
[OK] New node added correctly.
[root@master bin]# 
來源:烏海SEO