11.1.2 环境搭建 11.1.2.1 部署架构
部署架构上采用三台机器,一个Master接受写请求,两个Slave进行数据同步,三台机器上都部署sentinel(一般为奇数个,因为需要绝大部分进行投票才能failover)。(官方示例)具体架构如下图:
注意:如果有条件可以将sentinel多部署几个在客户端所在的应用服务器上,而不是与从节点部署在一起,这样避免整机宕机后sentinel和slave都减少而导致的切换选举sentinel无法超过半数。
11.1.2.2 网络规划
redis高可用环境不需要进行心跳线的配置,每个物理节点的网卡进行双网卡主备绑定生成bond0即可。
11.1.2.3 用户规划
| | | | |
---|
用户名 | 用户所在组 | 用户目录 | 权限 | 备注 |
redis(10086) | redis (10086) | /redis | sudo(如需要浮动IP时赋予) | -- |
11.1.2.4 持久化规划
如果读多写少,可以在master上只开启aof,在低峰期定时进行bgsave,在slave上彻底关闭持久化。 如果读写差不多,可以在一个slave上开启rdb(这个slave只做持久化,不进行读操作),在其余主从都关闭持久化。 注意:从节点是不会从本地恢复而直接从master节点进行恢复的,因此在重启前如果有需要备份从节点,则需要把aof和rdb文件移走。
11.1.2.5 目录规划
| |
---|
目录 | 含义 |
/redis/bin | redis可执行文件 |
/redis/conf | redis 和supervisord的配置文件 |
/redis/run | redis和supervisord运行时的pid文件 |
/redis/log | redis和supervisord的日志 |
/redis/script | 一些管理脚本和测试脚本 |
/redis/data | Redis持久化数据目录 |
11.1.2.6 部署步骤
解压下列压缩包至/tmp/redis目录,以符合上述目录结构:
部署相关组件: cd /tmp/redis/deploy ./deploy.sh
修改Master配置文件redis.conf,注释掉包含slaveof的语句。 修改Slave配置文件redis.conf,添加slaveof masterIP port,指定主从 修改三台机器的sentinel配置文件,指定主服务器的IP和端口: sentinel monitor mymaster masterIP port 2
然后使用supervisord重新启动。
11.1.2.7 配置文件
首先,一个sentinel可以配置多个master。一个master的配置如下:
port 26379
###定义目录存放
dir "/redis"
###监控mymaster(可自定义-但只能包括A-z 0-9和”._-”),注意quorum只影响ODOWN的判断,但是不影响failover,发生failover的条件必须是半数sentinel认为老Master已经ODOWN。此参数建议设置为sentinel/2+1的数值,否则可能会产生脑裂。
sentinel monitor mymaster 192.168.145.131 6379 2
###mymaster多久不响应认为SDOWN,设置为3100也就是说3次ping失败后认为SDOWN
sentinel down-after-milliseconds mymaster 3100
###如果在该时间(ms)内未能完成failover操作,则认为该failover失败
sentinel failover-timeout mymaster 15000###在执行故障转移时, 最多可以有多少个从Redis实例在同步新的主实例, 在从Redis实例较多的情况下这个数字越小,同步的时间越长,完成故障转移所需的时间就越长
sentinel parallel-syncs mymaster 1###reconfig的时候执行的脚本(选配)
sentinel client-reconfig-script mymaster /redis/script/failover.sh###出现任何sentinel在warning事件时候执行的脚本(选配)
sentinel notification-script mymaster /redis/script/notify.sh####日志位置
logfile "/redis/log/sentinel.log"
本文为《Redis开发运维实践指南》内容,该书作者为黄鹏程,已授权云栖社区转载。