一、Keepalived概述及安装

主要用来提供故障切换Failover)和健康检査(Health Checking)功能--判断 LVS 负载调度器、节点服务器白用性,当 master 主机出现故障及时切换到 backup 节点保证业务正常,当 master 故障主,恢复后将其重新加入群集并且业务重新切换回master 节点。Keepalived 的官方网站位于 http://www.keepalived.org/, 下面以YUM 方式演示Keepalived 的安装、配置和使用过程。在非 LVS 群集环境中使用时,Keepalived 也可以作为热备软件使用。

1、Keepalived的热备方式

Keepalived 采用 VRRP(Virtual Router Redundancy Protocol,虚拟路由冗余协议)热备份协议,以软件的方式实现Linux服务器的多机热备功能。VRRP是针对路由器的一种备份解决方案--由多台路由器组成一个热备组,通过共用的虚拟 IP地址对外提供服务;每个热备组内同一时刻只有一台主路由器提供服务,其他路由器处于冗余状态。若当前在线的路由器失效,则其他路由器会自动接替(优先级决定接替顺序)虚拟IP地址,以继续提供服务。

热备组内的每台路由器都可能成为主路由器,虚拟路由器的IP地址(VIP)可以在热备组内的路由器之间进行转移,所以也称为漂移IP地址。使用 Keepalived 时,漂移地址的实现不需要手动建立虚接口配置文件(如 ens33:0),而是由 Keepalived 根据配置文件自动管理。

2、Keepalived 的作用及其基本工作原理

Keepalived主要用于实现高可用性(HA)解决方案,通过VRRP(Virtual Router Redundancy Protocol)协议来确保服务的不间断运行。它包括两部分:VRRP主备切换,确保只有一个“虚拟路由器”(即Master)对外提供服务;健康检查监测服务器状态,及时发现故障并进行主备切换。

3、keepalived概述及安装

1:keepalived的热备方式:

LVS+keepalived群集_IP

2:keepalived的安装与服务控制
[root@localhost ~]# systemctl stop NetworkManager
[root@localhost ~]# setenforce 0
[root@localhost ~]# systemctl stop firewalld

[root@localhost ~]# yum -y install keepalived ipvsadm
[root@localhost ~]# systemctl enable keepalived

1.2:使用keepalived实现双机热备

1:主服务器的配置
[root@localhost ~]# cd /etc/keepalived/
[root@localhost keepalived]# cp keepalived.conf keepalived.conf.bak

[root@localhost keepalived]# vi keepalived.conf
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
smtp_connect_timeout 30
  router_id LVS_01
vrrp_skip_check_adv_addr
#  vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}

vrrp_instance VI_1 {     定义VRRP热备份实例
   state MASTER          热备状态,MASTER表示主服务器
interface ens33          承载VIP地址的物理接口
virtual_router_id 1      虚拟路由器的ID号,每个热备组保持一致
priority 100             优先级,数值越大优先级越高 范围(0~255)0和255不可用
advert_int 1             通告间隔秒数
authentication {         认证信息,每个热备组保持一致
auth_type PASS           认证类型,密码认证
auth_pass 1111           密码字串 
}
virtual_ipaddress {      指定漂移地址(VIP),可以有多个
        192.168.10.172
}
}

vrrp_strict #严格执行VRRP协议规范,此模式不支持节点单播,如果配置了此参数,vip可以漂移到这台服务器,但是ping vip不通,因此需要将此参数去掉。

[root@localhost keepalived]# systemctl start keepalived
[root@localhost keepalived]# ip add show dev ens33
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:ae:7f:64 brd ff:ff:ff:ff:ff:ff
inet 192.168.10.101/24 brd 172.16.16.255 scope global ens33
valid_lft forever preferred_lft forever
inet 192.168.10.172/32 scope global ens33
valid_lft forever preferred_lft forever
2:备用服务器的配置

在同一个Keepalived 热备组内,所有服务器的 Keepalived 配置文件基本相同,包括虚拟路由器的 ID号、认证信息、漂移地址、心跳频率等。不同之处主要在于路由器名称、热备状态、优先级。

[root@localhost ~]# systemctl stop NetworkManager
[root@localhost ~]# setenforce 0
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# cd /etc/keepalived/
[root@localhost keepalived]# cp keepalived.conf keepalived.conf.bak

[root@localhost keepalived]# vi keepalived.conf
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
#vrrp_strict
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_02
}

vrrp_instance VI_1 {
    state BACKUP              热备状态,BACKUP表示备用服务器
interface ens33               优先级,数值应低于主服务器
virtual_router_id 1
priority 99
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
        192.168.10.172
}
}

路由器名称(router id):建议为每个参与热备的服务器指定不同的名称。

热备状态(state):至少应有一台主服务器,将状态设为MASTER;可以有多台备用的服务器,将状态设为 BACKUP。

优先级(priority):数值越大则取得 VIP 控制权的优先级越高,因此主服务器的优先级应设为最高;其他备用服务器的优先级可依次递减,但不要相同,以免在争夺 VIP 控制权时发生冲突。

3:使用ping命令测试虚拟ip的连通性

在测试过程中down掉master服务器的网络,观察ping的结果,如果keepalive运行正常,ping的结果不会中断。

二、LVS+Keepalived 高可用群集

Keepalived 的设计目标是构建高可用的LVS 负载均衡群集,可以调用 ipvsadm 工具来创建虚拟服务器、管理服务器池,而不仅仅用作双机热备。使用 Keepalived 构建 LVS 群集更加简便易用,主要优势体现在:对LVS负载调度器实现热备切换,提高可用性;对服务器池中的节点进行健康检查,自动移除失效节点,恢复后再重新加入

使用 Keepalived 构建 LVS 群集时,也需要用到 ipvsadm 管理工具。但大部分工作会由Keepalived 自动完成,不需要手动执行 ipvsadm(除了查看和监控群集以外)。

案例拓扑图:

LVS+keepalived群集_IP_02

一:配置主调度器

首先为主、从调度器实现热备功能,漂移地址使用LVS 群集的 VIP 地址。

1:主服务器keepalived的安装
[root@localhost ~]# systemctl stop NetworkManager
[root@localhost ~]# setenforce 0
[root@localhost ~]# systemctl stop firewalld

[root@localhost ~]# yum -y install keepalived ipvsadm
[root@localhost ~]# systemctl enable keepalived
2:主服务器keepalived的配置
[root@localhost ~]# cd /etc/keepalived/
[root@localhost keepalived]# cp keepalived.conf keepalived.conf.bak

[root@localhost keepalived]# vi keepalived.conf
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
#vrrp_strict
smtp_server 192.168.200.1
smtp_connect_timeout 30
   router_id LVS_01
}

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.10.172
}
}

virtual_server 192.168.10.172 80 {   虚拟服务器地址(VIP)、端口
delay_loop 6                         健康检查的间隔时间(秒)
lb_algo rr                           调度方法,轮询(rr)  
lb_kind DR                           直接路由(DR)群集工作模式              
# persistence_timeout 50
protocol TCP                         应用服务采用的是TCP协议

   real_server 192.168.10.103 80 {   第一个web节点的地址、端口
weight 1                             节点的权重
TCP_CHECK {                          健康检查方式
connect_port 80                      检查的目标端口
connect_timeout 3                    连接超时(秒)
nb_get_retry 3                       重试次数
delay_before_retry 3                 重试间隔(秒)
}
}
   real_server 192.168.10.104 80 {   第二个web节点的地址、端口  
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}

}

注释:persistence_timeout 50

这个参数的意义是保持客户端的请求在这个时间段内全部发到同一个真实服务器

3:主服务器内核参数的配置
[root@localhost ~]# vi /etc/sysctl.conf
在末尾添加:
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
[root@localhost ~]# sysctl -p
4:开启主服务器的keepalived服务
[root@localhost keepalived]# systemctl start keepalived
[root@localhost keepalived]# ip add show dev ens33
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:ae:7f:64 brd ff:ff:ff:ff:ff:ff
inet 192.168.10.101/24 brd 172.16.16.255 scope global ens33
valid_lft forever preferred_lft forever
inet 192.168.10.172/32 scope global ens33
valid_lft forever preferred_lft forever
二:配置从调度器

配置从服务器和主服务器方式相同,不同的是只需将优先级,路由器名称和热备状态更改即可。

三:服务器池配置

(1)web1网络的配置
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# cp ifcfg-lo ifcfg-lo:0
[root@localhost network-scripts]# vi ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.10.172
NETMASK=255.255.255.255
ONBOOT=yes

[root@localhost network-scripts]# systemctl restrt network
[root@localhost network-scripts]# vi /etc/rc.local
/sbin/route add -host 192.168.10.172dev lo:0

[root@localhost network-scripts]# route add -host 192.168.10.172dev lo:0
(2)httpd服务的安装
[root@localhost ~]# yum -y install httpd
[root@localhost ~]# vi /var/www/html/index.html
test web01
(3)内核参数的设置
[root@localhost ~]# vi /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
(4)开启httpd服务
[root@localhost ~]# systemctl start httpd
2:web2服务器配置

配置方式和web1相同只需将网页首页文件更改即可,避免重复,容易区分。

四:测试LVS+Keepalived高可用性

1:用客户端访问网站

http://192.168.10.172

刷新页面并观察网页的变化

2:在客户端使用脚本测试
[root@localhost ~]# for i in $(seq 10); do curl http://192.168.10.172;done

注意:测试计算机不要使用master调度器,在master调度器上访问VIP时,调度器不会将访问的请求调度到web服务器,而是自己尝试解析;在web服务器上测试时只能访问到自己的网页,无法实现调度。所以客户端一定要使用独立的测试计算机,或者使用处于BACKUP状态的调度器。

通过主、从调度器的/var/log/messages 日志文件,可以跟踪故障切换过程;若要查看负载分配情况,可以执行“ipvsadm -ln”“ipvsadm -lnc”等操作命令。最终可以验证LVS+Keepalived 高可用负载均衡群集的健壮性。