Redis Sentinel部署及在Laravel中使用

本文详细介绍了如何在CentOS7环境下,利用Redis Sentinel实现一主两从的高可用配置,并部署三个Sentinel节点进行监控。在Laravel中,通过配置predis客户端连接Sentinel,确保在主节点故障时能自动切换到新的主节点,维持服务的正常运行。此外,文章还提供了部署脚本和检查服务状态的方法,以及在主节点宕机后的高可用测试过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

环境说明

当前的环境条件如下,当然这并不是部署sentinel的最低可行版本。

  • CentOS7(ip: 192.168.8.11)
  • Redis5.0.2(可执行命令已复制到/usr/local/bin/)
  • Laravel5.5(5.4>=版本开始支持sentinel
  • predis1.1

部署

按3个server节点(一主两从)+3个sentinel节点的拓扑结构进行部署。在这里插入图片描述
部署的端口分配如下:

IP端口类型配置文件
192.168.8.116400server/usr/local/etc/redis-6400.conf
192.168.8.116401server/usr/local/etc/redis-6401.conf
192.168.8.116402server/usr/local/etc/redis-6402.conf
192.168.8.1126400sentinel/usr/local/etc/sentinel-26400.conf
192.168.8.1126401sentinel/usr/local/etc/sentinel-26401.conf
192.168.8.1126402sentinel/usr/local/etc/sentinel-26402.conf

实际生产环境并不建议将所有的sentinel节点都放在同一台物理机上,因为同一台机器一但发生硬件故障,则整个高可用部署都受到严重影响。

redis server配置文件

主节点配置示例

#/usr/local/etc/redis-6400.conf
port 6400
daemonize yes
pidfile "/var/run/redis-6400.pid"
logfile "/data/redis/redis-6400.log" #日志路径
dir "/data/redis-5.0.2/"	#输出目录
bind 0.0.0.0	#开放给非同一服务器上的客户端调用

从节点配置示例

#/usr/local/etc/redis-6401.conf
port 6401
daemonize yes
pidfile "/var/run/redis-6401.pid"
logfile "/data/redis/redis-6401.log"
dir "/data/redis-5.0.2/"
bind 0.0.0.0
slaveof 192.168.8.11 6400 #从节点与主节点配置的主要区别

端口6402的从节点的配置与上面的基本一致,只要将6401替换成6402即可。

redis sentinel配置文件

#/usr/local/etc/sentinel-26400.conf
port 26400
daemonize no
pidfile "/var/run/redis-sentinel-26400.pid"
logfile "/data/redis/sentinel-26400"
dir "/data/redis/"
sentinel monitor mymaster 192.168.8.11 6400 2 #主节点别名为mymaster,后面是ip和端口,2代表判断主节点失败至少需要2个sentinel节点同意
sentinel down-after-milliseconds mymaster 30000	#主节点故障30秒后启用新的主节点
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000
sentinel deny-scripts-reconfig yes

其它端口的sentinel也这样配置,只要替换26400成相应的端口即可。

开启

为了方便操作,这里采用shel脚本指操作的方式开启服务。

#!/bin/sh
#/data/start-ms.sh
#start redis master-slave
redis-server /usr/local/etc/redis-6400.conf
redis-server /usr/local/etc/redis-6401.conf
redis-server /usr/local/etc/redis-6402.conf

redis-sentinel /usr/local/etc/sentinel-26400.conf
redis-sentinel /usr/local/etc/sentinel-26401.conf
redis-sentinel /usr/local/etc/sentinel-26402.conf

执行sh /data/start-ms.sh开启。

查看状态

服务运行状态

在这里插入图片描述

主节点信息

role表示当前节点的角色,如果是主节点,下一行表示已连接的从节点数。
在这里插入图片描述

sentinel节点信息

最后一行address表示当前主节点的ip:端口地址、从节点数和sentinel节点数。
在这里插入图片描述
至此,sentinel部署完成了。

在Laravel中使用Sentinel

配置文件

//配置文件`config/database.php`
 'redis' => [
        'options' => [
            'prefix' => 'test::',	//键的前缀
        ],
        
        'client' => 'predis',	//指示redis客户端使用的是predis组件
        
        'default' => [
            'tcp://192.168.8.11:26400',	
            'tcp://192.168.8.11:26401',
            'tcp://192.168.8.11:26402',	//这3个都是sentinel节点的地址
            'options' => [
                'replication' => 'sentinel',
                'service' => env('REDIS_SENTINEL_SERVICE', 'mymaster'),	//sentinel
                'parameters' => [
                    'password' => null,	//redis的密码,没有时写null
                    'database' => 0,
                ],
            ],
        ],
    ],

高可用测试

测试是模拟在连续写入的情况下,主节点突然宕机,然后在sentinel机制的作用下开启新的主节点,实现系统的正常运转。

//核心执行代码
set_time_limit(0); //不限制程序执行时间
for ($i = 0; $i < 10000; $i++) {
    try {
        Redis::set('s' . $i, 's');
        info('i=>'.$i);
    } catch (Exception $e) {
        logger()->error('redis err: '.$e->getMessage());
    }
    sleep(1); //1秒写入一次
}

 

执行上面代码后redis会处于不断写入的状态,然后用kill命令直接终止主节点进程,过了大概30秒,新的主节点成了端口6401,系统继续正常运行。
在这里插入图片描述
从下面日志记录可以看到大约间隔了30秒,然后继续以固定一秒的间隔记录成功写入reids的信息。
在这里插入图片描述

结语

好了,上面就是简要版的sentinel部署及larave中的使用了。关于更多sentinel的玩法请参考sentinel文档

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值