|NO.Z.00036|——————————|^^ 部署 ^^|——|Hadoop&Redis.V04|——|Redis.v04|高可用|哨兵模式|高可用配置|
一、哨兵模式
### --- 哨兵
~~~ 哨兵(sentinel)是Redis的高可用性(High Availability)的解决方案:
~~~ 由一个或多个sentinel实例组成sentinel集群可以监视一个或多个主服务器和多个从服务器。
~~~ 当主服务器进入下线状态时,sentinel可以将该主服务器下的
~~~ 某一从服务器升级为主服务器继续提供服务,从而保证redis的高可用性。
二、部署方案

三、搭建配置
### --- 部署流程
~~~ 在一台机器上采用伪分布式的方式部署。(生产环境应该是多台机器)
~~~ 根据上面的部署方案搭建如下:
Redis-Master :127.0.0.1 6379
### --- 采用安装的方式,正常安装和配置
~~~ # 安装redis5.0
[root@hadoop servers]# mkdir -p redis-ms/redis-master
[root@hadoop software]# cd redis-5.0.5/src/
[root@hadoop src]# make
[root@hadoop src]# make install PREFIX=/opt/yanqi/servers/redis-ms/redis-master/
[root@hadoop src]# cp /opt/yanqi/software/redis-5.0.5/redis.conf /opt/yanqi/servers/redis-ms/redis-master/bin/
~~~ # 修改redis.conf
[root@hadoop src]# vim /opt/yanqi/servers/redis-ms/redis-master/bin/redis.conf
daemonize yes # 将`daemonize`由`no`改为`yes`
#bind 127.0.0.1 # 注销:默认绑定的是回环地址,默认不能被其他机器访问
protected-mode no # 是否开启保护模式,由yes该为no
### --- Redis-Slaver1:127.0.0.1 6380
~~~ # 安装redis-slaver1
[root@hadoop ~]# mkdir /opt/yanqi/servers/redis-ms/redis-slaver1
[root@hadoop ~]# cp -r /opt/yanqi/servers/redis-ms/redis-master/* /opt/yanqi/servers/redis-ms/redis-slaver1/
~~~ # 修改配置文件
[root@hadoop ~]# vim /opt/yanqi/servers/redis-ms/redis-slaver1/bin/redis.conf
port 6380
replicaof 127.0.0.1 6379
### --- Redis-Slaver2:127.0.0.1 6381
~~~ # 安装redis-slaver2
[root@hadoop ~]# mkdir /opt/yanqi/servers/redis-ms/redis-slaver2/
[root@hadoop ~]# cp -r /opt/yanqi/servers/redis-ms/redis-master/* /opt/yanqi/servers/redis-ms/redis-slaver2/
~~~ # 修改配置文件
[root@hadoop ~]# vim /opt/yanqi/servers/redis-ms/redis-slaver2/bin/redis.conf
port 6381
replicaof 127.0.0.1 6379
### --- Redis-Sentinel1:127.0.0.1 26379
~~~ # 安装redis-sentinel1
[root@hadoop ~]# mkdir /opt/yanqi/servers/redis-ms/redis-sentinel1
[root@hadoop ~]# cp -r /opt/yanqi/servers/redis-ms/redis-master/* /opt/yanqi/servers/redis-ms/redis-sentinel1/
~~~ # 拷贝sentinel.conf 配置文件并修改
[root@hadoop ~]# cp /opt/yanqi/software/redis-5.0.5/sentinel.conf /opt/yanqi/servers/redis-ms/redis-sentinel1/bin
[root@hadoop ~]# vim /opt/yanqi/servers/redis-ms/redis-sentinel1/bin/sentinel.conf
port 26379 # 哨兵sentinel实例运行的端口 默认26379
daemonize yes # 将`daemonize`由`no`改为`yes`
~~~ # 哨兵sentinel监控的redis主节点的 ip port
~~~ # master-name 可以自己命名的主节点名字 只能由字母A-z、数字0-9 、这三个字符".-_"组成。
~~~ # quorum 当这些quorum个数sentinel哨兵认为master主节点失联 那么这时 客观上认为主节点失联了
~~~ # sentinel monitor <master-name> <ip> <redis-port> <quorum>
sentinel monitor mymaster 127.0.0.1 6379 2
~~~ # 当在Redis实例中开启了requirepass foobared 授权密码 这样所有连接Redis实例的客户端都要提供密码
~~~ # 设置哨兵sentinel 连接主从的密码 注意必须为主从设置一样的验证密码
~~~ # sentinel auth-pass <master-name> <password>
sentinel auth-pass mymaster MySUPER--secret-0123passw0rd
~~~ # 指定多少毫秒之后 主节点没有应答哨兵sentinel 此时 哨兵主观上认为主节点下线 默认30秒,改成3秒
~~~ # sentinel down-after-milliseconds <master-name> <milliseconds>
sentinel down-after-milliseconds mymaster 3000
~~~ # 这个配置项指定了在发生failover主备切换时最多可以有多少个slave同时对新的master进行 同步,
~~~ # 这个数字越小,完成failover所需的时间就越长,
~~~ # 但是如果这个数字越大,就意味着越 多的slave因为replication而不可用。
~~~ # 可以通过将这个值设为 1 来保证每次只有一个slave 处于不能处理命令请求的状态。
~~~ # sentinel parallel-syncs <master-name> <numslaves>
sentinel parallel-syncs mymaster 1
~~~ # 故障转移的超时时间 failover-timeout 可以用在以下这些方面:
~~~ #1. 同一个sentinel对同一个master两次failover之间的间隔时间。
~~~ #2. 当一个slave从一个错误的master那里同步数据开始计算时间。直到slave被纠正为向正确的master那里同步数据时。
~~~ #3.当想要取消一个正在进行的failover所需要的时间。
~~~ #4.当进行failover时,配置所有slaves指向新的master所需的最大时间。不过,即使过了这个超时,slaves依然会被正确配置为指向master,但是就不按parallel-syncs所配置的规则来了
~~~ # 默认三分钟
~~~ # sentinel failover-timeout <master-name> <milliseconds>
sentinel failover-timeout mymaster 180000
### --- Redis-Sentinel2:127.0.0.1 26380
~~~ # 安装redis-sentinel2
[root@hadoop ~]# mkdir /opt/yanqi/servers/redis-ms/redis-sentinel2
[root@hadoop ~]# cp -r /opt/yanqi/servers/redis-ms/redis-sentinel1/* /opt/yanqi/servers/redis-ms/redis-sentinel2/bin
~~~ # 修改sentinel.conf
[root@hadoop ~]# vim /opt/yanqi/servers/redis-ms/redis-sentinel2/bin/sentinel.conf
port 26380
### --- Redis-Sentinel3:127.0.0.1 26381
~~~ # 安装redis-sentinel3
[root@hadoop ~]# mkdir /opt/yanqi/servers/redis-ms/redis-sentinel3
[root@hadoop ~]# cp -r /opt/yanqi/servers/redis-ms/redis-sentinel1/* /opt/yanqi/servers/redis-ms/redis-sentinel3/bin
~~~ # 修改sentinel.conf
[root@hadoop ~]# vim /opt/yanqi/servers/redis-ms/redis-sentinel3/bin/sentinel.conf
port 26381
四、配置好后依次执行
### --- redis-master、redis-slaver1、redis-slaver2、redis-sentinel1、redis-sentinel2、redis-sentinel3
~~~ # 启动redis-master和redis-slaver
[root@hadoop ~]# cd /opt/yanqi/servers/redis-ms/
[root@hadoop redis-ms]# cd redis-master/bin // 启动redis-master
[root@hadoop bin]# ./redis-server redis.conf
[root@hadoop redis-ms]# cd redis-slaver1/bin/ // 启动redis-slave1
[root@hadoop bin]# ./redis-server redis.conf
[root@hadoop redis-ms]# cd redis-slaver2/bin/ // 启动redis-slave2
[root@hadoop bin]# ./redis-server redis.conf
~~~ # 启动redis-sentinel
[root@hadoop redis-ms]# cd redis-sentinel1/bin/ // 启动redis-sentinel1
[root@hadoop bin]# ./redis-sentinel sentinel.conf
[root@hadoop redis-ms]# cd redis-sentinel2/bin/ // 启动redis-sentinel2
[root@hadoop bin]# ./redis-sentinel sentinel.conf
[root@hadoop redis-ms]# cd redis-sentinel3/bin/ // 启动redis-sentinel3
[root@hadoop bin]# ./redis-sentinel sentinel.conf
~~~ # 查看启动状态
[root@linux123 redis-ms]# ps -ef |grep redis
root 12102 1 0 17:49 ? 00:00:25 ./redis-server *:6379
root 21837 1 0 23:05 ? 00:00:00 ./redis-server *:6380
root 21843 1 0 23:06 ? 00:00:00 ./redis-server *:6381
root 21869 1 0 23:11 ? 00:00:00 ./redis-sentinel *:26379 [sentinel]
root 21879 1 0 23:13 ? 00:00:00 ./redis-sentinel *:26380 [sentinel]
root 21886 1 0 23:14 ? 00:00:00 ./redis-sentinel *:26381 [sentinel]
五、验证启动状态
### --- 验证集群主从复制:主写从只能读
~~~ # 在redis-master下set一个数据
[root@hadoop ~]# cd /opt/yanqi/servers/redis-ms/redis-master/bin/
[root@hadoop bin]# ./redis-cli
127.0.0.1:6379> set age 18
OK
~~~ # 在redis-slave1下验证数据是否同步过来
~~~ 当前状态:两从只能读,不能写
[root@hadoop bin]# ./redis-cli -p 6380
127.0.0.1:6380> get age
"18"
127.0.0.1:6380> set age 19
(error) READONLY You can't write against a read only replica.
[root@hadoop ~]# cd /opt/yanqi/servers/redis-ms/redis-slaver2/bin/
[root@hadoop bin]# ./redis-cli -p 6381
127.0.0.1:6381> get age
"18"
127.0.0.1:6381> set age 20
(error) READONLY You can't write against a read only replica.
### --- 验证集群主节点宕机,从节点接管服务
~~~ # 停止主节点服务
[root@hadoop bin]# ps -ef | grep redis
root 12102 1 0 17:49 ? 00:00:26 ./redis-server *:6379
[root@hadoop bin]# kill -9 12102
~~~ # 验证redis-slave1是否接管服务
127.0.0.1:6380> set age 21 // 6380接管为主服务,可以读写
OK
127.0.0.1:6381> get age
"21"
~~~ # 验证redis-slave2是否接管服务
127.0.0.1:6381> set age 22 // 6381还是只能读,不能写
(error) READONLY You can't write against a read only replica.
### --- 启动原来的主节点,验证是否接管服务
~~~ # 启动redis-master服务
[root@hadoop bin]# ./redis-server redis.conf
[root@hadoop bin]# ps -ef | grep redis
root 21917 1 0 23:29 ? 00:00:00 ./redis-server *:6379
~~~ # 验证redis-master是否接管服务
~~~ 说明:原主起来后不会接管服务,只能读,不能写,作为从使用
[root@hadoop bin]# ./redis-cli
127.0.0.1:6379> get age
"21"
127.0.0.1:6379> set age 23 // 只能读不能写
(error) READONLY You can't write against a read only replica.
~~~ # 验证redis-slave2是否放弃写服务
127.0.0.1:6380> set age 23 // redis-slave1可读可写
OK
Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart
——W.S.Landor
分类:
bdv012-redis
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix