Redis5集群搭建

 1、 环境信息

     centos7,redis5;

服务器(节点) A B
192.168.160.130 6379 6380
192.168.160.133 6379 6380
192.168.160.134 6379 6380

三台虚拟机192.168.160.130,192.168.160.133,192.168.160.134;

6个节点分别安装在三台虚拟机上,每台虚拟机上运行两个redis实例。

1.安装redis

#下载redis
[root@localhost opt]# wget http://download.redis.io/releases/redis-5.0.3.tar.gz

#解压
[root@localhost opt]# tar -zxvf redis-5.0.3.tar.gz

#移动文件夹
[root@localhost opt]# mv redis-5.0.3 /usr/local
[root@localhost opt]# cd /usr/local
[root@localhost local]# cd redis-5.0.3/
#编译
[root@localhost redis-5.0.3]# make
#安装到 /usr/local/redis 目录中 安装的文件只有一个bin目录
[root@localhost redis-5.0.3]# make install PREFIX=/usr/local/redis/
#安装到 /usr/local/redis 目录中 安装的文件只有一个bin目录
[root@localhost redis-5.0.3]# mkdir /usr/local/redis/conf /usr/local/redis/data
#拷贝redis.conf 
[root@localhost redis-5.0.3]# cp redis.conf /usr/local/redis/conf/
[root@localhost conf]# cp redis.conf redis-6380.conf
[root@localhost conf]# ll
total 128
-rw-r--r--. 1 root root 62168 Mar 22 03:43 redis-6380.conf
-rw-r--r--. 1 root root 62168 Mar 22 03:26 redis.conf
#重命名配置文件
[root@localhost conf]# mv redis.conf redis-6379.conf
#两个配置文件,这里就以端口号命名,以redis-端口号.conf
[root@localhost conf]# ll
total 128
-rw-r--r--. 1 root root 62168 Mar 22 03:26 redis-6379.conf
-rw-r--r--. 1 root root 62168 Mar 22 03:43 redis-6380.conf

ps:每台服务器上面都要下载安装

2.编辑redis.conf配置文件

   (1) redis-6379.conf:


# 配置文件进行了精简,完整配置可自行和官方提供的完整conf文件进行对照。端口号自行对应修改
#后台启动的意思
daemonize yes 

#端口号
port 6379

# IP绑定,redis不建议对公网开放,直接绑定0.0.0.0没毛病
bind 0.0.0.0

# redis数据文件存放的目录
dir /usr/local/redis/data

# 开启AOF
appendonly yes

 # 开启集群
cluster-enabled yes

# 会自动生成在上面配置的dir目录下
cluster-config-file nodes-6379.conf 
cluster-node-timeout 5000

# 这个文件会自动生成
pidfile /var/run/redis_6379.pid 

(2)redis-6380.conf:


# 配置文件进行了精简,完整配置可自行和官方提供的完整conf文件进行对照。端口号自行对应修改
#后台启动的意思
daemonize yes 

#端口号
port 6380

# IP绑定,redis不建议对公网开放,直接绑定0.0.0.0没毛病
bind 0.0.0.0

# redis数据文件存放的目录
dir /usr/local/redis/data

# 开启AOF
appendonly yes

 # 开启集群
cluster-enabled yes

# 会自动生成在上面配置的dir目录下
cluster-config-file nodes-6380.conf 
cluster-node-timeout 5000

# 这个文件会自动生成
pidfile /var/run/redis_6380.pid 

ps:每台服务器上面都要编辑 

3.启动redis

[root@localhost conf]# /usr/local/redis/bin/redis-server /usr/local/redis/conf/redis-6379.conf
109674:C 22 Mar 2020 03:57:52.441 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
109674:C 22 Mar 2020 03:57:52.441 # Redis version=5.0.3, bits=64, commit=00000000, modified=0, pid=109674, just started
109674:C 22 Mar 2020 03:57:52.441 # Configuration loaded
[root@localhost conf]# /usr/local/redis/bin/redis-server /usr/local/redis/conf/redis-6380.conf
109679:C 22 Mar 2020 03:57:59.788 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
109679:C 22 Mar 2020 03:57:59.788 # Redis version=5.0.3, bits=64, commit=00000000, modified=0, pid=109679, just started
109679:C 22 Mar 2020 03:57:59.788 # Configuration loaded
[root@localhost conf]# clear
[root@localhost conf]# ps -ef | grep redis
root     109675      1  0 03:57 ?        00:00:00 /usr/local/redis/bin/redis-server 0.0.0.0:6379 [cluster]
root     109680      1  0 03:57 ?        00:00:00 /usr/local/redis/bin/redis-server 0.0.0.0:6380 [cluster]
root     109711 102398  0 04:00 pts/1    00:00:00 grep --color=auto redis

ps:每台服务器上面都要启动两台,分别是端口6379和6380的 

4.创建cluster

[root@localhost data]# /usr/local/redis/bin/redis-cli --cluster create 192.168.160.130:6379 192.168.160.130:6380 192.168.160.133:6379 192.168.160.133:6380 192.168.160.134:6379 192.168.160.134: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.160.133:6380 to 192.168.160.130:6379
Adding replica 192.168.160.130:6380 to 192.168.160.133:6379
Adding replica 192.168.160.134:6380 to 192.168.160.134:6379
>>> Trying to optimize slaves allocation for anti-affinity
[OK] Perfect anti-affinity obtained!
M: bafbc7bfdf6801d023b1cc17bc123f9bbe0cd838 192.168.160.130:6379
   slots:[0-5460] (5461 slots) master
S: 524b67e0d8fad55d1bdcb6c8d9ee4fbb7fe3371f 192.168.160.130:6380
   replicates 04fb407c6a2fbc4d51abf9b703e6aab68d3b175c
M: f53867ea807fe761dcb1ece63241a687c7055775 192.168.160.133:6379
   slots:[5461-10922] (5462 slots) master
S: 045bbc87d512d2c94ad239a83ab5501be34a364c 192.168.160.133:6380
   replicates bafbc7bfdf6801d023b1cc17bc123f9bbe0cd838
M: 04fb407c6a2fbc4d51abf9b703e6aab68d3b175c 192.168.160.134:6379
   slots:[10923-16383] (5461 slots) master
S: f067ac179225c85e5d124bfd2707a4513bffbfa1 192.168.160.134:6380
   replicates f53867ea807fe761dcb1ece63241a687c7055775
# 自动设置主从,而且会提示你,是否运行使用自动的配置
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.160.130:6379)
M: bafbc7bfdf6801d023b1cc17bc123f9bbe0cd838 192.168.160.130:6379
   slots:[0-5460] (5461 slots) master
   1 additional replica(s)
M: 04fb407c6a2fbc4d51abf9b703e6aab68d3b175c 192.168.160.134:6379
   slots:[10923-16383] (5461 slots) master
   1 additional replica(s)
S: 524b67e0d8fad55d1bdcb6c8d9ee4fbb7fe3371f 192.168.160.130:6380
   slots: (0 slots) slave
   replicates 04fb407c6a2fbc4d51abf9b703e6aab68d3b175c
S: 045bbc87d512d2c94ad239a83ab5501be34a364c 192.168.160.133:6380
   slots: (0 slots) slave
   replicates bafbc7bfdf6801d023b1cc17bc123f9bbe0cd838
M: f53867ea807fe761dcb1ece63241a687c7055775 192.168.160.133:6379
   slots:[5461-10922] (5462 slots) master
   1 additional replica(s)
S: f067ac179225c85e5d124bfd2707a4513bffbfa1 192.168.160.134:6380
   slots: (0 slots) slave
   replicates f53867ea807fe761dcb1ece63241a687c7055775
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

5.集群检验和测试

[root@localhost data]# /usr/local/redis/bin/redis-cli -c -h 192.168.160.130 -p 6379 cluster nodes
04fb407c6a2fbc4d51abf9b703e6aab68d3b175c 192.168.160.134:6379@16379 master - 0 1584878027175 5 connected 10923-16383
524b67e0d8fad55d1bdcb6c8d9ee4fbb7fe3371f 192.168.160.130:6380@16380 slave 04fb407c6a2fbc4d51abf9b703e6aab68d3b175c 0 1584878024149 5 connected
045bbc87d512d2c94ad239a83ab5501be34a364c 192.168.160.133:6380@16380 slave bafbc7bfdf6801d023b1cc17bc123f9bbe0cd838 0 1584878028186 4 connected
f53867ea807fe761dcb1ece63241a687c7055775 192.168.160.133:6379@16379 master - 0 1584878026166 3 connected 5461-10922
f067ac179225c85e5d124bfd2707a4513bffbfa1 192.168.160.134:6380@16380 slave f53867ea807fe761dcb1ece63241a687c7055775 0 1584878026000 6 connected
bafbc7bfdf6801d023b1cc17bc123f9bbe0cd838 192.168.160.130:6379@16379 myself,master - 0 1584878027000 1 connected 0-5460
# 节点id ip+端口 角色 masterid 处理的ping数量 最后一个pong时间 节点配置版本 节点连接状态 slot槽分配情况
# 测试Redis Cluster的一种简单方法是使用redis-cli命令行实用程序
# -c 是支持cluster重定向
[root@localhost data]# /usr/local/redis/bin/redis-cli -c -h 192.168.160.130 -p 6379
192.168.160.130:6379> set hello lucifer
OK
192.168.160.130:6379> get hello
"lucifer"
192.168.160.130:6379> set hello redis
OK
192.168.160.130:6379> get hello
"redis"
192.168.160.130:6379> CLUSTER KEYSLOT hello
(integer) 866
192.168.160.130:6379> set a 1
-> Redirected to slot [15495] located at 192.168.160.134:6379
OK
192.168.160.134:6379> set b 2
-> Redirected to slot [3300] located at 192.168.160.130:6379
OK
192.168.160.130:6379> key *

6.集群slot数量整理 reshard

#  /usr/local/redis/bin/redis-cli --cluster help 可以查看所有这个命令和子命令的帮助信息
# 默认是master平均分了0-16383的所有虚拟slot
# 可以进行调整,部分节点放多一点slot(槽或者位置)。
/usr/local/redis/bin/redis-cli --cluster reshard  <host>:<port> --cluster-from <node-id> --cluster-to <node-id> --cluster-slots <number of slots> --cluster-yes

## 重新检查集群
[root@localhost data]#  /usr/local/redis/bin/redis-cli --cluster check 192.168.160.130:6379
192.168.160.130:6379 (bafbc7bf...) -> 2 keys | 5461 slots | 1 slaves.
192.168.160.134:6379 (04fb407c...) -> 1 keys | 5461 slots | 1 slaves.
192.168.160.133:6379 (f53867ea...) -> 0 keys | 5462 slots | 1 slaves.
[OK] 3 keys in 3 masters.
0.00 keys per slot on average.
>>> Performing Cluster Check (using node 192.168.160.130:6379)
M: bafbc7bfdf6801d023b1cc17bc123f9bbe0cd838 192.168.160.130:6379
   slots:[0-5460] (5461 slots) master
   1 additional replica(s)
M: 04fb407c6a2fbc4d51abf9b703e6aab68d3b175c 192.168.160.134:6379
   slots:[10923-16383] (5461 slots) master
   1 additional replica(s)
S: 524b67e0d8fad55d1bdcb6c8d9ee4fbb7fe3371f 192.168.160.130:6380
   slots: (0 slots) slave
   replicates 04fb407c6a2fbc4d51abf9b703e6aab68d3b175c
S: 045bbc87d512d2c94ad239a83ab5501be34a364c 192.168.160.133:6380
   slots: (0 slots) slave
   replicates bafbc7bfdf6801d023b1cc17bc123f9bbe0cd838
M: f53867ea807fe761dcb1ece63241a687c7055775 192.168.160.133:6379
   slots:[5461-10922] (5462 slots) master
   1 additional replica(s)
S: f067ac179225c85e5d124bfd2707a4513bffbfa1 192.168.160.134:6380
   slots: (0 slots) slave
   replicates f53867ea807fe761dcb1ece63241a687c7055775
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

7.测试自动故障转移

# cluster集群不保证数据一致,数据也可能丢失
# 首先是运行客户端不断的写入或读取数据,以便能够发现问题
# 然后是模拟节点故障:找一个主节点关闭,主从故障切换的过程中,这个时间端的操作,客户端而言,只能是失败
# 官方描述 https://redis.io/topics/cluster-spec  
There is always a window of time when it is possible to lose writes during partitions.
分区的时间窗口内总是有可能丢失写操作。
发布了186 篇原创文章 · 获赞 146 · 访问量 49万+

猜你喜欢

转载自blog.csdn.net/qq_37495786/article/details/105033184