您的位置:首页 > 数据库 > Redis

redis主从复制+sentinel集群

2016-09-01 16:23 671 查看

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

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

Redis主从+sentinel配置

实验环境说明:
主机名Ip地址功能介绍
主节点master172.16.4.101Redis主节点,提供读写操作
从节点-01slave-01172.16.4.102Redis从节点,复制主节点数据,提供冗余作用
从节点-02slave-02172.16.4.103Redis从节点,复制主节点数据,提供冗余作用
Sentinelsentinel172.16.4.104监控节点,一旦发现主节点宕机,则启动从节点为主节点
系统环境:

软件环境:

架构图:

架构说明:

1、如果主节点修复在上线,就会变成从节点。

2、客户端程序连接时,应该链接sentinel节点





配置注意事项:

1、主服务器和从服务器都不能使用127.0.0.1地址,否则会复制失败。

2、从服务器监听地址需要和主服务器在同一个网段,不要使用0.0.0.0

3、时间同步,只要是集群都需要做这个

4、如果master使用requirepass开启了认证功能,从服务器要使用masteauth <PASSWORD>来连入服务器请求使用此密码进行认证。

Redis安装

master节点:
(1)下载redis到本地,使用yum命令安装

(2)修改配置文件,设置监听的端口和设置后台启动,并且开启aof持久化功能

(3)启动redis,并且检查是否监听了6379端口

slave-01节点:

配置过程和主节点一样,只不过监听的地址不同

slave-02节点:

配置过程和主节点一样,只不过监听的地址不同

配置主从

slave-01配置:
redis配置主从的过程非常简单,只需要一行配置指明主服务器地址和端口即可

设置完成重启服务

slave-02配置:
slave-02配置和slave-01一样,同样是一个配置文件指明主节点地址即可,只不过这里使用的是sed命令直接替换配置文件

查看主从复制状态:
主节点查看复制信息

从节点查看复制信息

验证主从复制
主节点设置一个键值对:

从节点查看已经复制过来了对应的键值对:

配置sentinel

Sentinel安装和其他节点一样,也只是安装一个redis包,只不过配置文件和启动文件和redis不同罢了

修改sentinel配置文件,指定监控的主redis服务器和其他的一些监控配置

设置完成,启动sentinel的专用脚本redis-sentinel,启动之后检查是否监听了26379端口

连入sentinel监听的26375端口查看sentinel的信息

验证sentinel故障转移是否成功

非正常关闭redis主节点,模拟主节点故障(当然直接关闭redis服务也可以)

登陆sentinel查看主节点已经变成了从slave-02

登陆slave-01查看redis主节点已经变成了slave-02

登陆slave-02查看自己已经变成了主节点,并且有了一个从节点

这个时候redis主从复制+sentinel集群就配置完成了,限于篇幅有限说明可能不是很清楚,有问题可以留言或者直接联系我qq
补充内容
sentinel还可以获取主节点的配置信息

获取指定主节点的从节点信息

参考文档:

Redis命令参考手册:http://redisdoc.com/
redis官方站点:http://www.redis.io/
FROM: http://www.fblinux.com/?p=157
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: