Redis集群

Redis集群

启用集群功能

[root@node51 ~]# vim /etc/redis/6379.conf 
...
cluster-enabled yes
cluster-config-file nodes-6379.conf
cluster-node-timeout 5000
...
:wq

[root@node51 ~]# /etc/init.d/redis_6379 restart

配置管理主机
安装redis软件

[root@node57 ~]# tar -xf redis-4.0.8.tar.gz 
[root@node57 ~]# cd redis-4.0.8/
[root@node57 ~]# make && make install

部署ruby脚本运行环境

[root@node57 ~]# yum -y install rubygems ruby
[root@node57 ~]# gem install redis-3.2.1.gem
[root@node57 ~]# cp src/redis-trib.rb /root/bin/
[root@node57 ~]# redis-trib.rb help

创建集群

[root@node57 ~]# redis-trib.rb create --replicas 1 192.168.4.51:6351 192.168.4.52:6352 192.168.4.53:6353 192.168.4.54:6354 192.168.4.55:6355 192.168.4.56:6356
>>> Creating cluster
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
192.168.4.51:6351
192.168.4.52:6352
192.168.4.53:6353
Adding replica 192.168.4.55:6355 to 192.168.4.51:6351
Adding replica 192.168.4.56:6356 to 192.168.4.52:6352
Adding replica 192.168.4.54:6354 to 192.168.4.53:6353
M: eed105a64fabd4b4f07feb1712f810b706d749ac 192.168.4.51:6351
   slots:0-5460 (5461 slots) master
M: 700b8ee9b5f0a51f4aac3079ab2fefd3cf95de77 192.168.4.52:6352
   slots:5461-10922 (5462 slots) master
M: 78f03cb6da32173a60e6028fac1d19fb7ba95ecf 192.168.4.53:6353
   slots:10923-16383 (5461 slots) master
S: 97d08463fe41bf74155ab634885ba24ac8256562 192.168.4.54:6354
   replicates 78f03cb6da32173a60e6028fac1d19fb7ba95ecf
S: ba409c88b40ded1cc336d27ef9769764aeac572e 192.168.4.55:6355
   replicates eed105a64fabd4b4f07feb1712f810b706d749ac
S: ff03b0d5d8656f10f7b03bffeeeedfd1f22849ea 192.168.4.56:6356
   replicates 700b8ee9b5f0a51f4aac3079ab2fefd3cf95de77
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.4.51:6351)
M: eed105a64fabd4b4f07feb1712f810b706d749ac 192.168.4.51:6351
   slots:0-5460 (5461 slots) master
   1 additional replica(s)
S: ba409c88b40ded1cc336d27ef9769764aeac572e 192.168.4.55:6355
   slots: (0 slots) slave
   replicates eed105a64fabd4b4f07feb1712f810b706d749ac
S: ff03b0d5d8656f10f7b03bffeeeedfd1f22849ea 192.168.4.56:6356
   slots: (0 slots) slave
   replicates 700b8ee9b5f0a51f4aac3079ab2fefd3cf95de77
M: 78f03cb6da32173a60e6028fac1d19fb7ba95ecf 192.168.4.53:6353
   slots:10923-16383 (5461 slots) master
   1 additional replica(s)
M: 700b8ee9b5f0a51f4aac3079ab2fefd3cf95de77 192.168.4.52:6352
   slots:5461-10922 (5462 slots) master
   1 additional replica(s)
S: 97d08463fe41bf74155ab634885ba24ac8256562 192.168.4.54:6354
   slots: (0 slots) slave
   replicates 78f03cb6da32173a60e6028fac1d19fb7ba95ecf
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

登录其中一台服务器,查询集群信息

[root@node51 ~]# redis-cli -h 192.168.4.51 -p 6351
192.168.4.51:6351> 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:78
cluster_stats_messages_pong_sent:76
cluster_stats_messages_sent:154
cluster_stats_messages_ping_received:71
cluster_stats_messages_pong_received:78
cluster_stats_messages_meet_received:5
cluster_stats_messages_received:154
192.168.4.51:6351> cluster nodes
ba409c88b40ded1cc336d27ef9769764aeac572e 192.168.4.55:6355@16355 slave eed105a64fabd4b4f07feb1712f810b706d749ac 0 1574303893349 5 connected
eed105a64fabd4b4f07feb1712f810b706d749ac 192.168.4.51:6351@16351 myself,master - 0 1574303893000 1 connected 0-5460
ff03b0d5d8656f10f7b03bffeeeedfd1f22849ea 192.168.4.56:6356@16356 slave 700b8ee9b5f0a51f4aac3079ab2fefd3cf95de77 0 1574303894352 6 connected
78f03cb6da32173a60e6028fac1d19fb7ba95ecf 192.168.4.53:6353@16353 master - 0 1574303894854 3 connected 10923-16383
700b8ee9b5f0a51f4aac3079ab2fefd3cf95de77 192.168.4.52:6352@16352 master - 0 1574303892548 2 connected 5461-10922
97d08463fe41bf74155ab634885ba24ac8256562 192.168.4.54:6354@16354 slave 78f03cb6da32173a60e6028fac1d19fb7ba95ecf 0 1574303892548 4 connected

/var/lib/redis/6379/node-6379.conf //集群配置文件, 删除配置文件重启服务, 则清除集群配置信息

检验集群

[root@node57 ~]# redis-trib.rb info 192.168.4.51:6351
192.168.4.51:6351 (eed105a6...) -> 0 keys | 5461 slots | 1 slaves.
192.168.4.53:6353 (78f03cb6...) -> 0 keys | 5461 slots | 1 slaves.
192.168.4.52:6352 (700b8ee9...) -> 0 keys | 5462 slots | 1 slaves.
[OK] 0 keys in 3 masters.
0.00 keys per slot on average.

[root@node57 ~]# redis-trib.rb check 192.168.4.51:6351
>>> Performing Cluster Check (using node 192.168.4.51:6351)
M: eed105a64fabd4b4f07feb1712f810b706d749ac 192.168.4.51:6351
   slots:0-5460 (5461 slots) master
   1 additional replica(s)
S: ba409c88b40ded1cc336d27ef9769764aeac572e 192.168.4.55:6355
   slots: (0 slots) slave
   replicates eed105a64fabd4b4f07feb1712f810b706d749ac
S: ff03b0d5d8656f10f7b03bffeeeedfd1f22849ea 192.168.4.56:6356
   slots: (0 slots) slave
   replicates 700b8ee9b5f0a51f4aac3079ab2fefd3cf95de77
M: 78f03cb6da32173a60e6028fac1d19fb7ba95ecf 192.168.4.53:6353
   slots:10923-16383 (5461 slots) master
   1 additional replica(s)
M: 700b8ee9b5f0a51f4aac3079ab2fefd3cf95de77 192.168.4.52:6352
   slots:5461-10922 (5462 slots) master
   1 additional replica(s)
S: 97d08463fe41bf74155ab634885ba24ac8256562 192.168.4.54:6354
   slots: (0 slots) slave
   replicates 78f03cb6da32173a60e6028fac1d19fb7ba95ecf
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

访问集群

[root@node50 ~]# redis-cli -c -h 192.168.4.51 -p 6351		//-c 表示访问集群
192.168.4.51:6351> set a 12
-> Redirected to slot [15495] located at 192.168.4.53:6353
OK
192.168.4.53:6353> set b 12
-> Redirected to slot [3300] located at 192.168.4.51:6351
OK
192.168.4.51:6351> set c 12
-> Redirected to slot [7365] located at 192.168.4.52:6352
OK
192.168.4.52:6352> set d 12
-> Redirected to slot [11298] located at 192.168.4.53:6353
OK
192.168.4.53:6353> set e 12
OK

工作原理
CRC16算法, 变量名与算法运算,结果与16384取余数,根据余数去在不通服务器上保存和读取数据

高可用测试

192.168.4.51:6351> shutdown
[root@node57 ~]# redis-trib.rb info 192.168.4.52:6352
192.168.4.52:6352 (700b8ee9...) -> 1 keys | 5462 slots | 1 slaves.
192.168.4.55:6355 (ba409c88...) -> 1 keys | 5461 slots | 0 slaves.	//55替换为主
192.168.4.53:6353 (78f03cb6...) -> 3 keys | 5461 slots | 1 slaves.
[OK] 5 keys in 3 masters.
0.00 keys per slot on average.

[root@node57 ~]# redis-trib.rb check 192.168.4.52:6352
>>> Performing Cluster Check (using node 192.168.4.52:6352)
M: 700b8ee9b5f0a51f4aac3079ab2fefd3cf95de77 192.168.4.52:6352
   slots:5461-10922 (5462 slots) master
   1 additional replica(s)
M: ba409c88b40ded1cc336d27ef9769764aeac572e 192.168.4.55:6355
   slots:0-5460 (5461 slots) master
   0 additional replica(s)
M: 78f03cb6da32173a60e6028fac1d19fb7ba95ecf 192.168.4.53:6353
   slots:10923-16383 (5461 slots) master
   1 additional replica(s)
S: ff03b0d5d8656f10f7b03bffeeeedfd1f22849ea 192.168.4.56:6356
   slots: (0 slots) slave
   replicates 700b8ee9b5f0a51f4aac3079ab2fefd3cf95de77
S: 97d08463fe41bf74155ab634885ba24ac8256562 192.168.4.54:6354
   slots: (0 slots) slave
   replicates 78f03cb6da32173a60e6028fac1d19fb7ba95ecf
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

管理集群
向集群中添加服务器
添加master角色服务器
添加slave角色服务器
删除集群中的服务器
删除master
删除slave
把删除的服务器添加到集群里

添加master服务器

[root@node57 ~]# redis-trib.rb add-node 192.168.4.58:6358 192.168.4.51:6351		//添加服务器,默认角色为master
[root@node57 ~]# redis-trib.rb info 192.168.4.51:6351
192.168.4.58:6358 (18b1595e...) -> 0 keys | 0 slots | 0 slaves.		//无hash槽
192.168.4.53:6353 (78f03cb6...) -> 3 keys | 5461 slots | 1 slaves.
192.168.4.55:6355 (ba409c88...) -> 2 keys | 5461 slots | 1 slaves.
192.168.4.52:6352 (700b8ee9...) -> 1 keys | 5462 slots | 1 slaves.
[OK] 6 keys in 4 masters.
0.00 keys per slot on average.

[root@node57 ~]# redis-trib.rb reshard 192.168.4.58:6358		//重新分配hash槽
>>> Performing Cluster Check (using node 192.168.4.58:6358)
M: 18b1595e58bbf18fa2589702404675c0921b6fe6 192.168.4.58:6358
   slots: (0 slots) master
   0 additional replica(s)
M: 78f03cb6da32173a60e6028fac1d19fb7ba95ecf 192.168.4.53:6353
   slots:10923-16383 (5461 slots) master
   1 additional replica(s)
S: ff03b0d5d8656f10f7b03bffeeeedfd1f22849ea 192.168.4.56:6356
   slots: (0 slots) slave
   replicates 700b8ee9b5f0a51f4aac3079ab2fefd3cf95de77
S: eed105a64fabd4b4f07feb1712f810b706d749ac 192.168.4.51:6351
   slots: (0 slots) slave
   replicates ba409c88b40ded1cc336d27ef9769764aeac572e
M: 700b8ee9b5f0a51f4aac3079ab2fefd3cf95de77 192.168.4.52:6352
   slots:5461-10922 (5462 slots) master
   1 additional replica(s)
M: ba409c88b40ded1cc336d27ef9769764aeac572e 192.168.4.55:6355
   slots:0-5460 (5461 slots) master
   1 additional replica(s)
S: 97d08463fe41bf74155ab634885ba24ac8256562 192.168.4.54:6354
   slots: (0 slots) slave
   replicates 78f03cb6da32173a60e6028fac1d19fb7ba95ecf
[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)? 4096		//分配出多少槽
What is the receiving node ID? 18b1595e58bbf18fa2589702404675c0921b6fe6 	//分给哪一台主机
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.
Source node #1:all		//从哪台机器分出来

Ready to move 4096 slots.
  Source nodes:
    M: 78f03cb6da32173a60e6028fac1d19fb7ba95ecf 192.168.4.53:6353
   slots:10923-16383 (5461 slots) master
   1 additional replica(s)
    M: 700b8ee9b5f0a51f4aac3079ab2fefd3cf95de77 192.168.4.52:6352
   slots:5461-10922 (5462 slots) master
   1 additional replica(s)
    M: ba409c88b40ded1cc336d27ef9769764aeac572e 192.168.4.55:6355
   slots:0-5460 (5461 slots) master
   1 additional replica(s)
  Destination node:
    M: 18b1595e58bbf18fa2589702404675c0921b6fe6 192.168.4.58:6358
   slots: (0 slots) master
   0 additional replica(s)
  Resharding plan:
    Moving slot 5461 from 700b8ee9b5f0a51f4aac3079ab2fefd3cf95de77
    Moving slot 5462 from 700b8ee9b5f0a51f4aac3079ab2fefd3cf95de77
    Moving slot 5463 from 700b8ee9b5f0a51f4aac3079ab2fefd3cf95de77
    Moving slot 5464 from 700b8ee9b5f0a51f4aac3079ab2fefd3cf95de77
    Moving slot 5465 from 700b8ee9b5f0a51f4aac3079ab2fefd3cf95de77
....

[root@node57 ~]# redis-trib.rb info 192.168.4.51:6351
192.168.4.58:6358 (18b1595e...) -> 1 keys | 4096 slots | 0 slaves.
192.168.4.53:6353 (78f03cb6...) -> 2 keys | 4096 slots | 1 slaves.
192.168.4.55:6355 (ba409c88...) -> 2 keys | 4096 slots | 1 slaves.
192.168.4.52:6352 (700b8ee9...) -> 1 keys | 4096 slots | 1 slaves.
[OK] 6 keys in 4 masters.
0.00 keys per slot on average.

添加slave服务器

[root@node57 ~]# redis-trib.rb add-node --slave  --master-id 18b1595e58bbf18fa2589702404675c0921b6fe6 192.168.4.59:6359 192.168.4.51:6351		//--master-id为可选部分,不添加master-id默认为拥有slave数量最少的master添加,如果slave数量相等,则随机选取master

删除slave服务器

[root@node57 ~]# redis-trib.rb del-node 192.168.4.51:6351 814a38d75f0607692dfeb079a47b8c730be67df2
>>> Removing node 814a38d75f0607692dfeb079a47b8c730be67df2 from cluster 192.168.4.51:6351
>>> Sending CLUSTER FORGET messages to the cluster...
>>> SHUTDOWN the node.		//自动停止redis服务

[root@node57 ~]# redis-trib.rb info 192.168.4.51:6351
192.168.4.58:6358 (18b1595e...) -> 2 keys | 4096 slots | 0 slaves.	//58的slave为0
192.168.4.53:6353 (78f03cb6...) -> 3 keys | 4096 slots | 1 slaves.
192.168.4.55:6355 (ba409c88...) -> 2 keys | 4096 slots | 1 slaves.
192.168.4.52:6352 (700b8ee9...) -> 2 keys | 4096 slots | 1 slaves.
[OK] 9 keys in 4 masters.
0.00 keys per slot on average.

删除master服务器

[root@node57 ~]# redis-trib.rb reshard 192.168.4.51:6351		//先移除hash槽
>>> Performing Cluster Check (using node 192.168.4.51:6351)
S: eed105a64fabd4b4f07feb1712f810b706d749ac 192.168.4.51:6351
   slots: (0 slots) slave
   replicates ba409c88b40ded1cc336d27ef9769764aeac572e
M: 18b1595e58bbf18fa2589702404675c0921b6fe6 192.168.4.58:6358
   slots:0-1364,5461-6826,10923-12287 (4096 slots) master
   0 additional replica(s)
S: 97d08463fe41bf74155ab634885ba24ac8256562 192.168.4.54:6354
   slots: (0 slots) slave
   replicates 78f03cb6da32173a60e6028fac1d19fb7ba95ecf
S: ff03b0d5d8656f10f7b03bffeeeedfd1f22849ea 192.168.4.56:6356
   slots: (0 slots) slave
   replicates 700b8ee9b5f0a51f4aac3079ab2fefd3cf95de77
M: 78f03cb6da32173a60e6028fac1d19fb7ba95ecf 192.168.4.53:6353
   slots:12288-16383 (4096 slots) master
   1 additional replica(s)
M: ba409c88b40ded1cc336d27ef9769764aeac572e 192.168.4.55:6355
   slots:1365-5460 (4096 slots) master
   1 additional replica(s)
M: 700b8ee9b5f0a51f4aac3079ab2fefd3cf95de77 192.168.4.52:6352
   slots:6827-10922 (4096 slots) master
   1 additional replica(s)
[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)? 4096
What is the receiving node ID? 700b8ee9b5f0a51f4aac3079ab2fefd3cf95de77
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.
Source node #1:18b1595e58bbf18fa2589702404675c0921b6fe6
Source node #2:done
[root@node57 ~]# redis-trib.rb del-node 192.168.4.51:6351 18b1595e58bbf18fa2589702404675c0921b6fe6		//删除master58服务器
>>> Removing node 18b1595e58bbf18fa2589702404675c0921b6fe6 from cluster 192.168.4.51:6351
>>> Sending CLUSTER FORGET messages to the cluster...
>>> SHUTDOWN the node.
[root@node57 ~]# redis-trib.rb info 192.168.4.51:6351192.168.4.53:6353 (78f03cb6...) -> 3 keys | 4096 slots | 1 slaves.
192.168.4.55:6355 (ba409c88...) -> 2 keys | 4096 slots | 1 slaves.
192.168.4.52:6352 (700b8ee9...) -> 4 keys | 8192 slots | 1 slaves.
[OK] 9 keys in 3 masters.
0.00 keys per slot on average.

在管理主机平均分配hash槽

[root@node57 ~]# redis-trib.rb rebalance 192.168.4.51:6351
>>> Performing Cluster Check (using node 192.168.4.51:6351)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
>>> Rebalancing across 3 nodes. Total weight = 3
Moving 1366 slots from 192.168.4.52:6352 to 192.168.4.53:6353
#######################################################################################
[root@node57 ~]# redis-trib.rb info 192.168.4.51:6351
192.168.4.53:6353 (78f03cb6...) -> 3 keys | 5462 slots | 1 slaves.
192.168.4.55:6355 (ba409c88...) -> 2 keys | 5461 slots | 1 slaves.
192.168.4.52:6352 (700b8ee9...) -> 4 keys | 5461 slots | 1 slaves.
[OK] 9 keys in 3 masters.
0.00 keys per slot on average.		//hash槽平均分配了

把删除的服务器添加到集群
需要在删除的服务器上清除数据,并删掉集群配置文件/var/lib/redis/6379/node-6379.conf,重启服务,
192.168.4.59:6359>CLUSTER RESET
再按上面操作执行添加即可

把集群中的主机恢复为独立的数据库服务器
1.停止redis服务
2.清空数据库 rm -rf /var/lib/redis/6379/*
3.禁用集群功能
4.启动服务

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值