cluster集群特点:
cp /root/redis-6.2.3/redis.conf /root/redis-6.2.3/redis_7001.conf
cp /root/redis-6.2.3/redis.conf /root/redis-6.2.3/redis_7002.conf
mkdir -p /var/log/redis/cluster
mkdir -p /root/redis-6.2.3/cluster/{redis_7001,redis_7002}
注意:这里是同一台主机的7001 端口 和 7002端口 所需要的配置文件copy redis.conf即可
修改配置文件
以下是要手动修改或添加的,其他配置不需要修改:
# vim redis_7001.conf
bind 192.168.42.28 #修改为本机ip
port 7001 #添加7001端口
daemonize yes #开启后台运行
pidfile "/var/run/redis_7001.pid" #pid文件存放路径
logfile "/var/log/redis/cluster/redis_7001.log" #日志文件存放路径
dir "/root/redis-6.2.3/cluster/redis_7001" #后续相关文件路径
masterauth “123456” #配置主从机登录验证密码
requirepass “123456” #配置本机登录验证密码
appendonly yes #开启AOF增量备份
cluster-enabled yes #开启cluster集群
cluster-config-file nodes_7001.conf #集群节点消息存放路径
cluster-node-timeout 15000 #命令返回时间为15000ms / 15s
以上为7001端口所对应配置文件,后续端口都一样
其它两台机器配置与192.168.42.28一致,此处省略
启动redis服务:
src/redis-server redis_7001.conf
tail -f /var/log/redis/cluster/redis_7001.log
src/redis-server redis_7002.conf
tail -f /var/log/redis/cluster/redis_7002.log
其它两台机器启动与192.168.42.28一致,此处省略
查看启动的日志文件
No cluster configuration found, I'm a1eec932d923b55e23a5fe6a488ed7a97e27c826
这表示我们的redis服务器正在运行在cluster mode
src/redis-cli -a 123456 --cluster create 192.168.42.28:7001 192.168.42.28:7002 192.168.42.29:7003 192.168.42.29:7004 192.168.42.30:7005 192.168.42.30:7006 --cluster-replicas 1
手动输入yes,接受上面的配置
查看replicates可以看到Slave对应的主机关系
可以看到
192.168.42.28:7001是master,它的slave是192.168.42.29:7004
192.168.42.29:7003是master,它的slave是192.168.42.30:7006
192.168.42.30:7005是master,它的slave是192.168.42.28:7002
这里的nodes文件存放的是节点信息
集群操作:
登录集群:
redis-cli -c -h 192.168.42.28 -p 7001 -a 123456 # -c,使用集群方式登录
查看集群信息:
192.168.42.28:7001> CLUSTER INFO #集群状态
列出节点信息:
192.168.42.28:7001> CLUSTER NODES #列出节点信息
写入数据:
192.168.42.28:7001> set key111 aaa
-> Redirected to slot [13680] located at 192.168.42.30:7005 #说明数据到了192.168.42.30:7005上
OK
192.168.42.30:7005> set key222 bbb
-> Redirected to slot [2320] located at 192.168.42.28:7001 #说明数据到了192.168.42.28:7001上OK
192.168.42.28:7001> set key333 ccc
-> Redirected to slot [7472] located at 192.168.42.29:7003 #说明数据到了192.168.42.29:7003上OK
192.168.42.29:7003> get key111
-> Redirected to slot [13680] located at192.168.42.30:7005
"aaa
"192.168.42.30:7005> get key333
-> Redirected to slot [7472] located at 192.168.42.29:7003
"ccc"
可以看出redis cluster集群是去中心化的,每个节点都是平等的,连接哪个节点都可以获取和设置数据。
当然,平等指的是master节点,因为slave节点根本不提供服务,只是作为对应master节点的一个备份
增加节点:
1、192.168.42.29上增加一节点:
cp /root/redis-6.2.3/redis_7003.conf /root/redis-6.2.3/redis_7007.conf
vim /root/redis-6.2.3/redis_7007.conf
mkdir /root/redis-6.2.3/cluster/redis_7007
src/redis-server redis_7007.conf
bind 192.168.42.29
port 7007
daemonize yes
pidfile "/var/run/redis_7007.pid“
logfile "/usr/local/redis/cluster/redis_7007.log“
dir "/data/redis/cluster/redis_7007“
#replicaof 192.168.30.129 6379
masterauth "123456“
requirepass "123456“
appendonly yes
cluster-enabled yes
cluster-config-file nodes_7007.conf
cluster-node-timeout 15000
2、集群中增加节点:
192.168.42.29:7003> CLUSTER MEET 192.168.42.29 7007
OK
192.168.42.29:7003> CLUSTER NODES
可以看到,新增的节点都是以master身份加入集群的
192.168.42.30:7008> CLUSTER FORGET dc2c5a26a620423214942a0cc6d8cf5538122563
(error) ERR I tried hard but I can't forget myself... #无法删除登录节点
192.168.42.30:7008> CLUSTER FORGET e51ab166bc0f33026887bcf8eba0dff3d5b0bf14
(error) ERR Can't forget my master! #不能删除自己的master节点
192.168.42.30:7008> CLUSTER FORGET 6788453ee9a8d7f72b1d45a9093838efd0e501f1
OK #可以删除其它的master节点
192.168.30.130:7008> CLUSTER NODES
192.168.42.30:7008> CLUSTER FORGET b4d3eb411a7355d4767c6c23b4df69fa183ef8bcOK
#可以删除其它的slave节点
192.168.42.30:7008> CLUSTER SAVECONFIG #将节点配置信息保存到硬盘
OK
cat /data/redis/cluster/redis_7001/nodes-7001.conf #查看节点信息文件
redis-cli -c -h 192.168.42.30 -p 7008 -a 123456
192.168.30.130:7008> CLUSTER NODES
可以看到,之前删除的节点又恢复了,这是因为对应的配置文件没有删除,执行CLUSTER SAVECONFIG恢复
模拟master节点挂掉
netstat -lntp |grep 7001
kill pid
常见错误:
1、
报错原因:因为之前已经搭建了,导致无法继续再搭建,所以需要把cluster下的文件都删除然后再重新创建,最后再创建集群即可。
或者不创建集群,直接登录
2、
(error) ERR To set a master the node must be empty and without assigned slots.