目录
一、高可用集群简介
1、什么是高可用集群
高可用集群(High Availability Cluster,简称HA Cluster),是指以减少服务中断时间为目的的服务器集群技术。它通过保护用户的业务程序对外不间断提供的服务,把因软件、硬件、人为造成的故障对业务的影响降低到最小程度。
2、高可用集群衡量标准
通常用平均无故障时间(MTTF:mean time tofailure)来度量系统的可靠性,用平均故障维修时间(MTTR: meantime to restoration)来度量系统的可维护性。于是可用性被定义为: HA=MTTF/(MTTF+MTTR)*100%。
· 具体HA衡量标准:
描述 | 通俗叫法 | 可用性级别 | 年度停机时间 |
---|---|---|---|
基本可用性 | 2个9 | 99% | 87.66小时 |
较高可用性 | 3个9 | 99.9% | 8.8小时 |
具有故障自动恢复能力的可用性 | 4个9 | 99.99% | 53分钟 |
极高可用性 | 5个9 | 99.999% | 5分钟 |
3、自动切换/故障转移(failovwe)
自动切换阶段某一主机如果确认对方故障,则正常主机除继续进行原来的任务,还将依据各种容错备援模式接管预先设定的备援作业程序,并进行后续的程序服务。
通俗地说,即当A无法为客户服务时,系统能够自动地切换,使B能够及时地顶上继续为客户提供服务,且客户感觉不到这个为他提供服务的对象已经更换。
通过上面判断节点故障后,将高可用集群资源(如VIP、httpd等)从该不具备法定票数的集群节点转移到故障转移域(Failover Domain,可以接收故障资源转移的节点)。
4、自动侦测:
自动侦测阶段由主机上的软件通过冗余侦测线,经由复杂的监听程序,逻辑判断,来相互侦测对方运行的情况。
常用的方法是:集群各节点间通过心跳信息判断节点是否出现故障。
(1)脑裂:
· 脑裂简介:
在高可用(HA)系统中,当联系2个节点的“心跳线"断开时,本来为一整体、动作协调的HA系统,就分裂成为2个独立的个体。由于相互失去了联系,都以为是对方出了故障。两个节点上的HA软件像“裂脑人"一样,争抢“共享资源"、争起用服务",就会发生严重后果——或者共享资源被瓜分、2边"服务"都起不来了;或者2边“服务"都起来了,但同时读写"共享存储",导致数据损坏(常见如数据轮询着的联机日志出错)。
· 脑裂产生的原因:
· 常见的解决方案:
1)添加冗余的心跳线
例如:双线条线(心跳线也HA),尽量减少“裂脑"发生几率;
2)启用磁盘锁
正在服务一方锁住共享磁盘,“裂脑"发生时,让对方完全“抢不走"共享磁盘资源。但使用锁磁盘也会有一个不小的问题,如果占用共享盘的一方不主动"解锁",另一方就永远得不到共享磁盘。现实中假如服务节点突然死机或崩溃,就不可能执行解锁命令。后备节点也就接管不了共享资源和应用服务。于是有人在HA中设计了“智能"锁。即:正在服务的一方只在发现心跳线全部断开(察觉不到对端)时才启用磁盘锁。平时就不上锁了。
3)设置仲裁机制
例如设置参考IP(如网关IP或某一个服务器),当心跳线完全断开时,2个节点都各自ping一下参考IP,不通则表明断点就出在本端。不仅“心跳"、还兼对外“服务"的本端网络链路断了,即使启动(或继续)应用服务也没有用了,那就主动放弃竞争,让能够ping通参考IP的一端去起服务。更保险一些,ping不通参考IP的一方干脆就自我重启,以彻底释放有可能还占用着的那些共享资源:
4)裂脑的监控报警
5、其他高可用方案:heartbeat、pacemaker、piranha (web页面)
二、Keepalived
1、什么是keepalived
· keepalived是集群管理中保证集群高可用的一个服务软件,用来防止单点故障。
2、Keepalived的工作原理
· keepalived是以VRRP协议为实现基础的,VRRP全称Virtual Router RedundancyProtocol,即虚拟路由冗余协议。
将N台提供相同功能的服务器组成一个服务器组,这个组里面有一个master和多个backup,master上面有一个对外提供服务的vip(该服务器所在局域网内其他机器的默认路由为该vip) , master会发组播,当backup收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master
· 组播:lPV4总共三种通信方式:单播,组播,广播。组播是指以224.0.0.0地址作为通信地址的一种方式。
3、Vrrp协议(略)
4、Keepalived的主要三个模块
分别是core、check和vrrp。
· core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析。
· check负责健康检查,包括常见的各种检查方式。
· vrrp模块是来实现VRRP协议的。
三、实战案例1:
1、准备环境:
Server1: 192.168.100.131
Server2: 192.168.100.133
VIP: 192.168..100.140
2、操作步骤:
·sever1:
(1)在server1上安装keepalived:
(2)编辑keepalived的配置文件:清空配置文件里面的所有内容:
(注意:“! Configuration File for keepalived”是keepalived的文档说明,一定要在第一行 )
(红框表示与主服务器不同的配置)
(3)启动keepalived.service:
(4)安装nginx:
(5)修改一下nginx网页中的内容,等下方便识别:
(6)启动nginx、keepalived:
(7)真机访问192.168.100.131:
· server2:
(1)在server2上安装keepalived:
(2)编辑keepalived的配置文件:清空配置文件里面的所有内容:
(3)安装nginx:
(4)修改一下nginx网页中的内容,等下方便识别:
(5)启动nginx:
(6)访问:
(7)启动keepalived:
(8)测试:访问VIP:
断开主服务器的网络连接之后访问:
3、关于keepalived对nginx状态未知的问题
·Keepalived是个网络层面的协议问题,它只关心这台机器的IP在不在,但是如果这台机器的服务停了keepalived是无感知的
4、解决方案:使keepalived与某个程序产生关联(这里以nginx为例)
(1)添加nginx监控脚本:
给权限
这个脚本每个服务器都要做
所以我们给另外一个服务器传过去:
也给权限:
(2)编辑配置文件:
· 注意刚才我们的配置文件注释的地方:现在我们把注释给取消掉:
呃…:下图的global{}配置中应该是“router_id”,少写了一个r
“chk_nginx”对应上面的策略名(vrrp_script chk_nginx)
(Sever2的的配置文件也要记得取消注释哦~)
(3)测试:
1)把sever1的nginx停掉:
2)重启keepalived:
3)查看nginx状态:
· 可以使用crontab制定周期任务定期去执行这个脚本。当然也可以用zabbix进行监控。
四、实战案例2:
· LVS+keepalived集群:
1、准备环境:
192.168.100.131 DR1 负载均衡器 master
192.168.110.134 DR2 负载均衡器 backup
192.168.100.135 rs1 web1
192.168.100.136 rs2 web2
2、在master上安装配置keepalived:
提示:ipvsadm不用启动
3、在master上修改配置文件:(老规矩,先删除文件里面的内容):
4、在backup上安装keepalived:
5、拷贝master上的keepalived.conf到backup上:
6、拷贝后,修改配置文件:
需要修改的有:
(1)router_id Director 2
(2)State BACKUP
(3)Priority 120
7、启动master和backup的keepalived服务:
8、重启这两塔机器:reboot
9、web服务器配置(两台web服务器配置相同)
(1)安装apache:
(2)启动Apache:
查看端口:
(3)配置虚拟IP:
(4)重启网卡:
(5)配置路由:
(6)配置ARP:
(7)重启机器:reboot
(8)查看master:
10、测试:
访问192.168.100.150:
如果19.168.100.131断开连接,192.168.100.134马上就会政变: