前言: 腾讯云服务器可以直接用宝塔登陆,在软件商店里面可以直接安装redis,本文实践全部基于redis 7.0.5版本 以下是我要搭建的主从架构:
6080是主节点,可读可写,6081,6082,6083是三个从节点
主从搭建流程
- 创建redis-cluster文件夹,将redis.conf文件拷贝4份到redis-cluster中,并修改文件的名称分别为redis_6380.conf,redis_6381.conf,redis_6382.conf,redis_6383.conf
- conf文件的修改
# (1)设置允许外部ip访问,需要注释掉bind配置,并关掉保护模式
# bind 127.0.0.1 -::1
protected-mode no
# (2)修改端口号
port 6380
# (3)修改为以守护进程模式后台运行
daemonize yes
# (4)修改pid文件名,以守护进程运行的时候,会产生pid文件,默认位置为 /run/redis.pid
# 因为这里在同一台机器上运行多个实例,所以需要指定
pidfile /www/server/redis/redis-cluster/redis_6380.pid
# (5)修改日志文件位置
logfile "/www/server/redis/redis-cluster/redis_6380.log"
# (6)修改rdb快照文件位置
dir /www/server/redis/redis-cluster
dbfilename dump_6380.rdb
# (7)修改主节点地址,从节点文件需要设置,主节点不用设置
replicaof 152.136.197.37 6380
#(8)设置从节点连接主节点的密码,xxx为redis的登陆密码,从节点需要设置,主节点不需要设置
masterauth xxxx
主从模式验证
1. 分别启动四个redis-server服务
[lighthouse@VM-16-10-centos redis-cluster]$ redis-server redis_6380.conf
[lighthouse@VM-16-10-centos redis-cluster]$ redis-server redis_6381.conf
[lighthouse@VM-16-10-centos redis-cluster]$ redis-server redis_6382.conf
[lighthouse@VM-16-10-centos redis-cluster]$ redis-server redis_6383.conf
2. 登陆主节点
[lighthouse@VM-16-10-centos redis-cluster]$ redis-cli -p 6380
3. 执行auth xxx命令,如果不执行会报错,显示没有权限
4. 查看主从状态
127.0.0.1:6380> info replication
以下,表示创建成功!
备注:我的6082节点一直创建不成功,查看日志之后发现报错如下
Master does not understand REPLCONF listening-port: -NOAUTH Authentication require,这种情况有可能是端口占用导致,可以先确认该端口是否有被占用,如果被占用,则kill掉,重启服务,再观察,也有可能是没有添加masterauth导致的
5. 验证主从的写入和读取
主节点可读可写,从节点只读
主从模式master宕机之后操作
1. 在6380的节点执行shutdown
此时整个服务已经不可写入了!
2.将6381节点升为主节点,6382,6383是6381的从节点
1. 修改redis_6381.conf 删除replicaof 152.136.197.37 6380和masterauth xxxx
2. 修改6382.conf和6383.conf,将replicaof 后6380端口号改为6381
3. 重启redis
1. 6381的节点执行slaveof no one
2. 6382,6383执行slaveof 152.136.197.37 6381
可以看到6381已经升级为主节点,6382,6383是6381的主节点
碎碎念:此时按照搭建的流程,去修改对应的conf文件,再重启服务,发现没有设置成功,只有用命令才有效,具体原因未知!
从这次实践中,可以看到主从模式如果主节点挂掉,整个服务将变得不可写,需要运维或研发手动去执行命令,升级主节点,时效性,准确性都难以保证
此处,第一次set进入的数仍在节点中
此时重启6380的机器,发现test1的值仍然也在,因为我们开启了RDB持久化
以上,请多多指教!