1.准备环境: 三台干净的虚拟机 并关闭防火墙和selinux
192.168.46.129 redis-1 7001 7002
192.168.46.132 redis-2 7003 7004
192.168.46.135 redis-3 7005 7006
2.安装redis
使用上面所给的脚本安装或者其他安装方式 脚本安装注意修改成可用的yum源
3.配置不同的节点及监听的端口 目录、端口区分并且对应起来
以192.168.46.129的7001/ 7002/为例,另外两台机子操作相同
[root@redis-1 ~]# sh install_redis.sh
[root@redis-1 ~]# systemctl status redis
[root@redis-1 ~]# ss -lnatup | grep redis
tcp LISTEN 0 128 127.0.0.1:6379 *:* users:(("redis-server",pid=15831,fd=6))
[root@redis-1 ~]# kill -9 15831
[root@redis-1 ~]# mkdir -p /data/application/{7001,7002}
[root@redis-1 ~]# mkdir /data/application/7001/data
[root@redis-1 ~]# mkdir /data/application/7002/data
[root@redis-1 ~]# cd /data/application/
[root@redis-1 application]# vim 7001/redis.conf
在redis.conf中添加如下配置 另外两台机子操作相同,注意修改端口。
ort 7001
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
daemonize yes
bind 0.0.0.0
pidfile /data/application/7001/redis_7001.pid
dir /data/application/7001/data
192.168.46.129的7002/同理
[root@redis-1 application]# vim 7001/redis.conf
将以下配置加入redis.conf文件
ort 7002
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
daemonize yes
bind 0.0.0.0
pidfile /data/application/7002/redis_7002.pid
dir /data/application/7002/data
以上面相同的操作完成 192.168.46.132 7003/ 7004/ 以及 192.168.46.135 7005/ 7006/ 的配置。注意修改创建的目录以及配置文件内的端口、路径、文件的数字。
4.添加完配置后,启动服务,并查看端口是否正常在监听状态
[root@redis-1 application]# ./redis-5.0.10/src/redis-server 7001/redis.conf
15892:C 02 Nov 2023 13:05:03.143 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
15892:C 02 Nov 2023 13:05:03.143 # Redis version=5.0.10, bits=64, commit=00000000, modified=0, pid=15892, just started
15892:C 02 Nov 2023 13:05:03.143 # Configuration loaded
[root@redis-1 application]# ss -lnatup | grep redis
tcp LISTEN 0 128 *:17001 *:* users:(("redis-server",pid=15893,fd=9))
tcp LISTEN 0 128 *:7001 *:* users:(("redis-server",pid=15893,fd=6))
[root@redis-1 application]# ./redis-5.0.10/src/redis-server 7002/redis.conf
15899:C 02 Nov 2023 13:05:17.784 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
15899:C 02 Nov 2023 13:05:17.784 # Redis version=5.0.10, bits=64, commit=00000000, modified=0, pid=15899, just started
15899:C 02 Nov 2023 13:05:17.784 # Configuration loaded
[root@redis-1 application]# ss -lnatup | grep redis
tcp LISTEN 0 128 *:17001 *:* users:(("redis-server",pid=15893,fd=9))
tcp LISTEN 0 128 *:17002 *:* users:(("redis-server",pid=15900,fd=9))
tcp LISTEN 0 128 *:7001 *:* users:(("redis-server",pid=15893,fd=6))
tcp LISTEN 0 128 *:7002 *:* users:(("redis-server",pid=15900,fd=6))
以相同方式启动 192.168.46.132 7003/ 7004/ 以及 192.168.46.135 7005/ 7006/ 并查看端口是否正常在监听状态
5、创建集群
三台机子配置完成且所有服务启动成功后,任选一台机子创建集群
[root@redis-1 application]# cd redis-5.0.10/src/
[root@redis-1 src]# pwd
/data/application/redis-5.0.10/src
[root@redis-1 src]# ./redis-cli --cluster create --cluster-replicas 1 192.168.46.129:7001 192.168.46.129:7002 192.168.46.132:7003 192.168.46.132:7004 192.168.46.135:7005 192.168.46.135:7006
5、登录集群并测试
a.登陆时记得加-c,不然会报以下错误
[root@redis-1 src]# ./redis-cli -h 192.168.46.129 -p 7001
192.168.46.129:7001> set name xiaoming
(error) MOVED 12182 192.168.46.135:7005
b.正确登录方式
[root@redis-1 src]# ./redis-cli -c -h 192.168.46.129 -p 7001
192.168.46.129:7001> set name xiaoming
-> Redirected to slot [12182] located at 192.168.46.135:7005
OK
1、写入数据,看如何分配
[root@redis-1 src]# ./redis-cli -c -h 192.168.46.129 -p 7001
192.168.46.129:7001> set name wanglin
-> Redirected to slot [5798] located at 192.168.46.135:7006
OK
192.168.46.135:7006> set age 1800
-> Redirected to slot [741] located at 192.168.46.132:7004
OK
192.168.46.132:7004> set sex man
OK
结论:随机分配在不同的节点
2、查看是否在任意节点都能查到数据
a.登录不同节点查询1中输入的数据
[root@redis-1 src]# ./redis-cli -c -h 192.168.46.129 -p 7002
192.168.46.129:7002> get name
-> Redirected to slot [5798] located at 192.168.46.135:7006
"wanglin"
[root@redis-1 src]# ./redis-cli -c -h 192.168.46.132 -p 7003
192.168.46.132:7003> get age
-> Redirected to slot [741] located at 192.168.46.132:7004
"1800"
[root@redis-1 src]# ./redis-cli -c -h 192.168.46.135 -p 7006
192.168.46.135:7006> get sex
-> Redirected to slot [2584] located at 192.168.46.132:7004
"man"
结论:无论是哪个节点都可以查询到数据
3、宕机测试,停某一个主,看集群状态变化,在启动停止的主,看集群的状态变化
a.登录任意一个redis查看集群信息
[root@redis-1 src]# ./redis-cli -c -h 192.168.46.129 -p 7001
192.168.46.129:7001> cluster nodes
3f25e206a5df9ed60c1de89b6956e891370ba312 192.168.46.135:7006@17006 master - 0 1698916073722 7 connected 5461-10922
d5a799a486efe90c6aa20e45e3d171d83b45108b 192.168.46.132:7003@17003 slave 3f25e206a5df9ed60c1de89b6956e891370ba312 0 1698916074727 7 connected
8c17c775d53d49843378ca9c5adf61b641046e22 192.168.46.129:7002@17002 slave bbf159991cb2a5ca5debfbaf828dd3d411a86bb3 0 1698916072716 5 connected
bbf159991cb2a5ca5debfbaf828dd3d411a86bb3 192.168.46.135:7005@17005 master - 0 1698916073220 5 connected 10923-16383
63cf5411d594fb606584991f032b1e08d59258c8 192.168.46.129:7001@17001 myself,slave 863b12c51f8366998e4652869d5f21342fa50c88 0 1698916071000 1 connected
863b12c51f8366998e4652869d5f21342fa50c88 192.168.46.132:7004@17004 master - 0 1698916074224 8 connected 0-5460
b.根据查询结果 92.168.46.135:7005(主)和192.168.46.129:7002(从)是一对主从 将虚拟机ip为192.168.46.135的7005 端口停掉
[root@redis-3 ~]# ss -lnatup | grep redis | grep LISTEN
tcp LISTEN 0 128 *:17006 *:* users:(("redis-server",pid=16217,fd=9))
tcp LISTEN 0 128 *:7005 *:* users:(("redis-server",pid=16212,fd=6))
tcp LISTEN 0 128 *:7006 *:* users:(("redis-server",pid=16217,fd=6))
tcp LISTEN 0 128 *:17005 *:* users:(("redis-server",pid=16212,fd=9))
[root@redis-3 ~]# kill -9 16212
c.重新查看集群信息,发现192.168.46.135:7005 已经报错 192.168.46.129:7002 变为master
[root@redis-1 src]# ./redis-cli -c -h 192.168.46.129 -p 7001
192.168.46.129:7001> cluster nodes
3f25e206a5df9ed60c1de89b6956e891370ba312 192.168.46.135:7006@17006 master - 0 1698916402982 7 connected 5461-10922
d5a799a486efe90c6aa20e45e3d171d83b45108b 192.168.46.132:7003@17003 slave 3f25e206a5df9ed60c1de89b6956e891370ba312 0 1698916403488 7 connected
8c17c775d53d49843378ca9c5adf61b641046e22 192.168.46.129:7002@17002 master - 0 1698916402982 9 connected 10923-16383
bbf159991cb2a5ca5debfbaf828dd3d411a86bb3 192.168.46.135:7005@17005 master,fail - 1698916310990 1698916309884 5 disconnected
63cf5411d594fb606584991f032b1e08d59258c8 192.168.46.129:7001@17001 myself,slave 863b12c51f8366998e4652869d5f21342fa50c88 0 1698916403000 1 connected
863b12c51f8366998e4652869d5f21342fa50c88 192.168.46.132:7004@17004 master - 0 1698916404492 8 connected 0-5460
d.重启 192.168.46.135:7005
[root@redis-3 ~]# /data/application/redis-5.0.10/src/redis-server /data/application/7005/redis.conf
16798:C 02 Nov 2023 17:15:08.465 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
16798:C 02 Nov 2023 17:15:08.465 # Redis version=5.0.10, bits=64, commit=00000000, modified=0, pid=16798, just started
16798:C 02 Nov 2023 17:15:08.465 # Configuration loaded
e.再次查看集群信息,发现192.168.46.135:7005与192.168.46.129:7002主从已互换
[root@redis-2 src]# ./redis-cli -c -h 192.168.46.129 -p 7001
192.168.46.129:7001> cluster nodes
3f25e206a5df9ed60c1de89b6956e891370ba312 192.168.46.135:7006@17006 master - 0 1698916555102 7 connected 5461-10922
d5a799a486efe90c6aa20e45e3d171d83b45108b 192.168.46.132:7003@17003 slave 3f25e206a5df9ed60c1de89b6956e891370ba312 0 1698916554398 7 connected
8c17c775d53d49843378ca9c5adf61b641046e22 192.168.46.129:7002@17002 master - 0 1698916554900 9 connected 10923-16383
bbf159991cb2a5ca5debfbaf828dd3d411a86bb3 192.168.46.135:7005@17005 slave 8c17c775d53d49843378ca9c5adf61b641046e22 0 1698916555906 9 connected
63cf5411d594fb606584991f032b1e08d59258c8 192.168.46.129:7001@17001 myself,slave 863b12c51f8366998e4652869d5f21342fa50c88 0 1698916553000 1 connected
863b12c51f8366998e4652869d5f21342fa50c88 192.168.46.132:7004@17004 master - 0 1698916555404 8 connected 0-5460
结论:主从互换
4、停掉一对主从,看集群是否正常
[root@redis-2 src]# ./redis-cli -c -h 192.168.46.129 -p 7001
192.168.46.129:7001> cluster nodes
3f25e206a5df9ed60c1de89b6956e891370ba312 192.168.46.135:7006@17006 master - 0 1698916744337 7 connected 5461-10922
d5a799a486efe90c6aa20e45e3d171d83b45108b 192.168.46.132:7003@17003 slave 3f25e206a5df9ed60c1de89b6956e891370ba312 0 1698916745000 7 connected
8c17c775d53d49843378ca9c5adf61b641046e22 192.168.46.129:7002@17002 master - 0 1698916745343 9 connected 10923-16383
bbf159991cb2a5ca5debfbaf828dd3d411a86bb3 192.168.46.135:7005@17005 slave 8c17c775d53d49843378ca9c5adf61b641046e22 0 1698916745042 9 connected
63cf5411d594fb606584991f032b1e08d59258c8 192.168.46.129:7001@17001 myself,slave 863b12c51f8366998e4652869d5f21342fa50c88 0 1698916742000 1 connected
863b12c51f8366998e4652869d5f21342fa50c88 192.168.46.132:7004@17004 master - 0 1698916743333 8 connected 0-5460
192.168.46.129:7001>
a.根据查询结果可知192.168.46.135:7006和192.168.46.132:7003是一对主从分别将他们停掉
[root@redis-2 src]# ss -lnatup | grep redis | grep LISTEN
tcp LISTEN 0 128 *:17003 *:* users:(("redis-server",pid=16320,fd=9))
tcp LISTEN 0 128 *:17004 *:* users:(("redis-server",pid=16256,fd=9))
tcp LISTEN 0 128 *:7003 *:* users:(("redis-server",pid=16320,fd=6))
tcp LISTEN 0 128 *:7004 *:* users:(("redis-server",pid=16256,fd=6))
[root@redis-2 src]# kill -9 16320
[root@redis-3 ~]# ss -lnatup | grep redis | grep LISTEN
tcp LISTEN 0 128 *:17006 *:* users:(("redis-server",pid=16217,fd=9))
tcp LISTEN 0 128 *:7005 *:* users:(("redis-server",pid=16799,fd=6))
tcp LISTEN 0 128 *:7006 *:* users:(("redis-server",pid=16217,fd=6))
tcp LISTEN 0 128 *:17005 *:* users:(("redis-server",pid=16799,fd=9))
[root@redis-3 ~]# kill -9 16217
b.登录 redis 产看集群 并定义变量进行测试
[root@redis-1 src]# ./redis-cli -c -h 192.168.46.129 -p 7001
192.168.46.129:7001> cluster nodes
3f25e206a5df9ed60c1de89b6956e891370ba312 192.168.46.135:7006@17006 master,fail - 1698917022330 1698917020722 7 disconnected 5461-10922
d5a799a486efe90c6aa20e45e3d171d83b45108b 192.168.46.132:7003@17003 slave,fail 3f25e206a5df9ed60c1de89b6956e891370ba312 1698917026260 1698917024749 7 disconnected
8c17c775d53d49843378ca9c5adf61b641046e22 192.168.46.129:7002@17002 master - 0 1698917101342 9 connected 10923-16383
bbf159991cb2a5ca5debfbaf828dd3d411a86bb3 192.168.46.135:7005@17005 slave 8c17c775d53d49843378ca9c5adf61b641046e22 0 1698917102853 9 connected
63cf5411d594fb606584991f032b1e08d59258c8 192.168.46.129:7001@17001 myself,slave 863b12c51f8366998e4652869d5f21342fa50c88 0 1698917099000 1 connected
863b12c51f8366998e4652869d5f21342fa50c88 192.168.46.132:7004@17004 master - 0 1698917103359 8 connected 0-5460
192.168.46.129:7001> set name xiaoming
(error) CLUSTERDOWN The cluster is down
结论:定义变量时报错,集群已经不正常