redis:集群


1. 集群

1. [root@server4 redis]# /etc/init.d/redis_6379 stop
Stopping ...
Redis stopped

2. [root@server4 redis]# mkdir /usr/local/rediscluster
[root@server4 redis]# cd /usr/local/rediscluster
[root@server4 rediscluster]# mkdir 700{1..6}
[root@server4 rediscluster]# ls
7001  7002  7003  7004  7005  7006
[root@server4 rediscluster]# cd 7001/
7001:
3. [root@server4 7001]# vim redis.conf
port 7001
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes

pidfile "/usr/local/rediscluster/7001/redis.pid"
logfile "/usr/local/rediscluster/7001/redis.log"
daemonize yes
dir "/usr/local/rediscluster/7001"

4. [root@server4 7001]# redis-server redis.conf 
[root@server4 7001]# ps aux
root      6686  0.0  0.7 153824  7696 ?        Ssl  14:11   0:00 redis-server *:7001 [cluster]

7002:
1. [root@server4 7001]# cp redis.conf /usr/local/rediscluster/7002
2. [root@server4 rediscluster]# cd 7002
3. [root@server4 7002]# vim redis.conf 
:%s/7001/7002/g
4. [root@server4 7002]# redis-server redis.conf 
5. [root@server4 7002]# ps aux
root      6704  0.0  0.7 153824  7704 ?        Ssl  14:18   0:00 redis-server *:7002 [cluster]

7003:
1. [root@server4 rediscluster]# cd 7003
[root@server4 7003]# vim redis.conf 
:%s/7001/7003/g
2. [root@server4 7003]# redis-server redis.conf
3. [root@server4 7003]# ps aux
root      6714  0.0  0.7 153824  7696 ?        Ssl  14:22   0:00 redis-server *:7003 [cluster]


7004:
1. [root@server4 rediscluster]# cd 7004
[root@server4 7004]# vim redis.conf 
:%s/7001/7004/g
2. [root@server4 7004]# redis-server redis.conf
3. [root@server4 7004]# ps aux
root      6722  0.0  0.7 153824  7696 ?        Ssl  14:24   0:00 redis-server *:7004 [cluster]


7005:
1. [root@server4 rediscluster]# cd 7005
[root@server4 7005]# vim redis.conf 
:%s/7001/7005/g
2. [root@server4 7005]# redis-server redis.conf
3. [root@server4 7005]# ps aux
root      6731  0.0  0.7 153824  7696 ?        Ssl  14:27   0:00 redis-server *:7005 [cluster]


7006:
1. [root@server4 rediscluster]# cd 7006
[root@server4 7006]# vim redis.conf 
:%s/7001/7006/g
2. [root@server4 7006]# redis-server redis.conf
3. [root@server4 7006]# ps aux
root      6738  0.0  0.7 153824  7696 ?        Ssl  14:28   0:00 redis-server *:7006 [cluster]

测试集群是否可用:

[root@server4 7006]# redis-cli -p 7001  # 可用的话cluster为enabled状态
127.0.0.1:7001> info
# Cluster
cluster_enabled:1

配置集群:

1. [root@server4 ~]# cd redis-5.0.3
[root@server4 redis-5.0.3]# cd src/
[root@server4 src]# cp redis-trib.rb /usr/local/bin

2. [root@server4 src]# yum install -y ruby

3. [root@server4 src]# redis-cli --cluster create --cluster-replicas 1 127.0.0.0:7001 127.0.0.0:7002 127.0.0.0:7003 127.0.0.0:7004 127.0.0.0:7005 127.0.0.0:7006
Could not connect to Redis at 127.0.0.0:7001: Network is unreachable
[root@server4 src]# redis-cli --cluster create --cluster-replicas 1 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006
>>> 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:7004 to 127.0.0.1:7001
Adding replica 127.0.0.1:7005 to 127.0.0.1:7002
Adding replica 127.0.0.1:7006 to 127.0.0.1:7003
>>> Trying to optimize slaves allocation for anti-affinity
[WARNING] Some slaves are in the same host as their master
M: 2290801f52bec7ac4e7f154182e0981b3b7ec7f6 127.0.0.1:7001
   slots:[0-5460] (5461 slots) master
M: ece647bd9c4e2081ec54abd5de9d03c9c570c79c 127.0.0.1:7002
   slots:[5461-10922] (5462 slots) master
M: 0bf2176eac1dcc865d99517d2c9da82af8815a51 127.0.0.1:7003
   slots:[10923-16383] (5461 slots) master
S: 79ab354e62d1be9f21abaf860ef53bf599b37e36 127.0.0.1:7004
   replicates 0bf2176eac1dcc865d99517d2c9da82af8815a51
S: 1de90d74d18331d7e8f7ce31d5dbce9435dbc451 127.0.0.1:7005
   replicates 2290801f52bec7ac4e7f154182e0981b3b7ec7f6
S: 26d205a5fb04bd53975771259c0a3668186c9643 127.0.0.1:7006
   replicates ece647bd9c4e2081ec54abd5de9d03c9c570c79c
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:7001)
M: 2290801f52bec7ac4e7f154182e0981b3b7ec7f6 127.0.0.1:7001
   slots:[0-5460] (5461 slots) master
   1 additional replica(s)
S: 1de90d74d18331d7e8f7ce31d5dbce9435dbc451 127.0.0.1:7005
   slots: (0 slots) slave
   replicates 2290801f52bec7ac4e7f154182e0981b3b7ec7f6
S: 26d205a5fb04bd53975771259c0a3668186c9643 127.0.0.1:7006
   slots: (0 slots) slave
   replicates ece647bd9c4e2081ec54abd5de9d03c9c570c79c
M: 0bf2176eac1dcc865d99517d2c9da82af8815a51 127.0.0.1:7003
   slots:[10923-16383] (5461 slots) master
   1 additional replica(s)
S: 79ab354e62d1be9f21abaf860ef53bf599b37e36 127.0.0.1:7004
   slots: (0 slots) slave
   replicates 0bf2176eac1dcc865d99517d2c9da82af8815a51
M: ece647bd9c4e2081ec54abd5de9d03c9c570c79c 127.0.0.1:7002
   slots:[5461-10922] (5462 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.

引入槽的概念:
在这里插入图片描述
在这里插入图片描述
测试:

[root@server4 src]# redis-cli info 127.0.0.1:7001
Could not connect to Redis at 127.0.0.1:6379: Connection refused
[root@server4 src]# redis-cli --cluster info 127.0.0.1:7001
127.0.0.1:7001 (2290801f...) -> 0 keys | 5461 slots | 1 slaves.
127.0.0.1:7003 (0bf2176e...) -> 0 keys | 5461 slots | 1 slaves.
127.0.0.1:7002 (ece647bd...) -> 0 keys | 5462 slots | 1 slaves.
[OK] 0 keys in 3 masters.
0.00 keys per slot on average.

[root@server4 src]# redis-cli -c -p 7001
127.0.0.1:7001> set name jy
-> Redirected to slot [5798] located at 127.0.0.1:7002
OK
127.0.0.1:7002> get name
"jy"
127.0.0.1:7002> exit

[root@server4 src]# redis-cli -c -p 7001
127.0.0.1:7001> get name
-> Redirected to slot [5798] located at 127.0.0.1:7002
"jy"
127.0.0.1:7002> SHUTDOWN  # 关掉7002
not connected> exit

[root@server4 src]# redis-cli --cluster info 127.0.0.1:7001
Could not connect to Redis at 127.0.0.1:7002: Connection refused
127.0.0.1:7001 (2290801f...) -> 0 keys | 5461 slots | 1 slaves.
127.0.0.1:7006 (26d205a5...) -> 1 keys | 5462 slots | 0 slaves.   # 7002的备机7006接替了7002
127.0.0.1:7003 (0bf2176e...) -> 0 keys | 5461 slots | 1 slaves.
[OK] 1 keys in 3 masters.
0.00 keys per slot on average.

[root@server4 src]# redis-cli -c -p 7001
127.0.0.1:7001> get name
-> Redirected to slot [5798] located at 127.0.0.1:7006  # 在7006上可以继续查到数据
"jy"
127.0.0.1:7006> shutdown   # 关闭7006
(0.87s)
not connected> exit
[root@server4 src]# redis-cli --cluster info 127.0.0.1:7001
Could not connect to Redis at 127.0.0.1:7006: Connection refused
Could not connect to Redis at 127.0.0.1:7002: Connection refused
127.0.0.1:7001 (2290801f...) -> 0 keys | 5461 slots | 1 slaves.
127.0.0.1:7003 (0bf2176e...) -> 0 keys | 5461 slots | 1 slaves.
[OK] 0 keys in 2 masters.
0.00 keys per slot on average.

恢复集群:

7002:
1. [root@server4 src]# cd /usr/local/rediscluster/
[root@server4 rediscluster]# cd 7002

2. [root@server4 7002]# cat appendonly.aof    # 文件中包含之前在7002上的操作
*2
$6
SELECT
$1
0
*3
$3
set
$4
name
$2
jy

3. [root@server4 7002]# redis-server redis.conf

7006:
1. [root@server4 7002]# cd ../7006
[root@server4 7006]# cat appendonly.aof 
REDIS0009�	redis-ver5.0.3�
redis-bits�@�ctime��i^used-mem�xq'�
                                    aof-preamble��|�ѯG��*2
$6
SELECT
$1
0
*3
$3
set
$4
name
$2
jy

2. [root@server4 7006]# redis-server redis.conf 

恢复7002和7006,并且7006成为主

[root@server4 7006]# redis-cli --cluster info 127.0.0.1:7001
127.0.0.1:7001 (2290801f...) -> 0 keys | 5461 slots | 1 slaves.
127.0.0.1:7006 (26d205a5...) -> 1 keys | 5462 slots | 1 slaves.
127.0.0.1:7003 (0bf2176e...) -> 0 keys | 5461 slots | 1 slaves.
[OK] 1 keys in 3 masters.
0.00 keys per slot on average.

2. 添加新的节点

1. [root@server4 ~]# cd /usr/local/rediscluster/
[root@server4 rediscluster]# ls
7001  7002  7003  7004  7005  7006
[root@server4 rediscluster]# mkdir 7007
[root@server4 rediscluster]# mkdir 7008
[root@server4 rediscluster]# cp 7001/redis.conf 7007
[root@server4 rediscluster]# cp 7001/redis.conf 7008

7007:
[root@server4 7007]# vim redis.conf 
[root@server4 7007]# redis-server redis.conf 
:%s/7001/7007/g


7008:
[root@server4 7008]# vim redis.conf 
[root@server4 7008]# redis-server redis.conf 
:%s/7001/7008/g

给集群添加节点:

1. [root@server4 7008]# redis-cli --cluster add-node 127.0.0.1:7007 127.0.0.1:7001

2. [root@server4 7008]# redis-cli -c -p 7007
127.0.0.1:7007> cluster nodes
ece647bd9c4e2081ec54abd5de9d03c9c570c79c 127.0.0.1:7002@17002 slave 26d205a5fb04bd53975771259c0a3668186c9643 0 1583997042000 7 connected
0bf2176eac1dcc865d99517d2c9da82af8815a51 127.0.0.1:7003@17003 master - 0 1583997043000 3 connected 10923-16383
2290801f52bec7ac4e7f154182e0981b3b7ec7f6 127.0.0.1:7001@17001 master - 0 1583997043871 1 connected 0-5460
1de90d74d18331d7e8f7ce31d5dbce9435dbc451 127.0.0.1:7005@17005 slave 2290801f52bec7ac4e7f154182e0981b3b7ec7f6 0 1583997043000 1 connected
79ab354e62d1be9f21abaf860ef53bf599b37e36 127.0.0.1:7004@17004 slave 0bf2176eac1dcc865d99517d2c9da82af8815a51 0 1583997044071 3 connected
26d205a5fb04bd53975771259c0a3668186c9643 127.0.0.1:7006@17006 master - 0 1583997042000 7 connected 5461-10922
027e431dba09e20712afc3e7a29397f15b476a08 127.0.0.1:7007@17007 myself,master - 0 1583997042000 0 connected

3. [root@server4 7008]# redis-cli --cluster add-node 127.0.0.1:7008 127.0.0.1:7007 --cluster-slave --cluster-master-id 027e431dba09e20712afc3e7a29397f15b476a08

查看集群状态:

[root@server4 7008]# redis-cli --cluster info 127.0.0.1:7001 
127.0.0.1:7001 (2290801f...) -> 0 keys | 5461 slots | 1 slaves.
127.0.0.1:7006 (26d205a5...) -> 1 keys | 5462 slots | 1 slaves.
127.0.0.1:7003 (0bf2176e...) -> 0 keys | 5461 slots | 1 slaves.
127.0.0.1:7007 (027e431d...) -> 0 keys | 0 slots | 1 slaves.
[OK] 1 keys in 4 masters.
0.00 keys per slot on average

但是7007没有数据槽
给7007均分数据槽:

1. [root@server4 7008]# redis-cli --cluster rebalance --cluster-threshold 1 --cluster-use-empty-masters 127.0.0.1:7001

2. [root@server4 7008]# redis-cli --cluster info 
127.0.0.1:7001127.0.0.1:7001 (2290801f...) -> 0 keys | 4096 slots | 1 slaves.
127.0.0.1:7006 (26d205a5...) -> 0 keys | 4096 slots | 1 slaves.
127.0.0.1:7003 (0bf2176e...) -> 0 keys | 4096 slots | 1 slaves.
127.0.0.1:7007 (027e431d...) -> 1 keys | 4096 slots | 1 slaves.
[OK] 1 keys in 4 masters.
0.00 keys per slot on average.

3. [root@server4 7008]# redis-cli -c -p 7008
127.0.0.1:7008> get name
-> Redirected to slot [5798] located at 127.0.0.1:7007
"jy"
127.0.0.1:7007> 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值