由于资源有限,选用3台centos7.6配置1主2从和sentinel哨兵,其部署结构如下。
部署结构图:
+-----主----+
| Master1 |
| Sentinel1 |
+-----------+
|
+----从1----+ | +-----从2----+
| Slave1 |----+----| Slave2 |
| Sentinel1 | | Sentienel3 |
+-----------+ +------------+
( 正式场景环境下为了Redis免遭攻击,必须修改redis的端口并为其设置密码,为方便操作建议:主、从redis端口和密码修改一致)
1.配置主从(1主2从)
Master1中redis-server.conf:
#redis端口,建议修改防止攻击
port [redis端口]
# 客户端可访问ip(不限制)
bind 0.0.0.0
#设置redis访问密码
requirepass [redis密码]
#设置master节点可写
replica-read-only no
#服务后台运行
daemonize yes
#####其他参数根据需求配置#####
Slave1和Slave2中redis-server.conf:
#redis端口,建议修改防止攻击
port [redis端口]
# 客户端可访问ip(不限制)
bind 0.0.0.0
#设置redis访问密码
requirepass [redis密码]
#设置master节点可写
replica-read-only no
# 配置主节点
slaveof [master1的IP] [master1中redis配置端口]
# 指定从机"只读"
slave-read-only yes
#服务后台运行
daemonize yes
#####其他参数根据需求配置#####
检验方法:
(1)启动三台服务器上的redis-server
(2)redis-cli -p [redis端口]
(3)auth [redis密码]
(4)info replication查看redis主从信息,出现如下,表示配置成功。
2.配置Sentinel
Master1、Slave1、Slave2中redis-sentinel.conf均按如下配置:
#哨兵运行端口
port 26379
#服务后台运行
daemonize yes
#使用说明:sentinel monitor <master-name> <ip> <Redis-port> <quorum>
sentinel monitor mymaster [master1的IP] [master1的redis端口] 2
#设置密码
sentinel auth-pass mymaster [master1的redis密码]
#master或slave多长时间(默认30秒)不能使用后标记为s_down状态
sentinel down-after-milliseconds mymaster 3000
#相邻前后两次failover的时间间隔(默认3分钟)
sentinel failover-timeout mymaster 180000
#运行目录
dir "/usr/local/redis"
#此处必须设置为本机IP(外网IP),否则会使用自动发现IP,会出现访问内网IP情况,从而导致无法连通。
sentinel announce-ip [本机外网IP]
#手动注册sentinel的IP
sentinel announce-port 26379
检验测试:
(1)停止Master1上的redis-server服务。
(2)重新启动原先Master1上的redis-server服务。
(3)查看是否出现Slave和Master切换的日志,如下图所示:
注意:sentinel announce-ip 一定要配置,不然sentinel自动获取IP(由于云服务器上自动获取内网IP,而导致无法访问),就会出现Master挂了之后,不能切换问题。