Redis Note24:主从模式搭建+哨兵

Redis Note24:主从模式搭建+哨兵

0. 简介

Redis Sentinel,即Redis哨兵,在Redis 2.8版本开始引入。哨兵的核心功能是主节点的自动故障转移。
  • 监控
  • 提醒
  • 自动故障转移
notion image
 

优缺点

优点:
  1. 哨兵集群,基于主从复制模式,所有夫人主从模式,它全有。
  1. 主从可以切换,故障可以转移,系统的可用性更好
  1. 哨兵模式就是主从模式的升级,手动到自动,更加健壮
 
缺点
  1. Redis不好在线扩容,集群一旦达到上线,在线扩容十分麻烦
  1. 实现哨兵模式其实很麻烦,里面有很多选择

1. 安装

Redis版本5.0.x包含在默认的Ubuntu 20.04存储库中。
sudo apt update sudo apt install redis-server
安装完成后,Redis服务将自动启动。 要检查服务的状态,请输入以下命令:
sudo systemctl status redis-server
notion image

相关命令

# 关闭192.168.92.145上的redis-server(这种方式刚关闭会自动再起一个进程) redis-cli -h 192.168.92.145 -p 6379 shutdown # 启动 service redis-server start # 停止,可以正常关闭 service redis-server stop # 重启 service redis-server restart # 查看状态 service redis-server status # 查看redis进程 ps -ef | grep redis

2. 搭建主从

  • redis01(192.168.92.145):主节点
  • redis02(192.168.92.146):从节点1
  • redis03(192.168.92.147):从节点2
主机名
IP
Redis端口号
启动命令
redis01
192.168.92.145
6379
redis-server /etc/redis/redis6379.conf
redis02
192.168.92.146
6379
redis-server /etc/redis/redis6379.conf
redis03
192.168.92.147
6379
redis-server /etc/redis/redis6379.conf

2.1 配置主节点

  • redis01(192.168.92.145):主节点

2.1.1 配置文件

vim /etc/redis/redis.conf
修改配置文件/etc/redis/redis.conf
# 本机内网IP #bind 192.168.92.145 #设置为no,允许外部网络访问,只有打开这个从节点才可以连上 protected-mode no
 

2.1.2 重启

sudo service redis-server restart

2.1.3 使用

以自定义端口号启动,ping一下,返回PONG说明成功
root@redis01:~# redis-cli 127.0.0.1:6379> ping PONG

2.2 配置从节点

默认的redis启动都是主节点,只需修改从节点即可。比主节点多一个配置!

2.2.1 配置从节点1:redis02

  • redis02(192.168.92.146):从节点1
1. 创建自定义启动文件
vim /etc/redis/redis.conf
/etc/redis/redis.conf
# 本机内网IP #bind 192.168.92.146 #设置为no,允许外部网络访问 protected-mode no # master节点内网IP replicaof 192.168.92.145 6379
  1. 重新启动
sudo service redis-server restart
  1. 使用
以自定义端口号启动,ping一下,返回PONG说明成功
root@redis02:~# redis-cli 127.0.0.1:6379> ping PONG

2.2.2 配置从节点2:redis03

  • redis03(192.168.92.147):从节点2
1. 创建自定义启动文件
vim /etc/redis/redis.conf
/etc/redis/redis.conf
# 本机内网IP #bind 192.168.92.147 #设置为no,允许外部网络访问 protected-mode no # master节点内网IP replicaof 192.168.92.145 6379
  1. 重新启动
sudo service redis-server restart
  1. 使用
以自定义端口号启动,ping一下,返回PONG说明成功
root@redis03:~# redis-cli 127.0.0.1:6379> ping PONG

2.3 查看

主节点:redis01查看
# redis01 127.0.0.1:679> info
notion image
从节点1:redis02查看
# redis02 127.0.0.1:6379> info
notion image

3. 哨兵

在主从架构中主节点挂了,从节点是不会顶上来的,从节点只是做了读写分离和数据备份。
哨兵架构可以监测主节点变化情况和选举主节点的功能。
客户端只需要连接哨兵便能访问redis,redis的主节点变化不会影响到客户端。

3.1 搭建

  • redis01(192.168.92.145):主节点、sentinel节点
  • redis02(192.168.92.146):从节点1、sentinel节点
  • redis03(192.168.92.147):从节点2、sentinel节点
主机名
IP
Redis_IP
启动命令
Sentinel_IP
redis01
192.168.92.145
6379
redis-server /etc/redis/redis6379.conf
26379
redis02
192.168.92.146
6379
redis-server /etc/redis/redis6379.conf
26379
redis03
192.168.92.147
6379
redis-server /etc/redis/redis6379.conf
26379

3.1 下载Sentinel

apt install redis-sentinel

3.2 配置默认文件(测试存在问题)❌

3.2.1 修改默认配置

修改配置文件/etc/redis/sentinel.conf
sudo vim /etc/redis/sentinel.conf
修改内容为:
sentinel monitor mymaster 192.168.92.145 6379 2 # 修改为你自己的master节点内网IP

3.2.2 启动Sentinel

三个节点启动Sentinel
redis-sentinel /etc/redis/sentinel.conf
查看三个节点都可以使用如下命令查看,内容一致
# 进入服务,再输入info redis-cli -h 192.168.92.145 -p 26379 # 或者直接查看 redis-cli -h 192.168.92.145 -p 26379 INFO Sentinel
notion image
 
sentinel集群都启动完毕后,会将哨兵集群的元数据信息写入所有/etc/redis/sentinel.conf的配置文件里。
sudo vim /etc/redis/sentinel.conf
redis01/etc/redis/sentinel.conf 配置信息
notion image
redis02/etc/redis/sentinel.conf 配置信息
notion image
redis03/etc/redis/sentinel.conf 配置信息
notion image

3.2.3 关闭主节点

关闭主节点Redis01,系统会自动修改sentinel文件里之前配置/etc/redis/sentinel.conf的mymaster对应的主节点。
# 关闭服务 root@redis01:~# service redis-server stop # 查看redis进程 root@redis01:~# ps -ef | grep redis

3.2.4 问题

再次打开redis02、redis03中/etc/redis/sentinel.conf 配置信息变为如下信息:
sentinel monitor mymaster 127.0.0.1 6379 2
 

3.3 自定义Sentinel ✔

  • 主要是为了解决3.2配置和3.3启动 的问题

3.3.0 确保主从集群正常

  • redis01:主节点
  • redis02:从节点
  • redis03:从节点
主机名
IP
Redis_IP
启动命令
Sentinel_IP
redis01
192.168.92.145
6379
redis-server /etc/redis/redis6379.conf
26380
redis02
192.168.92.146
6379
redis-server /etc/redis/redis6379.conf
26380
redis03
192.168.92.147
6379
redis-server /etc/redis/redis6379.conf
26380
# redis01 redis-cli -h 192.168.92.145 -p 6379 INFO Replication # redis02 redis-cli -h 192.168.92.146 -p 6379 INFO Replication # redis03 redis-cli -h 192.168.92.147 -p 6379 INFO Replication
notion image

3.3.1 关闭所有的redis-sentinel

三台机器全部关闭(由于3.4 步骤启动了redis-sentinel的26379,如果没做3.4可以跳过)
# 停止,可以正常关闭 service redis-sentinel stop # 查看redis进程 ps -ef | grep redis

3.3.2 自定义配置

自定义Sentinel配置文件/etc/redis/sentinel26380.conf
sudo vim /etc/redis/sentinel26380.conf
# 绑定IP bind 0.0.0.0 # sentinel实例之间的通讯端口 port 26380 # 后台运行 daemonize yes # 这个文件会自动生成(如果同一台服务器上启动,注意要修改为不同的端口) pidfile "/var/run/sentinel/redis-sentinel26380.pid" #设置Sentinel日志存放路径 logfile "/var/log/redis/redis-sentinel26380.log" #工作目录,需要创建好目录,可自定义 #dir "/var/lib/redis" # sentinel监控的master的名字叫做mymaster,初始地址为 127.0.0.1 6380,2代表两个及以上哨兵认定为死亡,才认为是真的死亡 # 修改为你自己的master节点内网IP sentinel monitor mymaster 192.168.92.145 6379 2 # 配置失效时间,master会被这个sentinel主观地认为是不可用的,单位毫秒 sentinel down-after-milliseconds mymaster 60000 # 在发生failover主备切换时最多可以有多少个slave同时对新的master进行同步。 sentinel parallel-syncs mymaster 1 #若sentinel在该配置值内未能完成master/slave自动切换,则认为本次failover失败。 sentinel failover-timeout mymaster 180000 # 设置连接master和slave时的密码,注意的是sentinel不能分别为master和slave设置不同的密码,因此master和slave的密码应该设置相同 #sentinel auth-pass redis01 123456 # 没指定密码或者指定IP的情况下,外网无法访问 protected-mode no

3.3.3 启动Sentinel

三个节点启动Sentinel
# 启动redis-sentinel 36380端口进程 redis-sentinel /etc/redis/sentinel26380.conf # 查看redis进程 ps -ef | grep redis
notion image

3.3.4 查看自定义配置文件

查看文件/etc/redis/sentinel26380.conf
notion image
notion image
notion image

3.3.5 关闭主节点

关闭主节点Redis01,模拟宕机。
# 关闭服务 root@redis01:~# service redis-server stop # 查看redis进程,确定停止了redis 6379端口 root@redis01:~# ps -ef | grep redis
 

3.3.6 查看

查看redis02、redis03(需要等一小会儿哨兵选举)
# redis02 redis-cli -h 192.168.92.146 -p 6379 INFO Replication # redis03 redis-cli -h 192.168.92.147 -p 6379 INFO Replication
notion image
notion image

3.3.7 故障节点恢复

redis01重启服务
sudo service redis-server restart # redis01 redis-cli -h 192.168.92.145 -p 6379 INFO Replication
notion image
# 查看redis03,从节点变为两个 redis-cli -h 192.168.92.147 -p 6379 INFO Replication
哨兵测试完毕✔

3.4 Sentinel相关启动、关闭命令

# 关闭192.168.92.145上的redis-sentinel(这种方式刚关闭会自动再起一个进程) redis-cli -h 192.168.92.145 -p 26379 shutdown # 启动 service redis-sentinel start # 停止,可以正常关闭 service redis-sentinel stop # 重启 service redis-sentinel restart # 查看状态 service redis-sentinel status # 查看redis进程 ps -ef | grep redis