一、高可用集群:
1、简介:
高可用集群(High Availability Cluster,简称 HA Cluster),是一组相互连接的计算机或服务器,它通过保护用户的业务程序对外不间断提供的服务,把因软件、硬件、人为造成的故障对业务的影响降低到最小程度。
MTTF:mean time to failure 平均无故障时间,度量系统的可靠性;
MTTR:mean time to restoration 平均故障维修时间,度量系统的可维护性;HA=MTTF / (MTTF+MTTR)*100%
2、自动切换 (Failover):
自动切换是指当主要系统发生故障或不可用时,自动切换到备用或冗余系统的过程,帮助在面对意外中断时保持运营。
3、自动侦测:
(1) 概念:
自动侦测是指在计算机集群或分布式系统中使用的一种机制,允许系统自动检测和识别集群中的节点或成员。
(2) 心跳线:
自动侦测的 "心跳线"(Heartbeat Line)是指在集群中使用的一种监控和检测机制。它涉及到周期性发送心跳消息或信号,以表示设备、节点或进程的活跃状态和可用性。
接收方节点会定期监测心跳信息,并检查发送方节点是否活动。如果接收方节点在一定时间内未收到心跳信息,它可能会假定发送方节点已经失败,并采取相应措施。
(3) 分裂脑:
在高可用集群中,当联系2个节点的"心跳线"断开时,本来为一个整体、动作协调的 HA 系统失去通信,分裂成为2个独立的个体,每个个体都认为是对方出现了故障,都在独自操作。
二、keepalived
1、概念:
Keepalived 是实现高可用性(High Availability)的开源软件,用于管理负载均衡和故障切换。它的主要工作是确保在出现故障的情况下,能够快速地切换到备用系统,以确保连续可用性。
2、工作原理:
Keepalived 使用虚拟路由冗余协议(Virtual Router Redundancy Protocol,VRRP)来协调主备切换。VRRP 允许多个服务器一起工作,但只有一个服务器被选为主服务器,其余服务器处于备用状态。主服务器接收 VIP,而备用服务器等待切换。
3、keepalived 三个主要模块:
● Core 模块:Core 模块是 Keepalived 的核心组件,负责主进程的启动、维护以及全局配置文件的加载和解析;
● Check 模块:Check 模块是用于健康检查的组件,它负责监测服务器的可用性;
● VRRP 模块:VRRP 模块用于实现 VRRP 协议。
4、keepalived 示例:
(1) 环境:
server1:192.168.198.130(VIP:192.168.198.140)
server2:192.168.198.131(VIP:192.168.198.140)
(2) 配置:
配置 server1:
① 编辑 keepalived 配置文件:
yum install -y keepalived
vim /etc/keepalived/keepalived.conf
bash
!Configuration File for keepalived
global_defs {
router_id 1
}
#vrrp_script ck_apache {
# script "/etc/keepalived/ck_apache.sh"
# interval 2
# weight -5
# fall 3
#}
vrrp_instance VI_1 {
state MASTER
interface ens33
mcast_src_ip 192.168.198.130
virtual_router_id 55
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 123456
}
virtual_ipaddress {
192.168.198.140/24
}
# track_script {
# ck_apache
# }
}
● !Configuration File for keepalived:注释行,指示这是 Keepalived 的配置文件
● global_defs { router_id 1 }
定义全局参数 ;router_id 1:设备在 keepalived 组中的标识编号(实例路由编号)
● vrrp_instance VI_1 :设置虚拟路由器组名 (VI_1)
● state MASTER:设置主从状态
● interface ens33:设置监控网卡
● mcast_src_ip 192.168.198.130:心跳源 ip,用来标识 VRRP 协议消息的来源
● virtual_router_id 55:虚拟路由器编号55(130、131共同维护的虚拟设备名为VI_1,编号为55)
● priority 100:设置服务器优先级(0-255)
● advert_int 1:心跳间隔,表示 VRRP 实例每隔 1 秒发送一次消息,以通知其他路由器它的状态
配置身份验证参数,集群中的成员使用密码进行身份验证
配置虚拟 ip:192.168.198.140
② 拷贝配置文件到 131
scp -r /etc/keepalived/keepalived.conf 192.168.198.131:/etc/keepalived/
(131 需要先安装 keepalived)
③ 启动 keepalived
systemctl start keepalived
systemctl enable keepalived
④ 配置 apache:
yum install -y httpd
echo bean1 > /var/www/html/index.html
systemctl restart httpd
配置 server2:
① 修改 keepalived 配置文件:
router_id 2
state BACKUP
mcast_src_ip 192.168.198.131
priority 99
② 配置 apache:
echo bean2 > /var/www/html/index.html
systemctl restart httpd
(3) 客户机测试:
客户机访问虚拟 ip(192.168.198.140)
断开主服务器的网卡连接,再访问:
(4) keepalived 应对 apache 状态变更:
当 apache 状态为关闭时,客户机访问虚拟 ip 不会跳转到备用机。
① 编辑 apache 状态监控脚本(130):
vim /etc/keepalived/ck_apache.sh
bash
#!/bin/bash
counter=$(ps -C httpd --no-heading|wc -l)
if [ "${counter}" = "0" ]; then
#尝试启动apache,停止5秒后再次检测
systemctl start httpd
sleep 5
counter=$(ps -C httpd --no-heading|wc -l)
if [ "${counter}" = "0" ];
then
#如果启动没成功,就杀掉keepalive触发主备切换
systemctl stop keepalived
fi
fi
添加脚本权限:chmod +x /etc/keepalived/ck_apache.sh
130 将脚本拷给 131,在 131 下给脚本授权:
scp /etc/keepalived/ck_apache.sh 192.168.198.131:/etc/keepalived/
② 在 keepalived 配置文件中启动监控脚本:
监控的脚本名:
启动脚本:每隔两秒钟执行脚本,如果重复三次后 apache 依然无法启动,本机权重减五
③ 查看脚本执行效果:
systemctl restart keepalived
停止 apache 后,查看状态:
5、keepalived + lvs
(1) 环境:
负载均衡器(主):192.168.198.130(VIP:192.168.198.140)
负载均衡器(备):192.168.198.131(VIP:192.168.198.140)
web 服务器1:192.168.198.132
web 服务器2:192.168.198.133
(2) 主负载均衡器配置(130):
yum install -y keepalived ipvsadm
修改 keepalived 配置文件:
bash
!Configuration File for keepalived
global_defs {
router_id Director1
}
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 51
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 123456
}
virtual_ipaddress {
192.168.198.140/24 dev ens33
}
}
virtual_server 192.168.198.140 80 {
lb_algo rr
lb_kind DR
protocol TCP
real_server 192.168.198.132 80 {
weight 1
TCP_CHECK {
connect_timeout 3
}
}
real_server 192.168.198.133 80 {
weight 1
TCP_CHECK {
connect_timeout 3
}
}
}
LVS 配置:
● virtual_server 192.168.198.140 80
负载均衡器监听的 ip 地址和端口
● lb_algo rr ;lb_kind DR ;protocol TCP
调度算法为 rr ;集群模式为 DR ;协议为 tcp
● real_server 192.168.198.133 80 { weight 1
定义真实服务器的 ip 地址、端口和权重比例
● TCP_CHECK { connect_timeout 3 }
指定了连接超时时间为3秒,用于检查真实服务器健康状态的设置。
(3) 备用负载均衡器配置(131):
yum install -y keepalived ipvsadm
● 将主负载均衡器的配置文件拷到备用负载上:
scp 192.168.198.130:/etc/keepalived/keepalived.conf /etc/keepalived/
● 修改配置文件:
router_id Director2
state BACKUP
priority 100
● 启动 master 和 backup 的服务:
systemctl start keepalived
systemctl enable keepailved
reboot
(4) web 配置(132、133):
yum install -y httpd
systemctl start httpd
systemctl enable httpd
① 配置虚拟 ip:
cp /etc/sysconfig/network-scripts/{ifcfg-lo,ifcfg-lo:0}
vim /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo
IPADDR=192.168.198.140
NETMASK=255.255.255.255
ONBOOT=yes
② 配置路由:
添加路由条目,192.168.198.140 这个 ip 只能通过 lo:0 口进行服务
/sbin/route add -host 192.168.198.140 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.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
④ 重启 web:reboot
(5) 测试:
① 在 master 上查看路由条目和虚拟 ip:
② 客户机访问:
master1 关闭 keepalived 后,客户机访问:
web1 关闭站点服务后,客户机访问: