LVS-DR+HA——keepalived负载均衡+HA高可用群集

Lvs-keepalive负载均衡

LVS简介:

LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一。

LVS特点:

  • 需要一个前端的负载调度器(或者多个进行主从备份)。

  • 通过网络地址转换(Network Address Translation)将一组服务器构成一个高性能的、高可用的虚拟服务器,我们称之为VS/NAT技术(Virtual Server via Network Address Translation)。

  • 在分析VS/NAT的缺点和网络服务的非对称性的基础上,我们提出了通过IP隧道实现虚拟服务器的方法VS/TUN (Virtual Server via IP Tunneling),

  • 通过直接路由实现虚拟服务器的方法VS/DR(Virtual Server via Direct Routing),它们可以极大地提高系统的伸缩性。

  • VS/NAT、VS/TUN和VS/DR技术是LVS集群中实现的三种IP负载均衡技术。

  • LVS集群采用IP负载均衡技术和基于内容请求分发技术

LVS集群采用三层结构:

  • 负载调度器(load balancer),它是整个集群对外面的前端机,负责将客户的请求发送到一组服务器上执行,而客户认为服务是来自一个IP地址(我们可称之为虚拟IP地址)上的。

  • 服务器池(server pool),是一组真正执行客户请求的服务器,执行的服务有WEB、MAIL、FTP和DNS等。

  • 共享存储(shared storage),它为服务器池提供一个共享的存储区,这样很容易使得服务器池拥有相同的内容,提供相同的服务。

LVS的优点

开源,免费;在网上能找到一些相关技术资源;具有软件负载均衡的一些优点;

LVS的缺点

最核心的就是没有可靠的支持服务,没有人对其结果负责; 功能比较简单,支持复杂应用的负载均衡能力较差,如算法较少等;开启隧道方式需重编译内核;配置复杂;主要应用于LINUX,目前没有专门用于WINDOWS的版本,不过可以通过配置,使windows成为LVS集群中的real server(win2003、win2008中)。

Keepalived双机热备:

Keepalived的作用是检测web服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的web服务器从系统中剔除,当web服务器工作正常后Keepalived自动将web服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的web服务器。

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

高可用web架构: LVS+keepalived+nginx+apache+php+eaccelerator(+nfs可选 可不选)

在非LVS群集环境中使用时Keepalived也可以作为热备软件使用。

Keepalived工作原理:

采用VRRP(虚拟路由冗余协议)热备份协议,以软件的方式实现linux服务器的多机热备功能。

VRRP是针对路由器的一种备份解决方案——由多台路由器组成一个热备组。通过共用的虚拟IP地址对外提供服务;

每个热备组内同一时刻只有一台主服务器提供服务,其他服务器处于冗余状态,若当前在线的服务器失败,其他服务器会自动接替(优先级决定接替顺序)虚拟IP地址,以继续提供服务。

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

LVS-DR+HA——keepalived负载均衡+HA高可用群集

LVS-DR+HA—keepalived负载均衡+HA高可用群集_lvs-keepalived高可用群集

Keepalived构建高可用性的LVS负载均衡群集。

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

实验拓扑如下:

LVS-DR+HA—keepalived负载均衡+HA高可用群集_Keepalived_02

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

实验环境:

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

主调度器:eth0192.168.10.1/24eth1:172.16.16.1/24

从调度器:eth0192.168.10.2/24eth1:172.16.16.2/24

WEB节点1192.168.10.3/24eth1:172.16.16.3/24

WEB节点2192.168.10.4/24eth1:172.16.16.4/24

NFS共享存储:eth0 192.168.10.5/24

操作步骤:

一:LVS+keepalived高可用群集:

构建高可用的LVS负载均衡群集,主、从调度器配置(DR模式的LVS模式群集):

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

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

使用Keepalived构建LVS群集时,也需要用到ipvsadm管理工具,但大部分工作会由Keepalived自动完成,不需要手动:

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

LVS-DR+HA—keepalived负载均衡+HA高可用群集_Keepalived_03

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

LVS-DR+HA—keepalived负载均衡+HA高可用群集_Keepalived_04

1.主调度服务器的配置

a.安装keepalived软件包与服务控制

在编译安装Keepalived之前,必须先安装内核开发包kernel-devel以及openssl-develpopt-devel等支持库;

LVS群集环境中应用时,也需要用到ipvsadm管理工具。

yum -y install kernel-developenssl-develpopt-devel

LVS-DR+HA—keepalived负载均衡+HA高可用群集_LVS HA_05

b.安装ipvsadm软件包:

LVS-DR+HA—keepalived负载均衡+HA高可用群集_lvs-keepalived高可用群集_06

c.编译安装Keepalived:

  • 使用指定的linux内核位置对keepalived进行配置,并将安装路径指定为根目录(无需创建链接文件);

  • 执行makemake install进行安装:

./configure --prefix=/ --with-kernel-dir=/usr/src/kernels/2.6.32-71.el6.i686/

LVS-DR+HA—keepalived负载均衡+HA高可用群集_Keepalived_07

d.使用keepalived服务:

  • 查看/etc/init.d/keepalived脚本文件;

  • 将其添加为系统服务以便日后管理:

LVS-DR+HA—keepalived负载均衡+HA高可用群集_LVS DR_08

e.主调度服务器的配置:

  • Keepalived服务的配置目录:/etc/keepalived

  • 主配置文件:keepalived.conf

  • 子目录:samples/    ##提供了许多配置样列作为参考

keepalived配置文件中:

  • global_defs {……}”区段用来指定全局参数。

  • “vrrp_instance实例名称 {……}”区段指定VRRP热备参数,注释文字以“!”符号开头。

主要配置项注解:

! Configuration File for keepalived#!表示注释

global_defs {

    notification_email {                   ### 接收报警的 email 地址,可以添加多个

    acassen@firewall.loc

        failover@firewall.loc

        sysadmin@firewall.loc

    }

        notification_email_fromroot@localhost

        smtp_server 127.0.0.1                        ###使用本机转发 email

        smtp_connect_timeout 30

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

    }

vrrp_instanceVI_1 {            ###定义VRRP热备实例

state MASTER###热备状态MASTER表示主服务器

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

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

priority  100                ###主机的优先级,数值越大优先能越高。

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  15                                                ###健康检查的间隔时间(秒),每隔 15 秒查询realserver状态

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

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

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

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

 

        real_server 172.16.16.3 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.4 80 {            ###第二个WEB节点的地址、端口

        weight 1

        TCP_CHECK {

            connect_port 80

            connect_timeout 3

            nb_get_retry 3

            delay_before_retry 3

        }

    }

 }

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

LVS-DR+HA—keepalived负载均衡+HA高可用群集_LVS HA_09

LVS-DR+HA—keepalived负载均衡+HA高可用群集_LVS DR_10

f.重新启动keepalived服务:

LVS-DR+HA—keepalived负载均衡+HA高可用群集_linux负载均衡_11

2.从调度器的配置(与主调度器基本相同

只需要调整router_idstateprority参数即可,配置完成以后需要重启keepalived服务。

在编译安装Keepalived之前,必须先安装内核开发包kernel-devel以及openssl-develpopt-devel等支持库;

LVS群集环境中应用时,也需要用到ipvsadm管理工具。

LVS-DR+HA—keepalived负载均衡+HA高可用群集_linux负载均衡_12

安装ipvsadm软件包:

LVS-DR+HA—keepalived负载均衡+HA高可用群集_LVS HA_13

编译安装Keepalived:

  • 使用指定的linux内核位置对keepalived进行配置,并将安装路径指定为根目录(无需创建链接文件);

  • 执行makemake install进行安装:

LVS-DR+HA—keepalived负载均衡+HA高可用群集_linux负载均衡_14

使用keepalived服务:

  • 查看/etc/init.d/keepalived脚本文件;

  • 将其添加为系统服务以便日后管理:

LVS-DR+HA—keepalived负载均衡+HA高可用群集_LVS HA_15

配置从调度器:修改keepalived.conf文件,只修改有红色注解的那几项,其他参数和主调度器的配置文件完全一样(看注解提示)。

LVS-DR+HA—keepalived负载均衡+HA高可用群集_linux负载均衡_16

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

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

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

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

重启keepalived服务:

LVS-DR+HA—keepalived负载均衡+HA高可用群集_Keepalived_17

3. 测试主、从调度器:

若防火墙不关闭的话可以在input链上建规则!VRRP协议的通告报文使用固定的组播地址224.0.0.18,用IP 报文作为传输协议进行协议报文的传送。

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

LVS-DR+HA—keepalived负载均衡+HA高可用群集_Keepalived_18

LVS-DR+HA—keepalived负载均衡+HA高可用群集_linux负载均衡_19

当启动keepalived服务后,实际状态为MASTER的主服务器取得VIP控制权,并为eth1接口自动添加VIP地址,通过ip命令可以查看。

查看主服器eth1接口信息(ifconfig命令看不到):

LVS-DR+HA—keepalived负载均衡+HA高可用群集_linux负载均衡_20

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

查看从服务器的eth1接口信息:

LVS-DR+HA—keepalived负载均衡+HA高可用群集_lvs-keepalived高可用群集_21

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

这里以测试连通性为例:

在Windows PC机上执行ping172.16.16.172  -t 命令,能够正常ping通,说明主服务器以接管VIP地址,并及时响应客户机的请求(172.16.16.172为VIP虚拟地址)。

这里我们模拟物理断开主调度器eth1网卡,然后验证:

LVS-DR+HA—keepalived负载均衡+HA高可用群集_linux负载均衡_22

 

中间会有断包现象,是因为从调度器取代主调度器,此时查看主从调度器的接口信息:

LVS-DR+HA—keepalived负载均衡+HA高可用群集_lvs-keepalived高可用群集_23

LVS-DR+HA—keepalived负载均衡+HA高可用群集_linux负载均衡_24

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

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

LVS-DR+HA—keepalived负载均衡+HA高可用群集_lvs-keepalived高可用群集_25

主调度器eth1网卡恢复正常后,再次查看两台调度器状态,会发现调度转发恢复正常(也可以从日志文件中查看MASTERSLAVE状态的迁移记录):

LVS-DR+HA—keepalived负载均衡+HA高可用群集_LVS HA_26

LVS-DR+HA—keepalived负载均衡+HA高可用群集_linux负载均衡_27

 

二:LVS+HA —— 配置负载调度器(ipvsadm)[LVS-DR为例]:

在主、从负载调度器主机上分别配置负载调度器,加载ip_vs模块,安装ipvsadm软件包;

LVS-DR模式为例,所以需要调整/proc系统的内核响应参数。

sysctl.conf添加如下内容:

net.ipv4.conf.all.send_redirects = 0

net.ipv4.conf.default.send_redirects = 0

net.ipv4.conf.eth0.send_redirects = 0

net.ipv4.conf.eth1.send_redirects = 0

LVS-DR+HA—keepalived负载均衡+HA高可用群集_linux负载均衡_28

LVS-DR+HA—keepalived负载均衡+HA高可用群集_linux负载均衡_29

 

三:在共享存储设备主机上配置共享存储服务(NFS发布共享服务为例):

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

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

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

LVS-DR+HA—keepalived负载均衡+HA高可用群集_lvs-keepalived高可用群集_30

LVS-DR+HA—keepalived负载均衡+HA高可用群集_LVS DR_31

  • 客户机地址可以是主机名、IP地址、网段地址,允许使用*?通配符;

  • 权限选项中的rw表示允许读写(ro为只读),sync表示同步写入,no_root_squash表示当客户机以root身份访问时赋予本地root权限(默认是root_squash,将作为nfs nobody用户降权对待)

2.启动RPC、NFS服务:

LVS-DR+HA—keepalived负载均衡+HA高可用群集_LVS DR_32

注意:rhel5系统中RPC服务脚本是portmap,rhel6系统中RPC服务脚本是rpcbind这里以rhel 5.5NFS共享存储。

四:LVS+HA——配置服务地址池中web节点服务器:(web1:172.16.16.3;web2:172.16.16.4)

DR模式为例:

  • 调整/proc系统的ARP响应参数;

  • 为虚拟接口lo:0配置VIP地址。

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

a.调整/proc响应参数:

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

LVS-DR+HA—keepalived负载均衡+HA高可用群集_linux负载均衡_33

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使修改生效:

LVS-DR+HA—keepalived负载均衡+HA高可用群集_LVS DR_34

b.配置虚拟IP地址(VIP——节点服务器1的配置:

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

LVS-DR+HA—keepalived负载均衡+HA高可用群集_lvs-keepalived高可用群集_35

注意子网掩码必须为全1

重启network脚本使修改后的IP生效。

LVS-DR+HA—keepalived负载均衡+HA高可用群集_LVS HA_36

添加VIP本地访问路由:

LVS-DR+HA—keepalived负载均衡+HA高可用群集_Keepalived_37

c:安装httpd软件包,创建相应的测试网页,并启用httpd服务程序:

LVS-DR+HA—keepalived负载均衡+HA高可用群集_LVS HA_38

修改/etc/fstab 文件,实现自动挂载:

LVS-DR+HA—keepalived负载均衡+HA高可用群集_linux负载均衡_39

启动httpd服务并设置开机自启:

LVS-DR+HA—keepalived负载均衡+HA高可用群集_lvs-keepalived高可用群集_40

其他服务器节点做相同的配置】,web节点2配置相同:

 

五:访问测试

从Windows PC机中访问http://172.16.16.172,将能够看到由真实服务器提供的网页内容:

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

LVS-DR+HA—keepalived负载均衡+HA高可用群集_lvs-keepalived高可用群集_41

LVS-DR+HA—keepalived负载均衡+HA高可用群集_LVS HA_42

LVS-DR+HA—keepalived负载均衡+HA高可用群集_LVS DR_43

a.模拟生产故障:物理宕掉主调度器的eth1接口,继续查看:

LVS-DR+HA—keepalived负载均衡+HA高可用群集_LVS HA_44

LVS-DR+HA—keepalived负载均衡+HA高可用群集_LVS DR_45

实验环境下多注意主从调度器、web节点服务器、NFS共享存储的iptables防火墙设置,排错时多想想iptables的设置。

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

LVS实验环境是互相结合的,根据需求搭建符合自己需求的环境才是王道。

LVS-NAT地址转换模式:http://wenzhongxiang.blog.51cto.com/6370734/1262522

LVS-DR直连路由模式:http://wenzhongxiang.blog.51cto.com/6370734/1263202

欢迎关注微信公众号:小温研习社

LVS-DR+HA—keepalived负载均衡+HA高可用群集_linux负载均衡_46