环境资源准备
| 主机名 | IP | 端口号 | 角色 |
| vm1 | 192.168.64.15 | 6379/26379 | master |
| vm2 | 192.168.64.16 | 6379/26379 | slave |
| vm3 | 192.168.64.17 | 6379/26379 | slave |
6379为redis服务暴露端口号、26379为sentinel暴露端口号。
安装Redis
# 包文件下载wget https://github.com/redis/redis/archive/7.2.2.tar.gz# 解压文件tar -zxvf redis-7.2.2.tar.gz# 进入包文件夹cd redis-7.2.2/# 安装依赖文件## Ubuntusudo apt install -y gcc g++ make## CentOSsudo yum -y install gcc g++ make## 创建安装文件夹、数据文件夹mkdir -p /usr/local/redis/data/# 再次检查当前目录是否为redis源码文件,如果是进行make操作make# make install安装到指定文件夹make install PREFIX=/usr/local/redis/
配置文件
文件路径
/etc/redis.conf
主节点(去除中文解释)
daemonize yeslogfile "/var/log/redis.log"bind 0.0.0.0port 6379protected-mode nopidfile /var/run/redis_6379.piddir /usr/local/redis/data # 指定生成rdb文件的路径 相对路径受到启动redis的操作路径的影响slave-read-only yesslave-priority 100appendonly yes # 开启AOF模式appendfilename "appendonly.aof"appendfsync everysecrequirepass 123456
从节点(去除中文解释)
注意将slaveof设置为置顶的主节点地址。
daemonize yeslogfile "/var/log/redis.log"bind 0.0.0.0port 6379protected-mode nopidfile /var/run/redis_6379.piddir /usr/local/redis/data # 指定生成rdb文件的路径 相对路径受到启动redis的操作路径的影响slave-read-only yesslave-priority 90 # 主节点最高,其他依次递减,一个从节点90,一个从节点85appendonly yes # 开启AOF模式appendfilename "appendonly.aof"appendfsync everysecrequirepass 123456slaveof 192.168.64.15 6379masterauth 123456
启动服务
/usr/local/redis/bin/redis-server /etc/redis.conf
查看启动状态
root@vm1:/home/ubuntu/redis-7.2.2# ps -ef | grep redisroot 7827 1 0 14:48 ? 00:00:00 /usr/local/redis/bin/redis-server 0.0.0.0:6379root 7848 1171 0 14:48 pts/0 00:00:00 grep --color=auto redis
登录验证
/usr/local/redis/bin/redis-cli

启动成功,从节点设置成功
此时,主从redis已经设置完毕,开始搭建哨兵。
哨兵配置文件
文件路径
/etc/sentinel.conf
配置内容
创建文件夹
mkdir -p /usr/local/redis/temp
protected-mode noport 26379dir /usr/local/redis/templogfile "/var/log/sentinel.log"daemonize yessentinel monitor mymaster 192.168.64.15 6379 2 # mymaster集群的名字,2个节点以上认为不可用,进行fall oversentinel down-after-milliseconds mymaster 10000 # 判断主节点宕机时间,主观下线sentinel failover-timeout mymaster 60000 # 两次fallover间隔sentinel auth-pass mymaster 123456sentinel parallel-syncs mymaster 1 # 这个配置项指定了在发生failover主备切换时最多可以有多少个slave同时对新的master进行 同步,这个数字越小,完成failover所需的时间就越长,但是如果这个数字越大,就意味着越 多的slave因为replication而不可用。可以通过将这个值设为 1 来保证每次只有一个slave 处于不能处理命令请求的状态。
sentinel monitor,后第一个字符串为集群名称,一般为mymaster即可,后面跟主节点IP和端口号。三个节点配置文件相同。配置时去除中文。
启动sentinel服务
/usr/local/redis/bin/redis-sentinel /etc/sentinel.conf
查看启动情况
root@vm1:/home/ubuntu/redis-7.2.2# ps -ef | grep redisroot 7827 1 0 14:48 ? 00:00:01 /usr/local/redis/bin/redis-server 0.0.0.0:6379root 7887 1 0 14:57 ? 00:00:00 /usr/local/redis/bin/redis-sentinel *:26379 [sentinel]root 7895 1171 0 14:58 pts/0 00:00:00 grep --color=auto redis
利用python检测哨兵节点切换
import time
from redis.sentinel import Sentinel
sentinel_list = [
("192.168.64.15", 26379),
("192.168.64.16", 26379),
("192.168.64.17", 26379),
]
mySentinel = Sentinel(sentinel_list, )
for i in range(1000):
try:
print(mySentinel.discover_master("mymaster"))
time.sleep(1)
except:
pass

此时节点进行了切换,从日志可以看出切换过程。




















