LVS基础及LVS+Keepalived实现双主高可用负载均衡

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LVS基础及LVS+Keepalived实现双主高可用负载均衡相关的知识,希望对你有一定的参考价值。

LVS基础及LVS+Keepalived实现双主高可用负载均衡


LB集群:

   (Load  Balancing)即负载均衡集群,其目的是为了提高访问的并发量及提升服务器的性能,其    实现方式分为硬件方式和软件方式。

  硬件实现方式:

        常用的有 F5公司的BIG-IP系列、A10公司的AX系列、Citrix公司的 NetScaler系列等

  软件实现方式:

    LVS工作于传输层、nginx工作于应用层、haproxy工作于传输层和应用层

本文主要讲解LVS。

 

一、什么是LVS ?

 1. LVS:(Linux Virtual Server)Linux虚拟服务,工作于前端调度器内核的netfilter模块上,根据请求报文的目标IP和目标PORT将其调度转发至后端的某主机,其转发是依赖于四层协议的特征进行转发的,因此需要在内核的TCP/IP协议栈进行过滤筛选,这样的过滤转发规则由系统管理员进行定义。

 2. LVS两段式组成:

   ipvsadm:用户空间的命令行工具,用于管理集群服务及集群服务上的主机(RS)。

   ipvs:工作与内核上的netfilter的INPUT钩子之上的程序,可根据用户定义的集群实现请求转发。


   工作原理图解如下:

技术分享

LVS集群专用术语:

       CIP:发送请求的客户端IP地址。

VIP:lvs调度器的IP地址,也是向客户端提供服务的IP地址。

DIP:lvs调度器与后端real server之间通信使用的IP地址。

RIP:提供真正服务的real server的IP地址。

vs:虚拟服务器,调度器,

rs: 后端提供真实服务的服务器

 

3.LVS集群的类型:

1)lvs-nat:

   多目标的DNAT,通过将请求报文中的目标地址和目标端口修改为挑选出的某RS的RIP和PORT实现转发

2)lvs-dr:

   通过为请求报文的重新封闭一个MAC首部进行转发,源MAC是DIP所在接口的MAC,目标MAC是挑选出某RS的RIP所在接口的MAC地址;IP首部不会发生变化(CIP<-->VIP)

3)lvs-tun:

    不修改请求报文的IP首部(源IP为CIP,目标IP为VIP),而是原IP首部之外再封装一个IP首部(源IP为DIP,目标IP为挑选出的RS的RIP)

4)lvs-fullnat

   通过同时修改请求报文的源IP地址(CIP-->DIP)和目标IP地址(VIP-->RIP)进行转发

 

4.LVS集群的调度算法(Scheduler):

      根据其调度时是否考虑后端主机的当前负载,可分为静态方法和动态方法两类

 

静态算法:仅根据算法自身进行调度

技术分享

动态算法:根据算法及后端主机当前的负载状态进行调度

技术分享

查看当前系统支持的算法:技术分享


5.ipvsadm管理工具用法


管理集群:ipvsadm -A|E -t|u|f service_address [-s scheduler]

              A:增  -E:修改

-t:tcp  -u:udp  -f:firewall mark

-s scheduler:调度算法,默认为wlc

ipvsadm -D  -t|u|f service_address  删除集群

管理集群上的RS:

ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight]

-a:增

-e:改

-r server-address :RS的地址;rip[:port]

-g, gateway, dr,默认

-i, ipip, tun

-m, masquerade, nat

-w weight


查看:

ipvsadm -L|l [options]

-n, --numeric:数字格式显示IP和PORT;

--exact:精确值,不做单位换算;

-c, --connection:显示IPVS连接;

--stats:统计数据;

--rate:速率;

清空: ipvsadm  -C:clear

保存和重载:

保存:

ipvsadm -S > /PATH/TO/SOME_RULE_FILE

ipvsadm-save > /PATH/TO/SOME_RULE_FILE


重载:

ipvsadm -R <  /PATH/TO/SOME_RULE_FILE

ipvsadm-restore < /PATH/TO/SOME_RULE_FILE


清空计数器:

ipvsadm -Z [-t|u|f service-address]


 

 二、LVS-NAT工作模型及原理

 

1.lvs-nat原理

   多目标的DNAT,通过将请求报文中的目标地址和目标端口修改为挑选出的某RS的RIP和PORT实现转发;


(1)RIP和DIP必须在同一IP网络,且应该使用私有地址;RS的网络要指向DIP(保证响应报文必须经由VS);

(2)请求报文和响应报文都经由Director转发,较高负载下,Director易于成为系统性能瓶颈;

(3)支持端口映射;

(4)VS必须是Linux,RS可以是任意OS

 

2.lvs-nat测试

 

  测试环境:3台虚拟机

Director主机(两张网卡)IP:

         外网:172.18.123.14

         内网:192.168.100.254

       RS1主机IP:192.168.100.20

RS2主机IP:192.168.100.21

      注:Director内网ip及RS主机网卡均设置为仅主机模式,RS主机的网关需指向192.168.100.254,安装apache服务且处于开启状态。

1).在Director主机上安装ipvsadm并配置集群服务。

技术分享

 2).测试

技术分享

技术分享技术分享


三、LVS-DR工作模型及原理

 

1.lvs-dr

      Direct Routing:通过为请求报文的重新封闭一个MAC首部进行转发,源MAC是DIP所在接口的MAC,目标MAC是挑选出某RS的RIP所在接口的MAC地址;IP首部不会发生变化(CIP<-->VIP);


1)确保前端路径器将目标IP为VIP的请求报文发往Director:

     解决方案:

    在路由器上静态绑定VIP和Director的MAC地址;

    禁止RS响应VIP的ARP请求,禁止RS的VIP进行通告

                 (a) arptables

          (b) 修改RS的内核参数,并把VIP绑定lo的别名上;

              arp_ignore, arp_announce

2)RS的RIP可以使用私有地址,也可以使用公网地址;

3)RS跟Director必须在同一物理网络;RS的网关必须不能指向DIP;

4)请求报文必须由Directory调度,但响应报文必须不能经由Director;

5)不支持端口映射;

6)RS可以使用大多的OS;

技术分享

2.lvs-dr测试

 

  测试环境(CentOS 7)在director上安装ipvsadm

 

   Director

        DIP172.18.123.14

 VIP172.18.123.15

   RS1:

 RIP172.18.123.50

 VIP172.18.123.15

   RS2:

 RIP172.18.123.51

        VIP172.18.123.15


 

1.关闭RS1RS2arp响应:分别在RS1RS2主机上执行以下命令

技术分享

2.分别在三台主机上配置VIP

在Director技术分享

分别在RS1及RS2上设置VIP

技术分享

3.增加路由

在Director

技术分享

RS1及RS2:

技术分享

4.Director上添加集群列表

技术分享

5.测试

技术分享技术分享

注:arp响应限制

1arp_ignore:

定义对目标地址为本地IPARP询问不同的应答模式0

0 - (默认值): 回应任何网络接口上对任何本地IP地址的arp查询请求

1 - 只回答目标IP地址是来访网络接口本地地址的ARP查询请求

2 -只回答目标IP地址是来访网络接口本地地址的ARP查询请求,且来访IP必须在该网络接口的子网段内

3 - 不回应该网络界面的arp请求,而只对设置的唯一和连接地址做出回应

4-7 - 保留未使用

8 -不回应所有(本地地址)的arp查询

 

2arp_announce:

对网络接口上,本地IP地址的发出的,ARP回应,作出相应级别的限制确定不同程度的限制,宣布对来自本地源IP地址发出Arp请求的接口

0 - (默认在任意网络接口(eth0,eth1lo)上的任何本地地址

1 -尽量避免不在该网络接口子网段的本地地址做出arp回应当发起ARP请求的源IP地址是被设置应该经由路由达到此网络接口的时候很有用.此时会检查来访IP是否为所有接口上的子网段内ip之一.如果改来访IP不属于各个网络接口上的子网段内,那么将采用级别2的方式来进行处理.

2 - 对查询目标使用最适当的本地地址.在此模式下将忽略这个IP数据包的源地址并尝试选择与能与该地址通信的本地地址.首要是选择所有的网络接口的子网中外出访问子网中包含该目标IP地址的本地地址如果没有合适的地址被发现,将选择当前的发送网络接口或其他的有可能接受到该ARP回应的网络接口来进行发送.


四、基于Keepalived实现lvs双主高可用集群及部署应用

 

1.实验拓扑结构图

技术分享

 

2.部署环境

技术分享

3.安装软件

 1)保证LVS1LVS2时间同步,并能够通信,并在两台主机上安装keepalivedipvsadm

技术分享

2)配置LVS1keepalived.conf

! Configuration File for keepalived

 

global_defs {

   notification_email {

               [email protected]

   }

   notification_email_from [email protected]

   smtp_server 127.0.0.1

   smtp_connect_timeout 30

   router_id MY_LVS

}

 

vrrp_instance VI_1 {

    state MASTER

    interface eno16777736

    virtual_router_id 123

    priority 100

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass abcdef

    }

    virtual_ipaddress {

        172.18.123.22

    }

}

 

vrrp_instance VI_2 {

    state BACKUP

    interface eno16777736

    virtual_router_id 223

    priority 98

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass abcdef

    }

    virtual_ipaddress {

        172.18.123.23

    }

}

 

virtual_server 172.18.123.22 80 {

    delay_loop 6

    lb_algo rr

    lb_kind DR

    protocol TCP

 

    real_server 172.18.123.50 80 {

        weight 1

        HTTP_GET {

            url {

              path /

            }

            connect_timeout 3

            nb_get_retry 3

            delay_before_retry 3

        }

    }

 

    real_server 172.18.123.51 80 {

        weight 1

        HTTP_GET {

            url {

              path /

            }

            connect_timeout 3

            nb_get_retry 3

            delay_before_retry 3

        }

    }

}

 

virtual_server 172.18.123.23 80 {

    delay_loop 6

    lb_algo rr

    lb_kind DR

    protocol TCP

 

    real_server 172.18.123.50 80 {

        weight 1

        HTTP_GET {

            url {

              path /

            }

            connect_timeout 3

            nb_get_retry 3

            delay_before_retry 3

        }

    }

 

    real_server 172.18.123.51 80 {

        weight 1

        HTTP_GET {

            url {

              path /

            }

            connect_timeout 3

            nb_get_retry 3

            delay_before_retry 3

        }

    }

}


3) scp LVS1的keepalived.conf到LVS2的/etc/keepalived/下,并修改下述标识内容,其他内容不变。

 

vrrp_instance VI_1 {

    state BACKUP

    interface eno16777736

    virtual_router_id 123

    priority 98

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass abcdef

    }

    virtual_ipaddress {

        172.18.123.22

    }

}

 

vrrp_instance VI_2 {

    state MASTER

    interface eno16777736

    virtual_router_id 223

    priority 100

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass abcdef

    }

    virtual_ipaddress {

        172.18.123.23

    }

}

 

4)在RS1及RS2上安装httpd、php及php-mysql

技术分享

准备测试页

技术分享

配置内核及VIP,运行下面脚本:bash

#/bin/bash

#

VIP1=172.18.123.22

VIP2=172.18.123.23

interface1="lo:0"

interface2="lo:1"

 

case $1 in

start)

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

echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore

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

echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce


ifconfig $interface1 $VIP1 broadcast $VIP1 netmask 255.255.255.255 up

route add -host $VIP1 dev $interface1

ifconfig $interface2 $VIP2 broadcast $VIP2 netmask 255.255.255.255 up

route add -host $VIP2 dev $interface2

;;

stop)


echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore

echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore

echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce

echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce

ifconfig $interface1 down

ifconfig $interface2 down

;;

status)

if  ifconfig lo:0 | grep $VIP1 &> /dev/null && ifconfig lo:1 | grep $VIP2  &> /dev/null;then

echo "ipvs is running"

else

echo "ipvs is stopped"

    fi

;;

*)

echo "Usage: `basename $0` {start|stop|status}"

exit 1

esac

查看Rs主机的ip信息:

技术分享

5)测试,启动LVS1LVS2主机上的keepalived服务,查看两节点的ip信息及ipvs规则

技术分享

技术分享

通过浏览器访问172.18.123.22172.18.123.23

以上是关于LVS基础及LVS+Keepalived实现双主高可用负载均衡的主要内容,如果未能解决你的问题,请参考以下文章

MySQL集群之keepalived实现mysql双主高可用

Keepalived+LVS(dr)高可用负载均衡集群的实现

LVS+Keepalived双主模型的实现

LVS/NAT双主 + keepalived负载均衡实现

LVS/NAT双主 + keepalived负载均衡实现

Keepalived+Nginx实现高可用负载均衡集群