高可用HA(HighAvailability)是分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计减少系统不能提供服务的时间。
假设系统一直能够提供服务,我们说系统的可用性是%。如果系统每运行个时间单位,会有1个时间单位无法提供服务,我们说系统的可用性是99%。很多公司的高可用目标是4个9,也就是99.99%,这就意味着,系统的年停机时间为8.76个小时。
那么如何保证系统的高可用呢
首先,在整个架构的每个节点中,不允许存在单点问题,因为单点一定是高可用最大的风险点,我们应该在系统设计过程中去避免单点问题。
在实现方法上,一般采用的就是集群部署、或者冗余部署来实现。这样的设计使得如果某个节点出现故障,其他的节点还可以继续使用。
Rdis中高可用设计的必要性
Rdis作为一个高性能Nosq中间件,会有很多热点数据存放在Rdis中,一旦Rdis-srvr出现故障,会导致所有相关业务访问都出现问题。另外,即便是设计了数据库兜底的方案,大量请求对数据库的访问也很容易导致数据库出现瓶颈,造成更大的灾难。
除此之外,Rdis的集群部署还可以带来额外的收益:
负载(性能),Rdis本身的QPS已经很高了,但是如果在一些并发量非常高的情况下,性能还是会受到影响。这个时候我们希望有更多的Rdis服务来完成工作扩容(水平扩展),第二个是出于存储的考虑。因为Rdis所有的数据都放在内存中,如果数据量大,很容易受到硬件的限制。升级硬件收效和成本比太低,所以我们需要有一种横向扩展的方法
在Rdis中,提供了高可用方案包含以下几种:
主从复制(用来实现读写分离)哨兵机制(实现mastr选举)集群机制(实现数据的分片)
Rdis的Mastr-Slav方法
主从复制模式,简单来说就是把一台Rdis服务器的数据,复制到其他Rdis服务器中。其中负责复制数据的来源称为mastr,被动接收数据并同步的节点称为slav,数据的复制是单向的,如图5-1所示,对于主从模式,其实有很多的变体。
在很多组件中都有使用这种思想,比如mysql的主从复制、dis的主从复制、activmq的主从复制、kafka里面的数据副本机制等等,所以大家需要举一反三,融会贯通。
文章配图图5-1
主从复制的好处
数据冗余,主从复制实现了数据的热备,是除了持久化机制之外的另外一种数据冗余方式。读写分离,使数据库能支撑更大的并发。在报表中尤其重要。由于部分报表sql语句非常的慢,导致锁表,影响前台服务。如果前台使用mastr,报表使用slav,那么报表sql将不会造成前台锁,保证了前台速度。负载均衡,在主从复制的基础上,配合读写分离机制,可以由主节点提供写服务,从节点提供服务。在读多写少的场景中,可以增加从节点来分担dis-srvr读操作的负载能力,从而大大提高dis-srvr的并发量保证高可用,作为后备数据库,如果主节点出现故障后,可以切换到从节点继续工作,保证dis-srvr的高可用。
Rdis如何配置主从复制
需要注意,Rdis的主从复制,是直接在从节点发起就行,主节点不需要做任何事情
在Rdis中有三种方式来开启主从复制。
在从服务器的dis.conf配置文件中加入下面这个配置
plicaofmastripmastrport
通过启动命令来配置,也就是启动slav节点时执行如下命令
./dis-srvr../dis.conf--plicaofmastripmastrport
启动dis-srvr之后,直接在客户端窗口执行下面命令
displicaofmastripmastrport
准备三台虚拟机
准备好三台虚拟机,并且这三台虚拟机需要能相互ping通,以及相互能够访问这个端口,如果访问不了,需要关闭防火墙。
fiwall-cmd--zon=public--add-port=/tcp--prmannt
...(mastr)...(slav)...(slav)
这三台机器上都需要安装dis-srvr,安装步骤如下。
注意事项,Rdis6安装需要gcc版本大于5.3以上,否则安装会报错。
#升级到gcc9.3:yum-yinstallcntos-las-sclyum-yinstalldvtoolst-9-gccdvtoolst-9-gcc-c++dvtoolst-9-binutilssclnabldvtoolst-9bash#需要注意的是scl命令启用只是临时的,退出shll或重启就会恢复原系统gcc版本。#如果要长期使用gcc9.3的话:cho-"\nsourc/opt/rh/dvtoolst-9/nabl"/tc/profil
开始安装
cd/usr/local/wgt