亿级流量场景下,大型缓存架构设计实现,你知道吗?( 六 )


文章插图
slave:

亿级流量场景下,大型缓存架构设计实现,你知道吗?

文章插图
可以看到master的RDB数据已经传到了slave中; 同时我们也可以知道,如果在slave上试图添加数据,会被无情的拒绝;
----------------------------------------------------- 更新至2018.8.19 22.46 -----------------------------------------------------
对搭建的主从架构进行QPS压力测试
进入 redis 安装目录的 src目录下;
执行
redis-benchmark -h IP -c n1 -n n2 -d n3
进行测试
-c <clients> Number of parallel connections (default 50)
-n <requests> Total number of requests (default 100000)
-d <size> Data size of SET/GET value in bytes (default 2)
本人机器测试如下:
我们可以看到 在Get操作中 QPS 为 76863 相当于每秒1.7W的访问量,虚拟机的配置为1G内存单CPU,如果进行水平扩容2台,架构由一台master加三台slave,则支持7.6W*2 = 22W的QPS,当然在生产场景下,与访问的数据大小存在关系;
亿级流量场景下,大型缓存架构设计实现,你知道吗?

文章插图
redis实现99.99%高可用
------------------------------------------------------------------------------------------
----主备切换
在主从架构中slave发生问题时,如果是一台slave出现问题,不会影响整个架构的运行,因为其他的slave会顶替该宕机的slave,但是如果master出现了宕机,就没有机器继续给
slave机器复制数据,所以这时候需要采用一种机制来实现高可用性;
亿级流量场景下,大型缓存架构设计实现,你知道吗?

文章插图
如何实现缓存架构的高可用性
-----【增加哨兵 Sentinel Node】
亿级流量场景下,大型缓存架构设计实现,你知道吗?

文章插图
------------------------------------------------------------------------------------------
经典的三点哨兵集群介绍:
-----【为什么最少是3个哨兵,因为只要quorum 和 majority 都满足的情况下才可以进行故障转移】
亿级流量场景下,大型缓存架构设计实现,你知道吗?

文章插图

亿级流量场景下,大型缓存架构设计实现,你知道吗?

文章插图
如果哨兵集群中一个哨兵认为主节点宕机了,这种情况为sdowm,也就是主观宕机,此时可能存在误判,所以需要设置quorum,比如有三台机器,quorum设置
为2,则在有两台机器认为是sdown的情况下,变为odowm,也就是客观宕机,此时的判断一般是准确的 。
哨兵是redis集群架构中非常重要的一个组件,主要功能如下:
(1)集群监控,负责监控redis master和slave进程是否正常工作(2)消息通知,如果某个redis实例有故障,那么哨兵负责发送消息作为报警通知给管理员(3)故障转移,如果master node挂掉了,会自动转移到slave node上(4)配置中心,如果故障转移发生了,通知client客户端新的master地址
哨兵本身也是分布式的,作为一个哨兵集群去运行,互相协同工作
(1)故障转移时,判断一个master node是宕机了,需要大部分的哨兵都同意才行,涉及到了分布式选举的问题(2)即使部分哨兵节点挂掉了,哨兵集群还是能正常工作的,因为如果一个作为高可用机制重要组成部分的故障转移系统本身是单点的,那就很坑爹了
哨兵的核心知识 ----- 哨兵+redis部署架构
(1)哨兵至少需要3个实例,来保证自己的健壮性(2)哨兵 + redis主从的部署架构,是不会保证数据零丢失的,只能保证redis集群的高可用性(3)对于哨兵 + redis主从这种复杂的部署架构,尽量在测试环境和生产环境,都进行充足的测试和演练
亿级流量场景下,大型缓存架构设计实现,你知道吗?

文章插图
------------------------------------------------------------------------------------------
哨兵模式的虚拟机模拟配置:
首先说一下这里有个坑爹的地方就是 坑了我三天才得以解决,就是哨兵在监视master 和 slave的时候,都需要配置密码,sentinel auth-pass mymaster redis-pass 这一步我配置的过程中漏掉了,导致哨兵一直监视不了主从架构,所以在配置的过程中一定要加上;
基本配置:
亿级流量场景下,大型缓存架构设计实现,你知道吗?

文章插图
哨兵默认用26379端口,默认不能跟其他机器在指定端口连通,只能在本地访问
mkdir /etc/sentinal
mkdir -p /var/sentinal/5000
/etc/sentinal/5000.conf
在5000.conf文件中进行配置:
port 5000
bind 192.168.1.108
dir /var/sentinal/5000


推荐阅读