搭建LVS+Keepalived高可用负载集群

    最近,本屌接到公司的任务,公司新上20台服务器,需要搭建一整套架构来运行公司的业务,其中有应用服务器,认证服务器,数据库服务器等。服务器基础架构中的应用服务器集群要有高可用性,且需要负载均衡。当我接到这个任务的时候,脑子里第一个想法就是LVS+Keepalived。

    由于公司资金有限,直接上硬件的负载均衡设备是不可能的了,所以只好使用软件来实现,LVS在负载均衡集群中无疑是一种很好的方案,使用LVS可以同时分发10台以下的设备,用在我们这个项目中是再合适不过的,而为了干掉LVS负载均衡集群中分发服务器这个单点故障,我又引入了Keepalived高可用技术。

    LVS(Linux Virtual Server,Linux虚拟服务器)技术,由现任职淘宝的章文嵩博士创始,是一套开源的负载均衡软件,是中国国内最早出现的自由软件项目之一。

    LVS架构由前端分发服务器,中间应用服务器,后端共享存储共同组成,分发服务器根绝其分发策略将用户请求分发到中间的应用服务器上,应用服务器根据LVS的模式来响应用户请求。LVS相关术语如下:

    1Director Server调度服务器,将负载分发到Real Server的服务器

    2Real Server:真实服务器,真正提供应用服务的服务器

    3VIP:虚拟IP地址,公布给用户访问的IP地址

    4RIP:真实IP地址,集群节点上使用的IP地址

    5DIP:Director连到Real Server的IP地址

    LVS负载均衡方式:

    NAT:通过网络地址转换实现的虚拟服务器,Director server将用户请求报文的目的地址改成选定的Real Server地址后,转发给Real Server。

    NAT模式下,所有请求全部要经过Director server的处理,所以,在并发量较大的时候,Director server就会成为系统的瓶颈。

DR:直接使用路由技术实现虚拟服务器,通过改写请求报文的MAC地址,将请求发至Real Server,Real Server直接响应客户端。

TUN:通过隧道方式实现虚拟服务器,Director采用隧道技术将请求发至Real Server后,Real Server直接响应客户端。

为了避免系统瓶颈,所以采用DR方式来实现请求转发。

LVS提供了10种调度算法,这些算法决定了以什么方式来转发请求,常用的调度算法有4种:

轮询(Round Robin):将客户端请求平均分发到Real Server。

加权轮询(Weighted Round Robin):根据Real Server的性能设置权重,再进行轮询调度。

最少连接(Least Connections):根据Real Server的性能设置权重,再进行轮询调度。

加权最少连接( Weighted Least Connections ):根据Real Server的性能设置权重,再将网络请求调度到已建立的连接数最少的服务器上。

由于公司采购的服务器的配置完全相同,性能没有什么差异,所以在调度算法上采用RR轮询的方式。

为了避免负载均衡分发器单点故障,所以再多加一台备用分发器,一旦当前的分发服务器发生故障,则启用备用服务器,保证业务不中断。

使用keepalived技术,实现对分发器以及应用服务器的高可用,自动剔除故障服务器,自动转移lvs负载均衡分发服务器。当故障服务器回复后,keepalived服务会自动将恢复的服务器重新加入集群继续提供服务。

以下为服务器配置过程:

一、IP地址划分

LVS-Master:10.60.77.150

LVS-Backup:10.60.77.151

VIP:10.60.77.152(此为对外提供服务的地址,本文中以私有IP代替)

web1:10.60.77.153

web2:10.60.77.154(web服务器即为应用服务器,本文以两台为例)

二、在LVS分发服务器上安装软件(两台服务器上都要安装)

[root@10-60-77-150-LVS1~]# yum -y install epel-release

[root@10-60-77-150-LVS1~]# yum -y install ipvsadm keepalived

三、配置LVS-Master服务器

修改keepalived配置文件

[root@10-60-77-150-LVS1 ~]# vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {

   notification_email {     //设置报警邮件

   [email protected]

   }

   [email protected]

   smtp_server 127.0.0.1

   smtp_connect_timeout 30

   router_id LVS1    //设置router_id,此值在该网络中需要具有唯一性

}

vrrp_instance VI_1 {

    state MASTER     //当前服务器设置为主服务器

    interface eth0

    virtual_router_id 51

    priority 100     //优先级,主服务器应该在网络中最高

    advert_int 1

    authentication {

        auth_type PASS  //设置认证方式

        auth_pass password  //设置认证密码

    }

    virtual_ipaddress {     //设置VIP,掩码需要我们自己设置

   10.60.77.152/24

    }

}

virtual_server 10.60.77.152 80 {   //VIP监听的端口

    delay_loop 6

    lb_algo rr   //调度算法,此处为轮询方式

    lb_kind DR   //LVS负载均衡方式,此处为DR模式

    persistence_timeout 50

    protocol TCP

    real_server 10.60.77.15380 {     //指定real-server

        weight 1     //指定该服务器的权重

        TCP_CHECK {

            connect_timeout3

            nb_get_retry 3

           delay_before_retry 3

        }

    }

    real_server 10.60.77.15480 {

        weight 1

        TCP_CHECK {

            connect_timeout3

            nb_get_retry 3

           delay_before_retry 3

        }

    }

}

准备虚拟网卡配置文件

[root@10-60-77-150-LVS1 ~]# cd /etc/sysconfig/network-scripts/

[root@10-60-77-150-LVS1 ~]# cp ifcfg-eth0 ifcfg-eth0:0

[root@10-60-77-150-LVS1 ~]# vim ifcfg-eth0:0

DEVICE=eth0:0

TYPE=Ethernet

ONBOOT=yes

BOOTPROTO=none

IPADDR=10.60.77.152

PREFIX=24

四、配置LVS-Backup服务器

修改keepalived配置文件,只需修改以下几条即可:

[root@10-60-77-151-LVS2 ~]# vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {

   notification_email {

   [email protected]

   }

   [email protected]

   smtp_server 127.0.0.1

   smtp_connect_timeout 30

   router_id LVS2    //修改router_id

}

vrrp_instance VI_1 {

    state BACKUP     //修改状态为BACKUP,该项配置必须为大写

    interface eth0

    virtual_router_id 51

    priority 90      //修改优先级低于LVS-Master服务器

    advert_int 1

    authentication {

        auth_type PASS      //此处配置必须与LVS-Master完全相同

        auth_pass password

    }

其余配置与LVS-Master完全相同

分别启动LVS-master和LVS-backup的keepalived服务

[root@10-60-77-150-LVS1 ~]# service keepalived start

[root@10-60-77-150-LVS1 ~]# chkconfig keepalived on

[root@10-60-77-151-LVS2 ~]# service keepalived start

[root@10-60-77-151-LVS2 ~]# chkconfig keepalived on

五、配置realserver(所有web服务器配置全部相同)

1、拒绝ARP响应

[root@10-60-77-153-web1 ~]# vim /etc/sysctl.conf

在该文件末尾添加如下四行配置:

net.ipv4.conf.all.arp_announce = 2

net.ipv4.conf.lo.arp_announce = 2

net.ipv4.conf.all.arp_ignore = 1

net.ipv4.conf.lo.arp_ignore = 1

[root@10-60-77-153-web1 ~]# sysctl -p

2、准备虚拟回环接口配置文件

[root@10-60-77-153-web1 ~]# cd /etc/sysconfig/network-scripts/

[root@10-60-77-153-web1 network-scripts]# cp ifcfg-lo ifcfg-lo:0

[root@10-60-77-153-web1 network-scripts]# vim ifcfg-lo:0

DEVICE=lo:0

IPADDR=10.60.77.152

NETMASK=255.255.255.255

BROADCAST=10.60.77.152

ONBOOT=yes

[root@10-60-77-153-web1 network-scripts]# service network restart

六、测试