Redis Sentinel 模式简介

Redis-Sentinel是官方推荐的高可用解决方案,当redis在做master-slave的高可用方案时,假如master宕机 了,redis本身(以及其很多客户端)都没有实现自动进行主备切换,而redis-sentinel本身也是独立运行的进程,可以部署在其他与 redis集群可通讯的机器中监控redis集群。

它的主要功能有一下几点

1、不时地监控redis是否按照预期良好地运行;
2、如果发现某个redis节点运行出现状况,能够通知另外一个进程(例如它的客户端);
3、能够进行自动切换。当一个master节点不可用时,能够选举出master的多个slave(如果有超过一个slave的话)中的一个来作为新的master,其它的slave节点会将它所追随的master的地址改为被提升为master的slave的新地址。
4、哨兵为客户端提供服务发现,客户端链接哨兵,哨兵提供当前master的地址然后提供服务,如果出现切换,也就是master挂了,哨兵会提供客户端一个新地址。

哨兵(sentinel)本身也是支持集群的

很显然,单个哨兵会存在自己挂掉而无法监控整个集群的问题,所以哨兵也是支持集群的,我们通常用三台哨兵机器来监控一组redis集群。

 

 快速开始!

环境准备:
centos7服务器3台,6也可以,没什么区别。
我部署好了三台
redis-1
redis-2
redis-3
清空selinux与iptables

 编译安装redis

 

复制代码
yum install gcc* tcl -y
mkdir /opt/soft
cd /opt/soft
wget http://download.redis.io/releases/redis-3.2.4.tar.gz
tar xf redis-3.2.4.tar.gz
cd redis-3.2.4
make
mkdir conf
mkdir bin
cp utils/redis_init_script bin/redis
cp redis.conf conf/6379.conf
cd ..
mv redis-3.2.4 /opt/redis
cd /opt/redis/bin
sed -i s#CLIEXEC=\/usr\/local\/bin\/redis-cli#CLIEXEC=\/opt\/redis\/src\/redis-cli#g redis
sed -i s#EXEC=\/usr\/local\/bin\/redis-server#EXEC=\/opt\/redis\/src\/redis-server#g redis
sed -i s#CONF=\"\/etc\/redis#CONF=\"\/opt\/redis\/conf#g redis
cd /opt/redis/conf
sed -i s#daemonize\ no#daemonize\ yes#g 6379.conf
复制代码

 

安装完毕后,修改配置文件。

vim /opt/redis/conf/6379.conf
注释此条
bind 127.0.0.1
protected-mode yes 改为 protected-mode no #关闭安全模式
至此,redis部署完毕。


redis的启动停止脚本在
/opt/redis/bin/redis stop/start
redis的配置文件在
/opt/redis/conf/6379.conf
redis的登陆命令在
/opt/redis/src/redis-cli

 

redis配置主从

启动两台redis
redis-1 10.0.0.10
redis-2 10.0.0.20

若redis-1为主的话,在redis-2的配置文件中配置
slaveof 10.0.0.10 6379
修改完毕后重启redis即可,重启后我们可通过登陆进入redis后info查看主从信息。

 

引入哨兵。

redis-1与redis-2搭建完毕主从后,我们开始引入哨兵。
哨兵是一个单独的程序,所以我们需要单独部署它。
若是在其他机器上部署哨兵,那么请用上面的redis安装脚本重新安装一遍redis。
在这里我已经部署完毕了
redis-1
redis-2
redis-3

增加哨兵的配置文件。三台redis都需要增加,文件内容这三台一样。

复制代码
vim /opt/redis/conf/sentinel.conf
##sentinel for  10.0.0.10 ,its slave is 10.0.0.20
#master1
port 26383
sentinel monitor master1 10.0.0.10 6379 2
sentinel down-after-milliseconds master1 30000
sentinel failover-timeout master1 900000
sentinel parallel-syncs master1 1
#sentinel auth-pass mymaster 123456  #如果你的redis集群有密码
复制代码

 

配置文件的含义请自行百度。

启动哨兵
三台机器都是一个操作方式。


添加窗口
screen -S sentinel


在新窗口启动哨兵
/opt/redis/src/redis-sentinel /opt/redis/conf/sentinel.conf --protected-mode no
启动后即可看到前台输出信息。


后台挂起这个窗口请按:
Ctrl+a+d


下次返回观看这个窗口请输入
screen -r sentinel


我们这里暂时不挂起窗口,可以观察哨兵监控集群的状态。

我们接下来我们进行切换以及增加新的salve节点测试。
关掉redis-1并查看哨兵监控的状态,约30秒内,哨兵探测redis-1客观故障后,即会重新选举新的master,重新选举完毕后我们在redis-2中info查看主从状态,会发现redis-2已经被选举为master。
重新启动redis-1,并不需要修改配置文件,启动后redis-1自动会与redis-2进行同步。

修改redis-3的配置文件,把slaveof指向到redis-2,启动后你会发现哨兵会把redis-3自动添加到集群中。

 

Redis sentinel就介绍到这里,若有疑问请联系作者

QQ:896482837

转载于:https://www.cnblogs.com/sjfgod/p/7624447.html

### Redis Sentinel 模式的配置与工作原理 #### 1. Redis Sentinel 的基本概念 Redis Sentinel 是一种高可用性解决方案,主要用于监控 Redis 主从实例的状态,并在主节点发生故障时执行自动故障转移。这种机制可以显著提高系统的可靠性,确保即使在单点故障的情况下,服务仍能正常运行[^3]。 #### 2. 工作原理详解 Redis Sentinel 的核心功能包括以下几个方面: - **监控 (Monitoring)** Sentinel 节点会持续不断地检查主服务器和从服务器是否按预期工作。如果发现主服务器不可用,则触发后续操作[^1]。 - **通知 (Notification)** 当被监控的某个 Redis 实例出现问题时,Sentinel 可以向管理员或其他应用程序发送警报,以便及时采取措施[^2]。 - **自动故障转移 (Automatic Failover)** 如果主服务器无法继续工作,Sentinel 将启动选举流程,选择一个合适的从服务器升级为主服务器,并更新客户端连接信息。 - **配置提供者 (Configuration Provider)** 客户端可以通过 Sentinel 获取当前最新的主服务器地址,从而动态调整自己的连接目标。 #### 3. 配置方法 以下是 Redis Sentinel 的典型配置过程及其关键参数说明: ##### (1)安装与初始化 假设已经部署好 RedisSentinel 所需环境,创建 `sentinel.conf` 文件来定义哨兵的行为规则。以下是一个简单的配置文件示例: ```bash port 26379 # 设置 Sentinel 运行的端口号 daemonize yes # 后台运行 logfile "/var/log/redis/sentinel.log" # 日志路径 dir /tmp # 数据存储目录 # 监控名为 mymaster 的主从集群,其中 master 地址为 127.0.0.1:6379, # 至少需要 2 个 Sentinel 协议确认才能判定主节点下线 sentinel monitor mymaster 127.0.0.1 6379 2 # 故障切换超时时间设置为 180 秒 sentinel down-after-milliseconds mymaster 5000 sentinel failover-timeout mymaster 180000 ``` 上述配置中: - `sentinel monitor`: 表明要监视哪个主库(名称、IP、端口),以及至少多少个 Sentinel 认可该判断才生效。 - `down-after-milliseconds`: 设定多长时间未收到回复视为断开链接。 - `failover-timeout`: 控制整个故障转移的最大允许耗时时长。 ##### (2)启动多个 Sentinel 实例 为了增强健壮性,通常建议在同一网络环境下部署三个或更多 Sentinel 实例形成多数派决策机制。每个 Sentinel 使用相同的配置文件即可独立运行。 命令如下所示: ```bash redis-sentinel /path/to/sentinel.conf ``` #### 4. 自动故障转移的具体流程 当主服务器宕机后,Sentinel 群体会按照既定逻辑完成以下步骤: 1. 多数 Sentinel 达成一致意见认为原 Master 不再可达; 2. 在存活 Slave 中挑选最适合作为新 Master 的候选对象; 3. 更新所有 Client 对应的新 Master IP 和 Port; 4. 修改其他 Slaves 关联关系使其同步到新的 Master 上。 --- ### 示例代码:验证 Sentinel 功能的小型 Python 应用程序 下面展示如何利用 redis-py 库编写一段脚本测试 Sentinel 是否成功接管失败的服务。 ```python import redis from redis.sentinel import Sentinel def connect_to_redis_sentinel(): sentinel = Sentinel([('localhost', 26379)], socket_timeout=0.1) master = sentinel.master_for('mymaster', db=0, password=None, socket_timeout=0.1) try: result = master.set('test_key', 'value') value = master.get('test_key').decode() print(f"Successfully set key with value {value}") except Exception as e: print("Error occurred:", str(e)) if __name__ == "__main__": connect_to_redis_sentinel() ``` 此段代码展示了通过 Sentinel API 来获取当前有效的 Master 并尝试写入数据的过程。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值