LVS+keepalived

2**、Keepalived****双机热备**

Keepalived 是专门针对LVS 设计的一款强大的辅助工具,主要用来提供故障切换和健检查功能,如判断LVS 负载调度器、节点服务器的可用性,及时隔离并替换为新的服务器,当故障主机恢复后将其重新加入群集。在非LVS 群集环境中使用时Keepalived 也可以作为热备软件使用。

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

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

案例:负载均衡+ 高可用群集 (LVS-DR+HA) :拓扑图如下所示

上图设计目的是用Keepalived 构建高可用性的LVS 负载均衡群集。使用Keepalived 构建LVS 群集更加简便易用,主要优势体现在:对LVS 负载调度器实现热备切换,提高可用性,对WEB 服务器池中的节点进行分健康检查,自动移除失败节点,恢复后再重新加入。

在基于LVS-Keepalived 实现的LVS 群集结构中,至少包括两台热备的负载调度器,两台以上的节点服务器,本例将以DR 模式的LVS 群集为基础,增加一台从负载调度器,使用Keepalived 来实现主、从调度器的热备,从而构建建有负载均衡、高可用两种能力的LVS 网站群集平台。

实验环境:参照上图可知每台主机网卡的IP 地址,如下所示:共7 台主机

VIP (虚拟IP 地址):172.16.16.172/24

主调度器:eth0172.16.16.173/24eth1:192.168.7.173/24

从调度器:eth0172.16.16.174/24eth1:192.168.7.174/24

WEB 节点1 :172.16.16.177/24eth1:192.168.7.177/24

WEB 节点2 :172.16.16.178/24eth1:192.168.7.178/24

NFS 共享存储:eth0192.168.7.250/24

具体操作步骤如下:

1**、LVS+keepalived****高可用群集---**调度器组中的主、从调度器配置(主/从),即构建高可用的LVS负载均衡群集

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

基于 LVS+keepalived 实现的LVS 群集中,至少包括两台热备的负载调度器,两台以上的节点服务器。本案例以DR 模式的LVS 模式群集为基础。

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

查看主调度器网卡接口IP 地址:

1 )主服务器的配置:

安装keepalived 软件包与服务控制

在编译安装Keepalived 之前,必须先安装内核开发包kernel-devel 以及openssl-devel 、popt-devel 等支持库,除此之外,在LVS 群集环境中应用时,也需要用到ipvsadm 管理工具。

编译安装Keepalived

使用指定的linux 内核位置对keepalived 进行配置,并将安装路径指定为根目录,这样就无需额外创建链接文件了,配置完成后,依次执行make 、make install 进行安装。

使用keepalived 服务

执行make install 操作之后,会自动生成/etc/init.d/keepalived 脚本文件,但还需要手动添加为系统服务,这样就可以使用service 、chkconfig 工具来对keepalived 服务程序进行管理了。

主服务器的配置

Keepalived 服务的配置目录位于/etc/keepalived 。其中keepalived.conf 是主配置文件,另外包括一个子目录samples/ ,提供了许多配置样列作为参考。在keepalived 的配置文件中,使用”global_defs {……}” 区段指定全局参数。使用”vrrp_instance 实例名称 {……}” 区段指定VRRP 热备参数,注释文字以”!” 符号开头。

相关配置及主要配置项解释如下:

! Configuration File for keepalived#! 表示注释

global_defs {

notification_email {

root@example.com # 接收警报的 email  地址, 可以添加多个

}

notification_email_from root@localhost 

smtp_server 127.0.0.1# 使用本机转发 email

smtp_connect_timeout 30

router_id LVS_DEVEL #load balancer  的标识 ID, 即本服务器的名称标识

}

vrrp_instance VI_1 {# 定义VRRP 热备实例

state MASTER# 热备状态,MASTER 表示主服务器;SLAVE 表示备用服务器;当有多台备用的服务器,热备状态改为 BACKUP, 此状态是由 priority  的值来决定的, 当前priority  的值小于备机的值, 那么将会失去 MASTER  状态

interface eth0#HA  监测网络接口即承载VIP 地址的物理接口

virtual_router_id 50# 虚拟路由器的ID 号。主、备机的 virtual_router_id  必须相同

priority 150# 主机的优先级, 数值越大优先能越高。备份机改为 50

advert_int 1# 主备之间的通告间隔秒数(心跳频率)

authentication {# 认证信息,每个热备组保持一致

auth_type PASS# 认证类型,主备切换时的验证

auth_pass 1111# 密码字串

}

virtual_ipaddress {# 指定漂移地址(VIP ),可以有多个

172.16.16.172#HA  虚拟 ip, 可加多个

}

}

virtual_server 172.16.16.172 80 {# 虚拟服务器地址(VIP )、端口

delay_loop 6# 健康检查的间隔时间(秒),每隔 6  秒查询 realserver 状态

lb_algo rr#lvs  调度算法, 这里使用轮询

lb_kind DR#lvs  负载均衡机制, 这里使用直连路由

!persistence_timeout 50 # 同一 IP  的连接 50  秒内被分配到同一台 realserver

protocol TCP# 用 TCP  协议检查 realserver  状态

real_server 172.16.16.177 80 {# 第一个WEB 节点的地址、端口

weight 1# 节点的权重

TCP_CHECK {# 健康检查方式

connect_port 80# 检查的目标端口

connect_timeout 3# 故障重试秒数(即连接超时)

nb_get_retry 3# 重试延迟(即重试次数)

delay_before_retry 3# 重试间隔(秒)

}

}

real_server 172.16.16.178 80 {# 第二个WEB 节点的地址、端口

weight 1

TCP_CHECK {

connect_port 80

connect_timeout 3

nb_get_retry 3

delay_before_retry 3

}

}

}

配置主调度器:修改keepalived.conf 文件中的全局参数、热备参数、WEB 服务器池配置,相关配置参数如下图:

2 )配置从调度器:

从调度器的配置与主调度器基本相同,也包括全局参数、热备参数、服务器池配置,只需要调整router_id 、state 、prority 参数即可,其余内容完全相同,配置完成以后重启keepalived 服务。

安装keepalived 软件包与服务控制

在编译安装Keepalived 之前,必须先安装内核开发包kernel-devel 以及openssl-devel 、popt-devel 等支持库,除此之外,在LVS 群集环境中应用时,也需要用到ipvsadm 管理工具。

编译安装Keepalived

使用指定的linux 内核位置对keepalived 进行配置,并将安装路径指定为根目录,这样就无需额外创建链接文件了,配置完成后,依次执行make 、make install 进行安装。

使用keepalived 服务

执行make install 操作之后,会自动生成/etc/init.d/keepalived 脚本文件,但还需要手动添加为系统服务,这样就可以使用service 、chkconfig 工具来对keepalived 服务程序进行管理了。

162137437.png

重新启动keepalived 服务

在同一个keepalived 热备组内,所有服务器的keepalived 配置文件基本相同。不同之处主要在于服务器的名称标识、热备状态、优先级。

服务器的名称标识(router_id ):建议为每个参与热备的服务器指定不同的名称

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

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

3 )测试主、从调度器:

若防火墙不关闭的话可以在input 链上建规则.

iptables -I INPUT -p ip -d 224.0.0.18 -j ACCEPT

注: VRRP 协议的通告报文使用固定的组播地址 224.0.0.18 ,用 IP  报文作为传输协议进行协议报文的传送。

当启动keepalived 服务后,实际状态为MASTER 的主服务器取得VIP 控制权,并将eth0 接口自动添加VIP 地址,通过ip 命令可以查看(注意:ifconfig 命令看不到)

查看主服器的eth0 接口信息:

从调度器服务器上启动keepalived 服务,此时主服务器仍然在线,VIP 地址实际上仍然由主服务器控制,其他服务器处于备用状态,因此在备用服务器中将不会为eth0 接口添加VIP 地址。

此时查看从服务器的eth0 接口信息:

Keepalived 的日志消息保存在/var/log/messages 文件中,在测试主、从故障自动切换功能时,可以跟踪此日志文件来观察热备状态的变化。以连通性测为例

在internet 的测试机上执行ping172.16.16.172�t ,(172.16.16.172 为VIP 地址),能够正常ping 通,说明主服务器以接管VIP 地址,并及时响应客户机的请求。

禁用主服务器的eth0 网卡,发现ping 测试会中断3 ~4 个包即恢复正常,说明已有其他服务器接替VIP 地址,并及时响应客户机的请求。

重新启用主服务器的eth0 网卡,发现ping 测试再次中断3 ~4 个包即恢复正常,说明主服务器已恢复正常,并夺回VIP 地址的控制权。

在这述过程中可以查看日志记录来了解MASTER 、SLAVE 状态的迁移记录。

2**、LVS+HA ----配置负载调度器(ipvsadm)**

要在主、从负载调度器主机上分别配置负载调度器,加载ip_vs 模块, 安装ipvsadm 软件包. 这里使用的是LVS-DR 模式,需要调整/proc 系统的内核响应参数。

详细配置参考我在前面介绍的LVS-DR 的有关设置。

3 、在共享存储设备主机上配置共享存储服务(这里使用NFS发布共享服务),具体操作如下:

修改/etc/exports 文件,内容如下:

/opt/wwwroot192.168.7.0/24(rw,sync,no_root_squash)

允许192.168.7.0/24 网段的主机访问NFS 的共享。

参考LVS+NAT 方式的虚拟服务器中有关NFS 的防火墙设置或将NFS 服务器的防火墙规则清除。

4 、LVS+HA ---配置服务器池中的WEB节点服务器(172.16.16.177 和172.16.16.178)

根据所选择的群集工作模式不同(DR 或NAT ),节点服务器的配置也有些差异。以DR 模式为例。除了需要调整/proc 系统的ARP 响应参数以外,还需要为虚拟接口lo:0 配置VIP 地址。具体参考前面有关LVS-DR 的配置。所以WEB 节点的配置和LVS-DR 配置是一样的。

使用DR 模式时,节点服务器也需要配置VIP 地址,并调整内核的ARP 响应参数以阻止更新VIP 的MAC 地址,避免发生冲突。

1) 调整/proc 响应参数

注:上图中参数的含义:

**net.ipv4.conf.default.arp_ignore = 1 net.ipv4.conf.all.arp_ignore = 1 **

net.ipv4.conf.lo.arp_ignore = 1 arp_ignore: 定义了网卡在响应外部 ARP 请求时候的响应级别 0 :默认值,不管哪块网卡接收到了 ARP 请求,只要发现本机有这个 MAC 都给与响应 1 :总是使用最合适的网卡来响应,一个主机有多块网卡,其中一块网卡接收到了 ARP 请求,发现所请求的 MAC 是本机另一块网卡的,这个时候接收到 ARP 请求的这块网卡就一定不响应,只有发现请求的 MAC 是自己的才给与响应 。

net.ipv4.conf.default.arp_announce = 0 net.ipv4.conf.all.arp_announce = 0

net.ipv4.conf.lo.arp_announce = 0

定义了网卡在向外宣告自己的 MAC-IP 时候的限制级别

有三个值: 0 :默认值,不管哪块网卡接收到了 ARP 请求,只要发现本机有这个 MAC 都给与响应 1 :尽量避免响应 ARP 请求中 MAC 不是本网卡的,一个主机有多块网卡,其中一块网卡接收到了 ARP 请求,发现所请求的 MAC 是本机另一块网卡的,这个时候接收到 ARP 请求的这块网卡就尽量避免响应 2 :总是使用最合适的网卡来响应,一个主机有多块网卡,其中一块网卡接收到了 ARP 请求,发现所请求的 MAC 是本机另一块网卡的,这个时候接收到 ARP 请求的这块网卡就一定不响应,只有发现请求的 MAC 是自己的才给与响应 。

执行sysctl-p 使修改生效

2) 配置虚拟IP 地址(VIP )----- 节点服务器1 的配置

在每个节点服务器,同样需要具有VIP 地址172.16.16.172 ,但此地址仅用作发送WEB 响应数据包的源地址,并不需要监听客户机的访问请求(改由调度器监听并分发)。因此使用虚拟接口lo:0 来承载VIP 地址,并为本机添加一条路由记录,将访问VIP 的数据限制在本地以避免通信紊乱。

添加VIP 本地访问路由:

route add -host 172.16.16.172 dev lo:0(可加可不加)

3) 安装httpd ,创建测试页(略,采用和NAT 模式一样设置),启用httpd 服务程序

安装httpd 软件包,创建测试网页

其他服务器节点做相同的备配,不再重复叙述。

5 、安排多台测试机,从internet 中直接访问http://172.16.16.172 ,将能够看到由真实服务器提供的网页内容

在LVS 负载调度器中,通过查看节点状态可以观察当前的负载分配情况,对于轮询算法来说,每个节点所获得的连接负载应大致相当

至此有关LVS+keepalived 群集配置完毕,这样即实现了lvs 负载平衡又实现了调度器的热备。

代码交流 2021