0. 简介优缺点1. 安装相关命令2. 搭建主从2.1 配置主节点2.1.1 配置文件2.1.2 重启2.1.3 使用2.2 配置从节点2.2.1 配置从节点1:redis022.2.2 配置从节点2:redis032.3 查看3. 哨兵3.1 搭建3.1 下载Sentinel3.2 配置默认文件(测试存在问题)❌3.2.1 修改默认配置3.2.2 启动Sentinel3.2.3 关闭主节点3.2.4 问题3.3 自定义Sentinel ✔3.3.0 确保主从集群正常3.3.1 关闭所有的redis-sentinel3.3.2 自定义配置3.3.3 启动Sentinel3.3.4 查看自定义配置文件3.3.5 关闭主节点3.3.6 查看3.3.7 故障节点恢复3.4 Sentinel相关启动、关闭命令
0. 简介
Redis Sentinel,即Redis哨兵,在Redis 2.8版本开始引入。哨兵的核心功能是主节点的自动故障转移。
- 监控
- 提醒
- 自动故障转移
优缺点
优点:
- 哨兵集群,基于主从复制模式,所有夫人主从模式,它全有。
- 主从可以切换,故障可以转移,系统的可用性更好
- 哨兵模式就是主从模式的升级,手动到自动,更加健壮
缺点
- Redis不好在线扩容,集群一旦达到上线,在线扩容十分麻烦
- 实现哨兵模式其实很麻烦,里面有很多选择
1. 安装
Redis版本5.0.x包含在默认的Ubuntu 20.04存储库中。
sudo apt update sudo apt install redis-server
安装完成后,Redis服务将自动启动。 要检查服务的状态,请输入以下命令:
sudo systemctl status redis-server
相关命令
# 关闭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
- 重新启动
sudo service redis-server restart
- 使用
以自定义端口号启动,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
- 重新启动
sudo service redis-server restart
- 使用
以自定义端口号启动,ping一下,返回PONG说明成功
root@redis03:~# redis-cli 127.0.0.1:6379> ping PONG
2.3 查看
主节点:redis01查看
# redis01 127.0.0.1:679> info
从节点1:redis02查看
# redis02 127.0.0.1:6379> info
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
sentinel集群都启动完毕后,会将哨兵集群的元数据信息写入所有
/etc/redis/sentinel.conf
的配置文件里。sudo vim /etc/redis/sentinel.conf
redis01中
/etc/redis/sentinel.conf
配置信息redis02中
/etc/redis/sentinel.conf
配置信息redis03中
/etc/redis/sentinel.conf
配置信息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
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
3.3.4 查看自定义配置文件
查看文件
/etc/redis/sentinel26380.conf
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
3.3.7 故障节点恢复
redis01重启服务
sudo service redis-server restart # redis01 redis-cli -h 192.168.92.145 -p 6379 INFO Replication
# 查看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