redis如何实现高可用【主从复制、哨兵机制】

实现redis高可用机制的一些方法:redis

保证redis高可用机制须要redis主从复制、redis持久化机制、哨兵机制、keepalived等的支持。算法

主从复制的做用:数据备份、读写分离、分布式集群、实现高可用、宕机容错机制等。sql

redis主从复制原理数据库

首先主从复制须要分为两个角色:master(主) 和 slave(从) ,注意:redis里面只支持一个主,不像Mysql、Nginx主从复制能够多主多从。缓存

一、redis的复制功能是支持多个数据库之间的数据同步。一类是主数据库(master)一类是从数据库(slave),主数据库能够进行读写操做,当发生写操做的时候自动将数据同步到从数据库,而从数据库通常是只读的,并接收主数据库同步过来的数据,一个主数据库能够有多个从数据库,而一个从数据库只能有一个主数据库。服务器

二、经过redis的复制功能能够很好的实现数据库的读写分离,提升服务器的负载能力。主数据库主要进行写操做,而从数据库负责读操做。架构

主从复制全量同步的过程:见下图分布式

 

Redis主从复制能够根据是不是全量分为全量同步和增量同步设计

Redis全量复制通常发生在Slave初始化阶段,这时Slave须要将Master上的全部数据都复制一份。3d

全量同步过程:

1:当一个从数据库启动时,会向主数据库发送sync命令,

2:主数据库接收到sync命令后会开始在后台保存快照(执行rdb操做),并用缓存区记录后续的全部写操做

3:当主服务器快照保存完成后,redis会将快照文件发送给从数据库。

4:从数据库收到快照文件后,会丢弃全部旧数据,载入收到的快照。

5:   主服务器快照发送完毕后开始向从服务器发送缓冲区中的写命令。

6:   从服务器完成对快照的载入,开始接收命令请求,并执行来自主服务器缓冲区的写命令。

 

增量同步的过程:

Redis增量复制是指slave初始化后开始正常工做时主服务器发生的写操做同步到从服务器的过程。 

增量复制的过程主要是主服务器每执行一个写命令就会向从服务器发送相同的写命令,从服务器接收并执行收到的写命令。

 

Redis主从复制全量与增量同步的选择:

主从服务器刚刚链接的时候,会先进行全量同步;全同步结束后,再进行增量同步。固然,若是有须要,slave 在任什么时候候均可以发起全量同步。redis 策略是,不管如何,首先会尝试进行增量同步,如不成功,要求从机进行全量同步。

 

redis主从复制如何配置呢?

修改从服务器redis/conf中的redis.conf文件

修改IP地址和端口号为主服务器的IP和端口
slaveof 10.211.55.9 6379

masterauth 123456--- 若是主redis服务器配置了密码,则须要配置
只须要配置从服务器的redis.conf便可,主服务器无需配置。验证是否成功能够经过一、先登陆主服务器redis-cli客户端,输入info。若role显示master、slave0能正常显示从服务器的ip,则表示主从服务配置成功,主从复制配置成功了,也同时实现了读写分离,不信?你看看试试看你的从服务器还能不能写入操做了?答案是:不能。从服务器只有读操做!

 

Redis哨兵机制

哨兵机制须要主从复制的支持。

Redis的哨兵(sentinel) 系统用于管理多个 Redis 服务器,该系统执行如下三个任务:

·        监控(Monitoring): 哨兵(sentinel) 会不断地检查你的Master和Slave是否运做正常。

·        提醒(Notification):当被监控的某个Redis出现问题时, 哨兵(sentinel) 能够经过 API 向管理员或者其余应用程序发送通知。

·        自动故障迁移(Automatic failover):当一个Master不能正常工做时,哨兵(sentinel) 会开始一次自动故障迁移操做,它会将失效Master的其中一个Slave升级为新的Master, 并让失效Master的其余Slave改成复制新的Master; 当客户端试图链接失效的Master时,集群也会向客户端返回新Master的地址,使得集群可使用Master代替失效Master。

哨兵(sentinel) 是一个分布式系统,你能够在一个架构中运行多个哨兵(sentinel) 进程,这些进程使用流言协议(gossipprotocols)来接收关于Master是否下线的信息,并使用投票协议(agreement protocols)来决定是否执行自动故障迁移,以及选择哪一个Slave做为新的Master.

每一个哨兵(sentinel) 会向其它哨兵(sentinel)、master、slave定时发送消息,以确认对方是否”活”着,若是发现对方在指定时间(可配置)内未回应,则暂时认为对方已挂(所谓的”主观认为宕机” Subjective Down,简称sdown).

若“哨兵群”中的多数sentinel,都报告某一master没响应,系统才认为该master"完全死亡"(即:客观上的真正down机,Objective Down,简称odown),经过必定的vote算法,从剩下的slave节点中,选一台提高为master,而后自动修改相关配置.

虽然哨兵(sentinel) 释出为一个单独的可执行文件 redis-sentinel ,但实际上它只是一个运行在特殊模式下的 Redis 服务器,你能够在启动一个普通 Redis 服务器时经过给定 --sentinel 选项来启动哨兵(sentinel).

哨兵(sentinel) 的一些设计思路和zookeeper很是相似

单个哨兵(sentinel)

 

 

 

哨兵模式如何配置?

注意:哨兵机制是redis自带的功能,不须要接入第三方实现

实现步骤:                                                               哨兵机制端口号默认为26379

配置以前注意防火墙是否关闭

1.修改sentinel.conf配置文件(该文件存在于redis安装包根目录下)

注意:初次配置,不须要打开#sentinel monitor mymaster注释,由于后几行有默认当台服务器为主服务器

原配置:sentinel monitor mymaster 127.0.0.1 6379 2 经过这句来修改成:

sentinel monitor mymaster  10.211.55.3  6379  1   #主服务器名称 IP 端口号 选举次数(redis集群服务器很少时能够配置成1)

2.修改下一行:sentinel auth-pass mymaster 123456 # 第一个参数mymaster为主节点名称,123456为主服务器密码。

3. 修改心跳检测 5000毫秒【默认为30秒】

sentinel down-after-milliseconds mymaster 5000

4.sentinel parallel-syncs mymaster 2 --- 指定了在执行故障转移时,最多能够有多少个从Redis实例在同步新的主实例,在从Redis实例较多的状况下这个数字越小,同步的时间越长,完成故障转移所需的时间就越长

5. 启动哨兵模式【cd到redis安装根目录下启动,由于须要运行redis-server】

./redis-server sentinel.conf --sentinel &

启动后若是打印+ monitor master 主节点名 ip     和    +slave slave  ip则表示启动成功

 

6.能够经过模拟——主服务器进入redis-cli,输入shutdown,观察哨兵所在服务器日志打印。原从服务器本不能写操做,后因为哨兵自动故障迁移把某一个slave服务器升级为master服务器,则该升级后的服务器又能够进行写操做。

 

 

光靠redis主从复制和哨兵机制不足以实现redis高可用。为何呢?

由于若某一节点宕机后,不会实现自动重启。最稳健实现高可用的作法 :

redis主从复制+哨兵机制(监控、提醒、自动故障迁移)+keepalived(自动重启),若重启屡次仍不成功,能够经过邮件短信等方式通知。

相关文章
相关标签/搜索