Redis-主从用服务冗余避免单点

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redis-主从用服务冗余避免单点相关的知识,希望对你有一定的参考价值。

参考技术A

在说到Redis主从同步之前先说说同步过程中会用到的Pipeline

Redis客户端与Redis服务器之间使用TCP协议进行连接,一个客户端可以通过一个socket连接发起多个请求命令。每个请求命令发出后client通常会阻塞并等待redis服务器处理,redis处理完请求命令后会将结果通过响应报文返回给client,因此当执行多条命令的时候都需要等待上一条命令执行完毕才能执行。
简单的说普通模式单线程的,而Pipelin模式是类似于并发的

一句话:pipeline是通过减少客户端与redis的通信次数来实现降低往返延时时间,而且Pipeline 实现的原理是队列,而队列的原理是时先进先出,这样就保证数据的顺序性。

Pipelin性能虽好但不使用与线上使用,因为线上的操作大都需要及时返还操作结果,但是用在主从的增量同步刚好啊!

Redis主从可以用来读写分离,Master用来处理写操作,Slave处理读操作(可能会有延迟),但毕竟是单点,万一Master宕机了怎么办?那么就有了哨兵机制的出现,通过自动完成故障发现和转移保证服务的高可用。

监控:检查主从服务器是否正常运行
* 每个哨兵节点每10秒会向主节点和从节点发送info命令获取最拓扑结构图,哨兵配置时只要配置对主节点的监控即可,通过向主节点发送info,获取从节点的信息,并当有新的从节点加入时可以马上感知到;
* 每个哨兵节点每隔2秒会向redis数据节点的指定频道上发送该哨兵节点对于主节点的判断以及当前哨兵节点的信息,同时每个哨兵节点也会订阅该频道,来了解其它哨兵节点的信息及对主节点的判断,其实就是通过消息publish和subscribe来完成的
* 每隔1秒每个哨兵会向主节点、从节点及其余哨兵节点发送一次ping命令做一次心跳检测,这个也是哨兵用来判断节点是否正常的重要依据
提醒:通过API向管理员或其他应用程序发送故障通知
自动故障迁移:主从切换
* 选出一个Slave脱离原从节点升级为主节点
* 将其他Slave指向新的主节点
* 通知客户端主节点已更换
* 将原Master变成从节点,指向新的Master

redis主从复制

redis主从复制(心跳机制)

持久化保证了即使redis服务重启也会丢失数据,因为redis服务重启后会将硬盘上持久化的数据恢复到内存中,但是当redis服务器的硬盘损坏了可能会导致数据丢失,如果通过redis的主从复制机制就可以避免这种单点故障,如下图:

 

 

 

 

 

 

说明:

1)  主redis中的数据有1个副本(replication)即从redis1,即使一台redis服务器宕机另一台redis也可以继续提供服务,如果主服务器(master)宕机,从服务器只能做查询功能,不能做新增和修改操作。

2)  主redis中的数据和从redis上的数据保持实时同步,当主redis写入数据时通过主从复制机制会复制到从redis上。

3)  只有一个主redis,可以有多个从redis。

4)  主从复制不会阻塞master,在同步数据时,master 可以继续处理client 请求

5)  一个redis可以即是主又是从

6)从服务器不间断的向主redis发送ping,主服务器如果没有宕机会回应从redis,PONG,如果从redis未收到主redis的回应,会直接作为主redis 替换掉宕机的服务器

 

主从配置:

redis:无序配置

redis

修改从redis服务器上的redis.conf文件,添加slaveof :主redis的ip+端口

 

 

如果在一台虚拟机上进行测试,一定要修改主从redis的端口,使其不一样

以上是关于Redis-主从用服务冗余避免单点的主要内容,如果未能解决你的问题,请参考以下文章

redis主从复制

架构师之路再刷一下思路记录-3

redis-主从复制(sentinel)

redis主从复制

redis主从复制

Redis主从复制(单机版,不集群)