LVS负载均衡高可用Keepalived

一、架构图设计  


LVS高可用之Keepalived_LVS负载均衡之高可用Keepalive

软件环境:

        Redhat Linux 5.8系列32位操作系统

        

二、keepalived介绍及工作方式

       1、 介绍keepalived之前我们首先先介绍一下VRRP(虚拟路由协议)

        VRRP:虚拟路由冗余协议

        能够提高网络的稳定性和可靠性,其由IETF标准RFC2338定义。

1.VRRP的工作原理

如图所示,VRRP协议将LAN网段上的两台或者多台路由可以作为一台“虚拟”路由使用,通过同一个虚拟IP地址和虚拟MAC地址而对外提供服务。如果其中一台出现故障,另一台就能接替它,继续完成路由功能。

LVS高可用之Keepalived_LVS负载均衡之高可用Keepalive_02

VRRP协议组中包括一台主路由、备份路由和一台虚拟路由组成。VRRP协议中活跃路由称为主路由,其转发发送到虚拟路由的数据包。而其他VRRP组中非主路由的路由都处于备份状态。虚拟路由是向最终用户代表一台可以连续工作的路由。

VRRP根据优先级大小选择主路由,同一个VRRP组中优先级最大的路由成为主路由,状态为Master。组中其他路由都处于备份状态,并检测主路由的状态。主路由每隔一段时间会发送一个VRRP通告,通告其工作正常。如果VRRP组中的备份路由长时间没有收到主路由的通告,就将自己改为Master状态。VRRP组内可能有多台备份路由同时认为自己是主路由,这时每台主路由都会比较收到的VRRP通告中的优先级与本地的优先级的大小。如果本地优先级小于VRRP通告的优先级,则自身路由状态为备份状态,否则为Master状态不变。最终一个VRRP组中优先级最大的路由成为新的主路由。

VRRP协议共定义了三种状态:Master(主状态)、Backup(备份状态)、Initialize(初始状态)。

n初始状态:所有路由都从初始状态开始,即进程启动后进入此状态。

n备份状态:接收主路由发送的VRRP组播通告,由此判断主路由的状态;丢弃发送到虚拟路由的MAC地址和IP地址的数据包;不响应对虚拟IP地址的ARP请求。

n主状态:定期发送VRRP组播通告;响应对虚拟IP地址的ARP请求,并且发送免费ARP报文使网络内主机知道虚拟IP地址和虚拟MAC地址的对应关系;转发目的地址是虚拟MAC地址的IP数据包。

VRRP三种状态间的转换关系,如图所示。

LVS高可用之Keepalived_LVS负载均衡之高可用Keepalive_03

VRRP协议提供了三种认证方式(无认证、简单字符认证和MD5认证)可以根据不同的网络环境使用不同的认证方式。

2 keepalived理论原理

nkeepalived可提供vrrp以及health-check功能,可以只用它提供双机浮动的vipvrrp虚拟路由功能),这样可以简单实现一个双机热备高可用功能。

nkeepalived是一个类似于layer3, 4 & 5交换机制的软件,也就是我们平时说的第3层、第4层和第5层交换。Keepalived的作用是检测web 服务器的状态。 Layer3,4&5工作在IP/TCP协议栈的IP层,TCP层,及应用层,原理分别如下:

nLayer3Keepalived使用Layer3的方式工作式时,Keepalived会定期向服务器群中的服务器

n发送一个ICMP的数据包(既我们平时用的Ping程序),如果发现某台服务的IP地址没有激活,Keepalived便报告这台服务器失效,并将它从服务器群中剔除,这种情况的典型例子是某台服务器被非法关机。Layer3的方式是以服务器的IP地址是否有效作为服务器工作正常与否的标准。在本文中将采用这种方式。

nLayer4:如果您理解了Layer3的方式,Layer4就容易了。Layer4主要以TCP端口的状态来决定服务器工作正常与否。web server的服务端口一般是80,如果Keepalived检测到80端口没有启动,则Keepalived将把这台服务器从服务器群中剔除。

nLayer5Layer5就是工作在具体的应用层了,比Layer3,Layer4要复杂一点,在网络上占用的带宽也要大一些。Keepalived将根据用户的设定检查服务器程序的运行是否正常,如果与用户的设定不相符,则Keepalived将把服务器从服务器群中剔除。

nvip即虚拟ip,是附在主机网卡上的,即对主机网卡进行虚拟,此IP仍然是占用了此网段的某个IP

三、LVS介绍及工作方式

nLVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一.目前有三种IP负载均衡技术(VS/NAT、VS/TUN和VS/DR)八种调度算法(rr,wrr,lc,wlc,lblc,lblcr,dh,sh)

四、服务配置

     1、服务器ip地址规划:

            VIP:172.16.39.100

            ipvs1:172.16.39.1

            ipvs2:172.16.39.2

            realserver1:172.16.39.3

            realserver2:172.16.39.4

            client:172.16.39.36

      2、分别配置两台realserver转发功能

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

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

       3、分别配置两台realserver的虚拟ip

             /sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
             /sbin/route add -host $VIP dev lo:0

       4、配置lvs转发器ipvs

             安装ipvsadm

             yum install ipvsadm -y

        5、配置keepalived

               安装keepalived

                     首先先去下载keepalived包

                     wgethttp://www.keepalived.org/software/keepalived-1.1.15.tar.gz
                     tar zxvf keepalived-1.1.15.tar.gz

                     cd keepalived-1.1.15
                    ./configure  && make && make install
               配置keepalived相关路径

                        cp /home/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
                        cp /home/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
                        cp /home/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
                        cp /home/keepalived/sbin/keepalived /sbin/
                配置keepalived主配置文件

                        vi /etc/keepalived/keepalived.conf

global_defs {
notification_email {
cowherds@sina.cn
}
notification_email_from cowherds@sina.cn
smtp_connect_timeout 3
smtp_server 127.0.0.1
router_id LVS_DEVEL
}
vrrp_script chk_httpd {
script "killall -0 httpd"
interval 1
weight 2
}
vrrp_script chk_mantaince_down {
script "[[ -f /etc/keepalived/down ]] && exit 1 || exit 0"
interval 1
weight 2
}
vrrp_instance VI_1 {
interface eth0
state MASTER  # BACKUP for slave routers
priority 101  # 100 for BACKUP
virtual_router_id 51
garp_master_delay 1
authentication {
auth_type PASS
auth_pass password
}
track_interface {
eth0
}
virtual_ipaddress {
172.16.39.100/16 dev eth0 label eth0:0
}
track_script {
chk_haproxy
chk_mantaince_down
}
real_server 172.16.39.3 80 {
weight 1
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 172.16.100.4 80 {
weight 1
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}

配置BACKUP节点的keepalived.conf

        

global_defs {
notification_email {
cowherds@sina.cn
}
notification_email_from cowherds@sina.cn
smtp_connect_timeout 3
smtp_server 127.0.0.1
router_id LVS_DEVEL
}
vrrp_script chk_httpd {
script "killall -0 httpd"
interval 1
weight 2
}
vrrp_script chk_mantaince_down {
script "[[ -f /etc/keepalived/down ]] && exit 1 || exit 0"
interval 1
weight 2
}
vrrp_instance VI_1 {
interface eth0
state BACKUP  # BACKUP for slave routers
priority 100  # 100 for BACKUP
virtual_router_id 51
garp_master_delay 1
authentication {
auth_type PASS
auth_pass password
}
track_interface {
eth0
}
virtual_ipaddress {
172.16.39.100/16 dev eth0 label eth0:0
}
track_script {
chk_haproxy
chk_mantaince_down
}
real_server 172.16.39.3 80 {
weight 1
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 172.16.100.4 80 {
weight 1
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}

然后就可以起送keepalived了

        启动的时候记得看日志哦