目录
本次实验目的:实现高可用负载均衡
负载均衡:LVS、Nginx、HAProxy、F5
健康检查(探针):for调度器/节点服务器、Keepalived、Heartboat
故障转移:通过VIP漂移实现主备切换
发送心跳消息(ping/pang)
TCP端口检查:向目标主机的IP:PORT发起TCP连接请求,如果TCP连接三次握手成功则认为健康检查探测成功,否则认为健康检查探测失败
HTTP URL检查:向目标主机的http://IP:PORT/URL路径发送HTTP GET请求方法,如果响应消息为2XX、3XX状态码则认为健康检查探测成功,如果响应消息为4XX、5XX状态码则认为健康检查探测失败
避免单台服务器应用故障,发生单点故障,企业服务将造成中断
是专为LVS和HA设计的健康检查工具,实现高可用的应用程序
支持故障自动切换 (Failover)
支持节点健康状态检查(Health Checking)
判断LVS负载调度器、节点服务器的可用性,当master主机出现故障及时切换到backup节点保证业务正常,当master故障主机恢复后将其重新加入群集并目业务重新切换回master节点。
在LVS服务集群中,通常有主服务器(MSTER) 和备份服务器 (BACKUP)两种角色的服务器,但是对外表现为一个成虚拟IP(VIP),主服务器会发送VRRP通告信息给备份服务器,当备份服务器收不到VRRP消息的时候,即主服务器异常的时候,备份服务器就会接管虚拟IP,继续提供服务,从而保证了高可用性.
Keepalived采用VRRP热备份协议实现Linux服务器的多机热备功能
VRRP(虚拟路由元余协议):是针对路由器的一种备份解决方案
由多台路由器组成一个热备组,通过共用的虚拟IP地址对外提供服务
每个热备组内同时只有一台主路由器提供服务,其他路由器处于冗余状态
若当前在线的路由器失效,则其他路由器会根据设置的优先级自动接替虚拟IP地址,继续提供服务
双机热备的故障切换是由虚拟IP地址的漂移来实现,适用于各种应用服务器
core模块:为keepalived的核心,负责主进程的启动、维护及全局配置文件的加载和解析
vrrp模块:是来实现VRRP协议的(调度器之间的健康检查和主备切换)
check模块:负责健康检查,常见的方式有端口检查及URL检查(节点服务器的健康检查)
抢占模式即MASTER从故障中恢复后,会将VIP从BACKUP节点中抢占过来
非抢占模式即MASTER恢复后不抢占BACKUP升级为MASTER后的VIP
非抢占式俩节点state必须为bakcup,且必须配置nopreempt
注意:这样配置后,我们要注意启动服务的顺序,优先启动的获取master权限,与优先级没有关系了
问题案例:
Keepalived通过什么判断哪台主机为主服务器,通过什么方式配置浮动IP?
Keepalived首先做初始化先检查state状态,master为主服务器,backup为备服务器
然后再对比所有服务器的priority,谁的优先级高谁是最终的主服务器
优先级高的服务器会通过ip命今为自己的电脑配置一个提前定义好的浮动IP地址。
现象:主服务器和备服务器同时拥有VIP地址
原因:因为主服务器和备服务器之间的通信链路中断,导致备服务器无法收到主服务器发送的VRRP通告消息,备服务器误认为主服务器故障,并通过IP命令生成VIP地址
解决方式:关闭主或备服务器其中一个keepalived服务
预防操作:
将主和备服务器中做双链路通信
在主服务器上添加脚本进行判断与备服务器通信链路是否中断,如果确实是链路中断则自行关闭keepalived服务
利用第三方应用或监控系统,检测是否发生脑裂故障,如果发生脑裂故障则通过第三方应用或监控系统来关闭主服务器或备服务器上的keepalived服务
主服务器(MASTER):192.168.233.129
yum install -y keepalived.x86_64
#yum安装keepalived服务
cd /etc/keepalived
#跳转至软件目录
ls
keepalived.conf
#查看文件内配置文件是否存在
cp keepalived.conf{,.bak}
#将keepalived配置文件备份
vim keepalived.conf
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 127.0.0.1
#转发邮箱地址修改成本机
smtp_connect_timeout 30
router_id LVS_MASTER
#将路由名称改为MASTER
#此行一下四行不需要,可以删除
}
vrrp_instance VI_1 {
state MASTER
interface ens33
#将网卡名改为本机使用的网卡
virtual_router_id 51
priority 100
#表示优先级,主服务器可以不用修改
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.233.200
#只修改并留下一个虚拟IP
}
}
#本实验环境中,文件以下的配置都不使用,可以直接删除
systemctl start keepalived.service
#启动服务
systemctl enable keepalived.service
#将服务设置为开机自启
ip add
#查看网卡信息
#因为keepalived服务使用ip命令生成VIP地址,所以ifconfig命令查询不到
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:a6:29:36 brd ff:ff:ff:ff:ff:ff
inet 192.168.233.129/24 brd 192.168.233.255 scope global noprefixroute ens33
valid_lft forever preferred_lft forever
inet 192.168.233.200/32 scope global ens33
#在此行可以查看到VIP地址信息
valid_lft forever preferred_lft forever
inet6 fe80::2323:6947:90:68be/64 scope link noprefixroute
valid_lft forever preferred_lft forever
3: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
link/ether 52:54:00:b3:6c:22 brd ff:ff:ff:ff:ff:ff
inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
valid_lft forever preferred_lft forever
4: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN group default qlen 1000
link/ether 52:54:00:b3:6c:22 brd ff:ff:ff:ff:ff:ff
备服务器:192.168.233.130
yum install -y keepailved.x86_64
#安装keepalived服务
cd /etc/keepalived/
#进入软件的配置目录
ls
keepalived.conf
#查看文件内配置文件是否存在
cp keepalived.conf{,.bak}
#将keepalived配置文件备份
vim keepalived.conf
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 127.0.0.1
#转发邮箱地址修改成本机
smtp_connect_timeout 30
router_id LVS_BACKUP
#将路由名称改为BACKUP
#此行一下四行不需要,可以删除
}
vrrp_instance VI_1 {
state BACKUP
#将本机名称统一为BACKUP
interface ens33
#将网卡名改为本机使用的网卡
virtual_router_id 51
priority 90
#表示优先级,备服务器的优先级需比主服务器低
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.233.200
#只修改并留下一个虚拟IP
}
}
#本实验环境中,文件以下的配置都不使用,可以直接删除
systemctl start keepalived.service
#启动服务
systemctl enable keepalived.service
#将服务设置为开机自启
ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:b1:1f:e1 brd ff:ff:ff:ff:ff:ff
inet 192.168.233.130/24 brd 192.168.233.255 scope global noprefixroute ens33
valid_lft forever preferred_lft forever
inet6 fe80::e27:d3ef:b941:cf95/64 scope link noprefixroute
valid_lft forever preferred_lft forever
#在主服务器运行正常的情况下,备服务器查看不到VIP地址信息
3: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
link/ether 52:54:00:b4:24:5b brd ff:ff:ff:ff:ff:ff
inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
valid_lft forever preferred_lft forever
4: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN group default qlen 1000
link/ether 52:54:00:b4:24:5b brd ff:ff:ff:ff:ff:ff
在主服务器中关闭keepalived服务
systemctl stop keepalived
然后在备服务器中查看网卡信息
ip add
#查看到VIP地址表示正常
inet 192.168.233.200/32 scope global ens33
实验至此初步成功