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)资源切换?node
如今的开源冗余解决方案:keepalived,heartbeat(基本被弃用),corosync(heartbeat代替者,而且是通用的,专业的,之后接触不会太多)
怎么实现冗余呢?在两个节点上都装上一个软件,并基于这个软件通讯(传递心跳信息,并基于心跳信息判断是否故障,触发操做,完成资源转移),又叫心跳信息传递层(heartbeat layer),集群基础架构层(infrastructure layer),也叫消息传递层(messaging layer)
向上一层是资源管理层:管理资源(资源有不少种ip、应用等)又叫集群资源管理器(cluster resource manager,crm)作决策的
向上一层lrm本地资源管理器(local resource manager),用来执行
一个一个的具体实现叫作RA(resource agent)(脚本或者unitfile)
一共是4个层次nginx
一个集群通常最少有3个节点,而且总数是奇数,通常而言
若是A不能链接B,A不能链接C,BC也不能链接A,这就表示发生了网络分区(network partition)(彼此之间访问不到了,网络之间发生分隔了),BC会从新选举(少数服从多数的原则),而且向A补刀,例如:经过交换机发信号,让A的电源闪一下,让A重启
这种发生了网络分区的方式叫隔离,这种隔离是为了不双方争论资源
隔离有两种方式:一、stonith:一枪打在其余节点头上,须要借助其余设备来实现二、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不支持))ide
15:25min-30min没好好听设计