HA Cluster:
集群类型:LB(lvs/nginx(http/upstream,stream/upstream))、HA、HP
SPoF:Single Point of Failure
系统可用性的公式:A=MTBF/(MTBF+MTTR)---失效转移(fail over)
(0,1),95%
几个9(指标):99%,...,99.999%
系统故障:
硬件故障:设计缺陷、wear out、自然灾害、...
软件故障:设计缺陷、
提升系统高用性的解决方案之降低MTTR;
手段:冗余(redundant)
active/passive(主备),active/active(双主)
active-->HEARTBEAT-->passive
active<-->HEARTBEAT<-->active
高可用的是“服务”:
HA nginx service:
vip/nginx process[/shared storage]
资源:组成一个高可用服务的"组件";
(1)passive node的数量?
(2)资源切换?

现在的开源冗余解决方案:keepalived,heartbeat(基本被弃用),corosync(heartbeat代替者,并且是通用的,专业的,以后接触不会太多)
怎么实现冗余呢?在两个节点上都装上一个软件,并基于这个软件通信(传递心跳信息,并基于心跳信息判断是否故障,触发操作,完成资源转移),又叫心跳信息传递层(heartbeat layer),集群基础架构层(infrastructure layer),也叫消息传递层(messaging layer)
向上一层是资源管理层:管理资源(资源有很多种ip、应用等)又叫集群资源管理器(cluster resource manager,crm)做决策的
向上一层lrm本地资源管理器(local resource manager),用来执行
一个一个的具体实现叫做RA(resource agent)(脚本或者unitfile)
一共是4个层次

一个集群一般最少有3个节点,并且总数是奇数,一般而言
如果A不能连接B,A不能连接C,BC也不能连接A,这就表示发生了网络分区(network partition)(彼此之间访问不到了,网络之间发生分隔了),BC会重新选举(少数服从多数的原则),并且向A补刀,例如:通过交换机发信号,让A的电源闪一下,让A重启
这种发生了网络分区的方式叫隔离,这种隔离是为了避免双方争论资源
隔离有两种方式:1、stonith:一枪打在其他节点头上,需要借助其他设备来实现2、fence:让故障节点不再访问关键资源
一会A主机抢过来资源,一会B主机抢过来资源,这样并不会造成致命故障,但有时会造成致命故障,例如:A主机允许用户存放数据,但是A主机挂了,用户就访问不到数据了,所以需要共享存储,并且谁是活动节点谁挂载使用。那么A主机挂了,B主机也认为A主机挂了,B主机会把IP地址拿过了,进程启动起来,并别把共享存储挂载上,然后才能访问数据,此时A主机仍然挂载在共享存储上,如果没有卸载,共享存储中的硬盘如果是能够多线接入的设备,如果是一个块设备的话,会有严重问题,每一个块设备的数据都是被节点载入内存中访问操作的,文件系统元数据崩溃,意味着整个文件系统全部崩溃
一般块设备都是san(网络区域存储)、scsi通过光纤交换机接入进来的,可以通过专业设备(光纤交换机)屏蔽接入A节点的接口

判断节点故障的机制叫做quorum机制(quorum:法定人数)with quorum > total/2 without quorum <= total/2
选举领导有很多协议:(流言协议,听说谁当领导了,就全部同意了),还有很多可以查看两篇论文paxos(太麻烦了,作者用了十几年),raft(比较简单)

那么判定节点故障后,资源转移到哪个节点呢?一般是在节点上设置优先级,但是这样太死板了,而且会浪费资源(服务器上运行的服务应该不止一个),有一个节点是随时备用的状态,这种模型叫NM模型(N个节点M个服务),这种模型定义节点的优先级不太现实(每个资源都运行在某一个优先级高的节点,其他节点都闲置备用,浪费),所以要定义资源的倾向性
每个节点上都运行一个服务,每个服务(资源)都倾向于运行在的节点,这种模型叫N/N模型

这里注意:corosync可以高可用几乎所有服务,上边讲的两种模型就是corosync可以做到的,而keepalived主要是用来高可用ipvs的,并且添加了ipvs后端服务器的健康状态检测功能

把问题推向客户端一侧是不明智的(客户端可以通过两个路由连接互联网,其中一个路由挂了,不能让客户端自己修改网关地址)vrrp:virtual routing redundant protocol虚拟路由冗余协议,而是把两个路由器的网卡设置成一个群组,使用同一个ip地址,并且网卡也有优先级之分,把IP地址优先配置到网卡上,如果优先级相同,则选择mac地址其中一个路由挂了,客户端(网关是相同的)还可以通过另一个路由连接互联网

keepalived就是利用软件实现VRRP协议
虚拟路由器:每个路由器可能不止有一块网卡,那么可以把每个路由器的1号2号3号网卡组成3个集群(虚拟路由器),用VRID来标识
在高可用集群中,免费ARP是必须的一步:客户端缓存的是一个路由器的mac,当缓存还没失效时,ip地址转移到另一台路由器,则这台路由器必须发送免费arp,好让客户端知道ip地址已经转移,

如果有一台新的路由器(优先级特别高)装上了keepalive软件上线了,这种情况就不安全了,有可能泄露信息的。所以需要认证(VRRP有三种认证:无认证、简单字符认证(不超过8个字符)、MD5认证(keepalive不支持))

15:25min-30min没好好听