ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
1. 分别执行以下命令开始`6370`和`6371`目录下的`sentinel.conf`文件。 ~~~bash vim /home/project/redis-5.0.5/sentinel.conf #编辑 6379 配置文件 vim /home/project/redis-6370/sentinel.conf #编辑 6370 配置文件 vim /home/project/redis-6371/sentinel.conf #编辑 6371 配置文件 ~~~ 2. 下面就是`sentinel.conf`中一些需要修改的相关配置文件: ~~~java /** 统一默认配置(3 个文件都按照下面配置) **/ protected-mode no //网络是否允许对外访问,no 表示允许 daemonize yes //后台运行 sentinel monitor mymaster 127.0.0.1 6379 2 //mymaster 可以任意起名,保持一致即可,后面就是主节点的 ip 和端口,最后的 2 表示当前有 2 个 sentinel 认为 master 主观下线,则可以修改为客观下线 sentinel down-after-milliseconds mymaster 30000 //超时时间 sentinel parallel-syncs mymaster 1 //mymaster 保持一致 sentinel failover-timeout mymaster 180000 //mymaster 保持一直 /** 6379 端口即 redis-5.0.5 目录下配置 **/ port 26379 //这个是端口,需要设置的不一样 6370 目录改为 26380,6371 目录改为 26381 pidfile /var/run/redis-sentinel-26379.pid //最后的数字和上面一样分别改为 26380 和 26381 logfile "/home/project/redis-5.0.5/sentinel.log" //主要是 6370 和 6371 分别修改一下 dir "/home/project/redis-5.0.5" //同样的,这里也需要对应好 6370 和 6371 /** 6370 目录下配置 **/ port 26380 //这个是端口,需要设置的不一样 6370 目录改为 26380,6371 目录改为 26381 pidfile /var/run/redis-sentinel-26380.pid //最后的数字和上面一样分别改为 26380 和 26381 logfile "/home/project/redis-6370/sentinel.log" //主要是 6370 和 6371 分别修改一下 dir "/home/project/redis-6370" //同样的,这里也需要对应好 6370 和 6371 /** 6371 目录下配置 **/ port 26381 //这个是端口,需要设置的不一样 6370 目录改为 26380,6371 目录改为 26381 pidfile /var/run/redis-sentinel-26381.pid //最后的数字和上面一样分别改为 26380 和 26381 logfile "/home/project/redis-6371/sentinel.log" //主要是 6370 和 6371 分别修改一下 dir "/home/project/redis-6371" //同样的,这里也需要对应好 6370 和 6371 ~~~ 每个参数的具体含义见下表: | 参数 | 说明 | | --- | --- | | protected-mode | 是否允许外部网络访问 | | port | sentinel 端口 | | pidfile | pid 文件 | | logfile | 日志文件 | | dir | sentinel 工作主目录 | | sentinel monitor | 监控的 master 服务名称,ip 和端口,其中 ip 建议使用真实 ip 取代本机 ip | | sentinel down-after-milliseconds | master 下线多少毫秒才会被 Sentinel 判定为主观下线 | | sentinel parallel-syncs | 切换新的 master-slave 时,slave 需要从新的 master 同步数据,这个数字表示允许多少个 slave 同时复制数据 | | sentinel failover-timeout | 故障转移超时时间,这个时间有 4 个含义 | 故障转移超时时间用在了以下`4`个地方: * 同一个`sentinel`对同一个`master`两次`failover`之间的间隔时间。 * 从检测到`master`服务器故障开始,到被强制切换到新的`master`服务器并开始复制数据为止的时间。 * 取消已经在进行故障转移(没有产生任何配置更改的故障转移)所需的时间。 * 将所有`slave`配置新的`master`节点所需要的时间。超过这个时间如果仍然没有完成还是会继续进行,但是不一定会按照配置`parallel-syncs`所指定的并行数来进行。 3. 三个目录的`sentinel`都配置好之后,执行以下命令分别启动包括原`6379`在内的`3`个`sentinel`服务(如果`Redis`服务没启动也需要一并启动)。 ~~~bash # 启动 sentinel 服务 /home/project/redis-5.0.5/bin/./redis-server /home/project/redis-5.0.5/sentinel.conf --sentinel /home/project/redis-6370/bin/./redis-server /home/project/redis-6370/sentinel.conf --sentinel /home/project/redis-6371/bin/./redis-server /home/project/redis-6371/sentinel.conf --sentinel # 启动 redis 服务 /home/project/redis-5.0.5/bin/redis-server /home/project/redis-5.0.5/redis.conf /home/project/redis-6370/bin/redis-server /home/project/redis-6370/redis.conf /home/project/redis-6371/bin/redis-server /home/project/redis-6371/redis.conf ~~~ 4. 启动之后执行命令`ps -ef | grep redis`查看服务是否已经全部启动,如果全部启动成功,则应如下图所示有`6`个服务全部启动成功: ![](https://img.kancloud.cn/ae/ed/aeed25700f5ef3030b9c9fba423a3f4e_865x231.png) 5. 如果主从服务没有启动,那么这一步我们需要把主从服务进行启动配置(不会搭建`master-slave`集群的可以参考上一个实验)。 ~~~bash /home/project/redis-5.0.5/bin/redis-cli replicaof no one # 新开一个终端 /home/project/redis-6370/bin/redis-cli -p 6370 replicaof 127.0.0.1 6379 # 新开一个终端 /home/project/redis-6371/bin/redis-cli -p 6371 replicaof 127.0.0.1 6379 ~~~ 6. 打开任意一个`sentinel.log`文件查看,如执行命令`vim /home/project/redis-5.0.5/sentinel.log`查看,从日志当中可以很明显看到当前`3`个`sentinel`服务构成了一个集群,并且将主从`Redis`服务都进行了监控: ![](https://img.kancloud.cn/24/3d/243d665ea80d2b2733c4f0c60c3a891b_1180x350.png) 7. 现在让我们验证一下当`master`节点挂了之后,`sentinel`服务是否真的能实现主动切换。回到上面步骤`4`中查看进程的图中,我们看到`6379`服务的进程`id`为`204`,执行`kill -9 204`命令强制关掉`master`节点之后再执行进行查看命令: ![](https://img.kancloud.cn/92/57/92570005dc64e4df229558bc2d5a2d8c_793x215.png) 8. 稍等一小会之后,我们可以分别进入`6370`服务或者`6371`服务上再执行`info replication`命令进行查看。下图就是`6370`服务中查看到的信息,可以看到,`6371`服务已经自动升级为`master`节点了,`6371`节点成为了其`slave`节点: ![](https://img.kancloud.cn/d4/d1/d4d1627fa15a0ecd0731b3b1d1bae217_689x231.png) 9. 再执行命令`vim /home/project/redis-5.0.5/sentinel.log`查看一下`sentinel`日志(红框部分就是故障转移的过程日志): ![](https://img.kancloud.cn/b3/22/b3227d41b546089a180672e4e099d177_1053x252.png) 10. 最后,我们执行如下命令。 ~~~bash # 重新启动旧的 master /home/project/redis-5.0.5/bin/redis-server /home/project/redis-5.0.5/redis.conf # 连接 Redis 服务 /home/project/redis-5.0.5/bin/redis-cli # 查看主从信息 info replication ~~~ ![](https://img.kancloud.cn/47/26/47262000b5fde83d63c0f4721156943a_852x351.png) 可以看到,其已经从`master`角色转变成了`slave`角色。