
Redis Sentinel是什么
Redis是一个高性能的key-value存储系统,说白了就是一种小巧而又高效的数据库。作为一种存储系统,自然应该考虑到HA(High Available),Redis的各种设计都让人觉得很简单、高效、贴心,所以贴心的Redis从2.6版本之后开始支持HA配置,并且它提供了一套易于配置又方便使用的HA系统,这就是Redis SentinelHA的实现其实主要做以下几件事:
- master将数据导出成
RDB文件(这也是持久化实现的基础) - 将文件同步给slave
- slave将文件导入系统
如果只是做系统数据备份,以上就够了,这种情况显然并不需要一个sentinel,sentinel额外的工作是在master挂了之后,从其他的机器中”投票选举”一个新的master,是的真的是民主投票选举,感兴趣的可以去官方文档看看具体的实现,sentinel要干的活:
- 实时监测系统中机器的状态
- 如果检测到master挂掉之后,选出新的master
Q:一定要选一个新的master吗?为什么?
A:slave机器正常情况下是没有写数据的权限的,当然你要是非要修改配置文件,也可以让slave拥有写数据的权限,但是这样一来很可能引起数据出错,所以默认情况下slave应该是只读权限,所以挂掉之后需要升级为master才能继续工作。(多master的配置不在讨论范围内)
用前须知
- 一个具有良好
"鲁棒性"的Redis Sentinel环境至少需要三台能互相通讯的机器 - 如果需要设置密码,多台机器必须使用相同的密码
- 任何一个HA系统都不能百分百保证数据的完整和正确性,尤其是配置好之后不好好测试就开始用的……
环境介绍
- 系统环境:CentOS 7.2
- 三台机器(IP):
- master(13.40.11.96)
- slave(13.40.11.102)
- sentinel(13.40.11.101)
- Redis版本:2.8.19
具体配置
master配置
master不需要做sentinel相关的配置,不过大多数情况下,我们都应该给系统设置一个密码,注意: 如果设置了密码,系统中每一台机器都应该设置相同的密码1
requirepass "b840fc02d524045429941cc15f59e41cb7be6c52"
slave配置
salve中做如下配置:1
2
3##slave
slaveof 13.40.11.95 6379
masterauth b840fc02d524045429941cc15f59e41cb7be6c52
sentinel配置
正确安装好redis之后/etc目录下有一个redis-sentinel.conf的文件,这是一个范例文件,里面详细的写了配置说明,我们参照它的说明手动创建一个配置文件,名字随意位置随意,你能找到在哪儿就行,这里我建立的是/etc/sentinel.conf1
2
3
4
5
6
7##sentinel
port 26379
sentinel monitor mymaster 13.40.11.95 6379 1
sentinel down-after-milliseconds mymaster 5000
sentinel auth-pass mymaster b840fc02d524045429941cc15f59e41cb7be6c52
sentinel config-epoch mymaster 2
sentinel leader-epoch mymaster 2
好了就这么简单,将master和slave上的redis服务直接重启,然后在sentinel上执行1
redis-server /etc/sentinel.conf --sentinel
测试
数据备份测试
环境搭建好了,接下来进行一波测试,在master上随便写点东西,在slave上去读取,如果你没配置错的话,一定能读取到。1
2
3
4
5##master上
SET test 123
##slave上
GET test
##返回123
模拟宕机
在master和slave的redis-cli中分别执行info replication命令可以查看到主从关系,然后将master的redis服务停止掉,sentinel会在你设置的down-after-milliseconds毫秒后检测到master失去联系,此时sentinel会将slave升级为master
是不是so easy,以上~
参考文档:
redis官方文档:redis.io/topics/sentinel