redis主从复制+sentinel集群
1.Redis主从介绍
主从服务就是用户在主服务器写入数据后,从服务器在写一份数据,一般用在如下场景:
1、辅助实现备份
2、高可用(主从复制只是redis高可用的前提)
3、异地容灾
4、分摊负载
redis主从特点介绍:
1、redis使用异步复制,从服务器会以每秒一次的频率向主服务器报告复制流的处理进度
2、一个主服务器可以有多个从服务器,从服务器也可以有自己的从服务器
3、复制功能不会阻塞主服务器,即使一个或多个从服务器正在进行初次同步,主服务器也可以继续处理命令请求
4、复制功能可以用于数据冗余,也可以通过让多个从服务器处理只读命令请求来提升扩展性
5、Redis从节点默认为只读,无须手动配置
注意事项:
看到网上很多人都说使用主从复制后可以关闭主服务器持久化操作,由从服务器执行持久化操作,这个需要分场景;比如
场景一:
一主一从环境下,主节点故障临时切换所有读写操作到从节点,但是主节点从新上线,从节点就会从新复制主节点数据,从而导致数据丢失。
场景二:
Sentinel高可用环境下,主节点故障从新上线后,会被当成从节点,而不是主节点,从而不会丢失数据。
Redis主从复制原理图说明:
1、启动一个slave以后,slave会向master发送sync请求,请求同步主库数据
2、Master会启动一个后台的子进程(BGSAVE),将数据快照保持在数据文件(.rdb)中,将数据文件发送给slave
3、Slave接收到主库的数据文件(.rdb)后保存到本地,而后把数据文件重新载入内存中,完成同步。
篇幅有限,更多内容参考:
http://redisdoc.com/topic/replication.html
2.sentinel介绍:
思考一个问题。在redis主从复制架构中,如果主服务器当机那么这个复制集群能否正常提供服务?答案当然是不能。
Sentinel就是来解决redis复制集群主节点单点问题的,作用如下:
1、监控:sentinel会不断的检查你的主服务器和从服务器是否运行正常
2、当被监控的某个redis服务器出现问题时,sentinel可以通过API向管理员或者其他应用程序发送通知
3、自动故障转移:当一个主服务器不能正常工作时,sentinel会开始一次自动故障转移操作,他会将失效主服务器的其中一个从服务器升级为新的主服务器,并让失效主机的其他从服务器改为复制新的主服务器;当客户端试图连接失效的主服务器时,集群也会向客户端返回新主服务器的地址,使得集群可以使用新主服务器代替失效服务器。
sentinel配置文件介绍:
Sentinel需要专用配置文件:/etc/redis-sentinel.conf,主要配置有以下四个
(1)指明监控的主节点(可以监控多个,一组sentinel可以监控多个主节点):
sentinel monitor <master-name> <ip> <redis-port> <quorum>
(2)判断某节点不在线需要的时长,默认单位为毫秒
sentinel down-after-milliseconds <master-name> <milliseconds>
(3)设置故障转移后,允许多少从服务器连接主节点发起同步请求
sentinel parallel-syncs <master-name> <numslaves>
(4)故障转移的超时时间(单位毫秒),如果故障转移在指定时间内无法完成,则认为故障转移失败
sentinel failover-timeout <master-name> <milliseconds>
专用命令:
SENTINEL masters 列出所有监视的主服务器
SENTINEL slaves <master name> 获取指定主服务器的所有从节点
SENTINEL get-master-addr-by-name <master name> 根据master命令来获取地址
SENTINEL reset 清除服务器所有状态
SENTINEL failover <master name> 手动执行故障转移
Redis主从+sentinel架构需要考虑的问题:
1、sentinel节点故障
2、sentinel节点无法连接到主节点
解决方法,配置sentinel高可用
更多内容参考:
http://redisdoc.com/topic/sentinel.html
3.Redis主从+sentinel配置
实验环境说明:
主机名 | Ip地址 | 功能介绍 | |
主节点 | master | 172.16.4.101 | Redis主节点,提供读写操作 |
从节点-01 | slave-01 | 172.16.4.102 | Redis从节点,复制主节点数据,提供冗余作用 |
从节点-02 | slave-02 | 172.16.4.103 | Redis从节点,复制主节点数据,提供冗余作用 |
Sentinel | sentinel | 172.16.4.104 | 监控节点,一旦发现主节点宕机,则启动从节点为主节点 |
系统环境:
1 2 3 4 |
|
软件环境:
1 |
|
架构图:
架构说明:
1、如果主节点修复在上线,就会变成从节点。
2、客户端程序连接时,应该链接sentinel节点
配置注意事项:
1、主服务器和从服务器都不能使用127.0.0.1地址,否则会复制失败。
2、从服务器监听地址需要和主服务器在同一个网段,不要使用0.0.0.0
3、时间同步,只要是集群都需要做这个
4、如果master使用requirepass开启了认证功能,从服务器要使用masteauth <PASSWORD>来连入服务器请求使用此密码进行认证。
4.Redis安装
master节点:
(1)下载redis到本地,使用yum命令安装
1 |
|
(2)修改配置文件,设置监听的端口和设置后台启动,并且开启aof持久化功能
1 2 3 |
|
(3)启动redis,并且检查是否监听了6379端口
1 2 3 |
|
4.1.slave-01节点:
配置过程和主节点一样,只不过监听的地址不同
1 2 3 4 5 |
|
4.2.slave-02节点:
配置过程和主节点一样,只不过监听的地址不同
1 2 3 4 5 |
|
5.配置主从
slave-01配置:
redis配置主从的过程非常简单,只需要一行配置指明主服务器地址和端口即可
1 2 |
|
设置完成重启服务
1 |
|
slave-02配置:
slave-02配置和slave-01一样,同样是一个配置文件指明主节点地址即可,只不过这里使用的是sed命令直接替换配置文件
1 2 |
|
查看主从复制状态:
主节点查看复制信息
1 2 3 4 5 6 7 8 9 10 11 12 |
|
从节点查看复制信息
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
验证主从复制
主节点设置一个键值对:
1 2 3 4 5 6 |
|
从节点查看已经复制过来了对应的键值对:
1 2 3 4 5 6 7 8 9 10 |
|
6.配置sentinel
Sentinel安装和其他节点一样,也只是安装一个redis包,只不过配置文件和启动文件和redis不同罢了
1 |
|
修改sentinel配置文件,指定监控的主redis服务器和其他的一些监控配置
1 2 3 4 5 |
|
设置完成,启动sentinel的专用脚本redis-sentinel,启动之后检查是否监听了26379端口
1 2 3 4 |
|
连入sentinel监听的26375端口查看sentinel的信息
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
|
7.验证sentinel故障转移是否成功
非正常关闭redis主节点,模拟主节点故障(当然直接关闭redis服务也可以)
1 2 3 4 5 6 |
|
登陆sentinel查看主节点已经变成了从slave-02
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
|
登陆slave-01查看redis主节点已经变成了slave-02
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
登陆slave-02查看自己已经变成了主节点,并且有了一个从节点
1 2 3 4 5 6 7 8 9 10 |
|
这个时候redis主从复制+sentinel集群就配置完成了,限于篇幅有限说明可能不是很清楚,有问题可以留言或者直接联系我qq
补充内容
sentinel还可以获取主节点的配置信息
1 |
|
获取指定主节点的从节点信息
1 |
|
8.参考文档:
Redis命令参考手册:http://redisdoc.com/
redis官方站点:http://www.redis.io/