一、应用背景
Redis的主从复制模式下的缺点:
- 一旦主节点由于故障不能提供服务, 需要人工将从节点晋升为主节点,
- 同时还要通知应用方更新主节点地址, 对于很多应用场景这种故障处理的方式是无法接受的。
Redis从2.8开始正式,提供了Redis Sentinel(哨兵) 架构来解决这个问题
二、基本说明
1. 哨兵模式介绍
- Sentinel(哨兵)进程是用于监控redis集群中Master主服务器工作的状态
- 在Master主服务器发生故障的时候,可以实现Master和Slave服务器的切换,保证系统的高可用(HA)
- 其已经被集成在redis2.6+的版本中,Redis的哨兵模式到了2.8版本之后就稳定了下来。
2.哨兵进程的作用
- 监控(Monitoring):
- 提醒(Notification):当被监控的某个Redis节点出现问题时, 哨兵(sentinel) 可以通过 API 向管理员或者其他应用程序发送通知。
- 自动故障迁移(Automatic failover):当一个Master不能正常工作时,哨兵(sentinel) 会开始一次自动故障迁移操作。
- 它会将失效Master的其中一个Slave升级为新的Master, 并让失效Master的其他Slave改为复制新的Master;
- 当客户端试图连接失效的Master时,集群也会向客户端返回新Master的地址,使得集群可以使用现在的Master替换失效Master。
- Master和Slave服务器切换后,Master的redis.conf、Slave的redis.conf和sentinel.conf的配置文件的内容都会发生相应的改变,即,Master主服务器的redis.conf配置文件中会多一行slaveof的配置,sentinel.conf的监控目标会随之调换。
3.哨兵进程的工作方式
- 每个Sentinel(哨兵)进程以每秒钟一次的频率向整个集群中的Master主服务器,Slave从服务器以及其他Sentinel(哨兵)进程发送一个 PING 命令。
- 如果一个实例(instance)距离最后一次有效回复 PING 命令的时间超过 down-after-milliseconds 选项所指定的值,则这个实例会被 Sentinel(哨兵)进程标记为主观下线(SDOWN)。
- 如果一个Master主服务器被标记为主观下线(SDOWN),则正在监视这个Master主服务器的所有
Sentinel(哨兵)进程要以每秒一次的频率确认Master主服务器的确进入了主观下线状态。 - 当有足够数量的 Sentinel(哨兵)进程(大于等于配置文件指定的值)在指定的时间范围内确认Master主服务器进入了主观下线状态(SDOWN), 则Master主服务器会被标记为客观下线(ODOWN)。
- 在一般情况下, 每个Sentinel(哨兵)进程会以每 10 秒一次的频率向集群中的所有Master主服务器、Slave从服务器发送 INFO 命令。
- 当Master主服务器被 Sentinel(哨兵)进程标记为客观下线(ODOWN)时,Sentinel(哨兵)进程向下线的 Master主服务器的所有 Slave从服务器发送 INFO 命令的频率会从 10 秒一次改为每秒一次。
- 若没有足够数量的 Sentinel(哨兵)进程同意 Master主服务器下线, Master主服务器的客观下线状态就会被移除。若 Master主服务器重新向 Sentinel(哨兵)进程发送 PING 命令返回有效回复,Master主服务器的主观下线状态就会被移除。
4.哨兵模式集群拓扑图
三、集群搭建
I.前期准备
1.安装环境准备
序号 | 系统 | 内存 | CPU | 硬盘 | IP | 备注 | Redis端口 | sentinel端口 |
1 | CentOS | 4 | 4 | 20GB | 192.168.61.48 | 主节点 | 6379 | 26379 |
2 | CentOS | 4 | 4 | 20GB | 192.168.61.49 | 从节点 | 6379 | 26379 |
3 | CentOS | 4 | 4 | 20GB | 192.168.61.50 | 从节点 | 6379 | 26379 |
2.下载文件
- Redis官网下载:https://redis.io/download
- GitHub社区下载:https://github.com/redis/redis/tags
3.安装gcc依赖并升级到 gcc 9.0
redis 是用 C 语言开发,安装之前必先确认是否安装 gcc 环境(
gcc -v
),如果没有安装,执行以下命令进行安装。
# 安装gcc
yum install -y gcc
# gcc升级
yum -y install centos-release-scl
yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
# 配置文件开机启动
scl enable devtoolset-9 bash
echo "source /opt/rh/devtoolset-9/enable" >> /etc/profile
gcc -v
II.安装配置
1.解压文件并编译
# 解压文件
tar -zxvf redis-6.0.9.tar.gz
# 切换路径后编译
cd redis-6.0.9 && make
2.安装到指定目录
make install PREFIX=/usr/local/redis
redis集群配置
3.复制redis.conf配置文件到安装路径
cp /opt/software/redis-6.0.9/redis.conf /usr/local/redis/
4.Redis集群配置文件修改
- 主节点修改
# 绑定IP地址修改
bind 192.168.61.48
# 守护线程
daemonize yes
- 从节点修改
# 从节点分别绑定自己本机IP地址
bind 192.168.61.49
# 守护线程
daemonized yes
# 指定主节点
# 也可用 slaveof
replicaof 192.168.61.48 6379
5.依次启动服务
/usr/local/redis/bin/redis-server /usr/local/redis/redis-conf
6.确认主从关系
Sentinel集群配置
8.复制sentinel.conf配置文件到安装路径
cp /opt/software/redis-6.0.9/redis.conf /usr/local/redis/
9.sentinel配置文件修改
3个Sentinel节点的配置内容和部署方法是完全一致的,这里仅列出主节点,从节点依次复制
# 端口
port 26379
# 守护线程 (no 前台启动实时输出日志,yes日志写入文档中)
daemonize yes
# 设置监控的主节点
sentinel monitor mymaster 192.168.61.48 6379 1
10.依次启动
/usr/local/redis/bin/redis-sentinel /usr/local/redis/sentinel-conf
11.检查sentinel节点
12.模拟宕机
[root@localhost bin]# pgrep redis | xargs kill -9
[root@localhost bin]# ps -ef | grep redis
root 9201 8155 0 01:39 pts/1 00:00:00 grep --color=auto redis
[root@localhost bin]#
哨兵选举50节点为主节点
13.48节点重启,50节点登录检测
以上,请参考!