通过 LVS 实现服务高可用

在以前的一篇文章《Nginx + Keepalived 实现服务高可用》中,简单介绍了通过 Keepalived 配置来实现服务的高可用,这一篇来简单写写通过 LVS 来实现服务的 HA(高可用性”(High Availability)通常来描述一个系统经过专门的设计,从而减少停工时间,而保持其服务的高度可用性)。

1 LVS 介绍

LVS 是 Linux Virtual Server 的简称,官网对 LVS 的描述如下:

The Linux Virtual Server is a highly scalable and highly available server built on a cluster of real servers, with the load balancer running on the Linux operating system. The architecture of the server cluster is fully transparent to end users, and the users interact as if it were a single high-performance virtual server.

Linux 虚拟服务器是在真实服务器集群上构建的一个高度可扩展且高度可用的服务器,负载均衡运行在 Linux 操作系统。 服务器集群的架构对终端用户完全透明,并且用户在与其交互过程中,就像是与一台高性能虚拟服务器一样进行交互。 

实际上,它是通过欺骗 IP 来实现高可用。

2 LVS 部署准备

部署部署准备工作基本可以总结为:三台机器四件事。

2.1 准备三台机器

一台转发服务器:也可称为代理服务器,或者是前端服务器。

两台真实服务器:也可称为应用服务器,或者是后端服务器。

机器配置如下:

系统版本:CentOS release 6.9 (Final)  2.6.32-696.el6.x86_64

机器 IP:192.168.220.79(转发服务器)、192.168.220.71(真实服务器1)、192.168.220.72(真实服务器2)

虚拟 IP:192.168.220.80

2.2 实施四个步骤

2.2.1 转发服务器绑定 VIP

首先给转发服务器 79 机器绑定一个 VIP 地址,也就是定好的虚拟 IP 地址。

查看现有 ip 信息:

ifconfig

绑定新的网络接口,对外提供通信:

ifconfig eth0:1 192.168.220.80/24

绑定后,再次查看 ip 信息,则如下:

2.2.2 真实服务器修改内核参数

修改真实服务器的系统响应级别和通告级别对应的内核参数,默认内核参数值是 0,这里以操作 71 机器为例。

LVS DR 模型中 VIP 的 MAC 广播问题:

在 DR 模型中,由于每个节点均要配置 VIP,因此存在 VIP 的 MAC 广播问题,在现在的 linux 内核中,都提供了相应 kernel 参数对 MAC 广播进行管理,具体如下:

arp_ignore: 定义接收到 ARP 请求时的响应级别。
    0:只要本地配置的有相应地址,就给予响应; 
    1:仅在请求的目标地址配置在到达的接口上的时候,才给予响应;DR模型使用
arp_announce:定义将自己地址向外通告时的通告级别。
    0:将本地任何接口上的任何地址向外通告; 
    1:试图仅向目标网络通告与其网络匹配的地址; 
    2:仅向与本地接口上地址匹配的网络进行通告;DR模型使用

查看响应级别:

more /proc/sys/net/ipv4/conf/eth0/arp_ignore

more /proc/sys/net/ipv4/conf/all/arp_ignore

修改响应级别值为 1:

echo "1" >/proc/sys/net/ipv4/conf/eth0/arp_ignore

echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore


查看通告级别:

more /proc/sys/net/ipv4/conf/eth0/arp_announce

more /proc/sys/net/ipv4/conf/all/arp_announce

修改通告级别值为 2:

echo "2" >/proc/sys/net/ipv4/conf/eth0/arp_announce

echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce

注意:72 机器上也按照上面步骤操作即可。

2.2.3 真实服务器绑定 VIP

修改真实服务器的 IP 配置,绑定虚拟 IP,这里以操作 71 机器为例。

ifconfig lo:1 192.168.220.80 netmask 255.255.255.255 broadcast 192.168.220.80

修改后查看 IP 信息如下:

注意:72 机器上也按照上面步骤操作即可。

2.2.4 真实服务器添加路由

在真实服务器上添加路由到网关 lo:1上,这里以操作 71 机器为例。

查看路由信息:

route

添加路由信息:

route add -host 192.168.220.80 dev lo:1

再次查看路由信息:

注意:72 机器上也按照上面步骤操作即可。

===============================华丽的分割线===============================

到此,搭建 LVS 的准备工作已经做好。

3 LVS 搭建配置

3.1 转发服务器安装 ipvs 和 ipvsadm

LVS 工作在 ISO 模型中的第四层,由于其工作在第四层,因此与 iptables 类似,必须工作在内核空间上。因此 lvs 与 iptables 一样,是直接工作在内核中的,叫 ipvs。主流的 linux 发行版默认都已经集成了 ipvs,因此用户只需安装一个管理工具ipvsadm即可。

查看内核是否已经集成 ipvs:

grep -i "ip_vs" /boot/config-2.6.32-358.18.1.el6.x86_64

查询 ipvs 结果如下:

在转发服务器 79 上,安装 ipvsadm 软件。

yum install ipvsadm

3.2 真实服务器安装 tomcat

在真实服务器上安装 tomcat,用来模拟应用,安装过程省略,这里我分别在 71 和 72 上安装了 tomcat6、tomcat7 和 tomcat8,端口分别为 6060、7070 和 8080。

安装后启动 tomcat 应用,并直接通过真实服务器访问测试。

注意:71 机器和 72 机器上 tomcat 首页可以做个区分,便于测试。

3.3 转发服务器配置高可用

指定转发服务器的接受数据的接口,在转发服务器 79 上做如下操作。

配置 tomcat6 高可用:

ipvsadm -A -t 192.168.220.80:6060 -s wlc

ipvsadm -a -t 192.168.220.80:6060 -r 192.168.220.71 -g -w 1

ipvsadm -a -t 192.168.220.80:6060 -r 192.168.220.72 -g -w 1

配置 tomcat7 高可用:

ipvsadm -A -t 192.168.220.80:7070 -s wlc

ipvsadm -a -t 192.168.220.80:7070 -r 192.168.220.71 -g -w 1

ipvsadm -a -t 192.168.220.80:7070 -r 192.168.220.72 -g -w 1

配置 tomcat8 高可用:

ipvsadm -A -t 192.168.220.80:8080 -s wlc

ipvsadm -a -t 192.168.220.80:8080 -r 192.168.220.71 -g -w 1

ipvsadm -a -t 192.168.220.80:8080 -r 192.168.220.72 -g -w 1

查看高可用配置:

ipvsadm -L

ipvsadm -Ln

4 LVS 高可用测试

在 3.2 中可以看到,直接通过真实服务器访问 tomcat 服务都没有问题,那么通过 3.3 的配置后,是否可以通过访问 VIP 来达到 tomcat 服务高可用呢?

通过上面的测试,可以看到通过访问虚拟 IP,也是可以直接访问到真实服务器上的 tomcat。

===============================再次华丽的分割===============================

把 71 机器上所有的 tomcat 服务进程杀掉,再次通过 VIP 测试。

可以看到可以自动访问到 72 机器上的 tomcat 应用。

到此,LVS 搭建成功,HA 配置也基本通过。

注意:LVS 本身没有集群的健康检查,还是需要依赖 keepalived 做 HA,比如代理服务器 79 挂掉的情况咋办,后续有空再写。

posted @ 2020-10-28 22:51  孟郎郎  阅读(380)  评论(0编辑  收藏  举报