文章目录
一、高可用集群简介
1、什么是高可用集群
高可用集群(High Availability Cluster,简称HA Cluster)
以减少服务中断时间为目的的服务器集群技术。它通过保护用户的业务程序对外不间断提供的服务,把因软件、硬件、人为造成的故障对业务的影响降低到最小程度。
2、高可用集群的衡量标准
通常用平均无故障时间(MTTF:mean time to failure)来度量系统的可靠性,用平均故障维修时间(MTTR:mean time to restoration)来度量系统的可维护性。于是可用性被定义为:HA=MTTF/(MTTF+MTTR)*100%。
3、自动切换/故障转移(FailOver)
某一主机如果确认对方故障,则正常主机除继续进行原来的任务,还将依据各种容错备援模式接管预先设定的备援作业程序,并进行后续的程序及服务。
4、自动侦测
由主机上的软件通过冗余侦测线,经由复杂的监听程序,逻辑判断,来相互侦测对方运行的情况。
常用的方法是:集群各节点间通过心跳信息判断节点是否出现故障。
4.1、脑裂
在高可用(HA)系统中,当联系2个节点的“心跳线”断开时,本来为一整体、动作协调的HA系统,就分裂成为2个独立的个体。由于相互失去了联系,都以为是对方出了故障,两个节点争夺主导权。
脑裂产生的原因:
因心跳线坏了(包括断了,老化)
因网卡及相关驱动坏了,ip配置及冲突问题(网卡直连)
因心跳线间连接的设备故障(网卡及交换机)
因仲裁的机器出问题(采用仲裁的方案)
高可用服务器上开启了 iptables防火墙阻挡了心跳消息传输
高可用服务器上心跳网卡地址等信息配置不正确,导致发送心跳失败
其他服务配置不当等原因,如心跳方式不同,心跳广插冲突、软件Bug等
常见的解决方案:
1)添加冗余的心跳线
2)启用磁盘锁
3)设置仲裁机制
4)裂脑的监控报警
二、keepalived详解
1、keepalived是什么
keepalived是集群管理中保证集群高可用的一个服务软件,用来防止单点故障。
2、keepalived工作原理
keepalived是以VRRP协议为实现基础的,VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议。
将N台提供相同功能的服务器组成一个服务器组,这个组里面有一个master和多个backup,master上面有一个对外提供服务的vip(该服务器所在局域网内其他机器的默认路由为该vip)。master会发组播,当backup收不到vrrp包时就认为master宕机,这时就需要根据VRRP的优先级来选举一个backup当master。
3、keepalived主要模块
core、check和vrrp
core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析
check负责健康检查,包括常见的各种检查方式
vrrp模块是来实现VRRP协议的
三、keepalived+lvs集群部署
1、环境
ip role
192.168.116.131 client
192.168.116.132 master
192.168.116.133 backup
192.168.116.134 web1
192.168.116.135 web2
2、Web服务器端
添加虚拟IP
# cp /etc/sysconfig/network-scripts/ifcfg-lo /etc/sysconfig/network-scripts/ifcfg-lo:0
# vim /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.116.200
NETMASK=255.255.255.255
ONBOOT=yes
添加主机路由
# vim /etc/rc.local
/sbin/route add -host 192.168.116.200 dev lo:0
配置ARP参数
# vim /etc/sysctl.conf
net.ipv4.conf.all.arp_ignore=1
net.ipv4.conf.all.arp_announce=2
net.ipv4.conf.lo.arp_ignore=1
net.ipv4.conf.lo.arp_announce=2
net.ipv4.conf.default.arp_ignore=1
net.ipv4.conf.default.arp_announce=2
重启
# reboot
3、Master端
# yum -y install keepalived.x86_64 ipvsadm
----------------------------------------------------------------------------------
# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id 1
}
vrrp_instance VI_1 {
state MASTER
interface ens32
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1
}
virtual_ipaddress {
192.168.116.200 dev ens32 # 虚拟IP 服务接口
}
}
virtual_server 192.168.116.200 80 { # 虚拟服务
delay_loop 3 # 轮询延迟
lb_algo rr # 调度算法 rr
lb_kind DR # 集群类型 DR
protocol TCP # 协议类型
real_server 192.168.116.134 80 { # 真实服务器
weight 1 # 权重
TCP_CHECK { # 健康检查
connect_timeout 3
}
}
real_server 192.168.116.135 80 {
weight 1
TCP_CHECK {
connect_timeout 3
}
}
}
----------------------------------------------------------------------------------
# systemctl start keepalived.service
4、Backup端
# yum -y install keepalived.x86_64 ipvsadm
----------------------------------------------------------------------------------
# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id 2
}
vrrp_instance VI_1 {
state BACKUP
interface ens32
virtual_router_id 51
priority 99
advert_int 1
authentication {
auth_type PASS
auth_pass 1
}
virtual_ipaddress {
192.168.116.200 dev ens32
}
}
virtual_server 192.168.116.200 80 {
delay_loop 3
lb_algo rr
lb_kind DR
protocol TCP
real_server 192.168.116.134 80 {
weight 1
TCP_CHECK {
connect_timeout 3
}
}
real_server 192.168.116.135 80 {
weight 1
TCP_CHECK {
connect_timeout 3
}
}
}
----------------------------------------------------------------------------------
# systemctl start keepalived.service
5、Client端
# curl 192.168.116.200
222
# curl 192.168.116.200
111
# curl 192.168.116.200
222
# curl 192.168.116.200
111