高可用负载均衡集群方案之LVS+Keepalived

首先什么是lvs这里就不介绍了, baidu一下你就知道;
为什么需要集群, 为什么需要负载均衡这里也不啰嗦了, baidu一下你就知道;
与其他方案的区别, 优异也不介绍了, baidu一下你就知道.

lvs的几个重要角色是:
1> 主控服务器master
2> 主控备用服务器backup
3> 虚拟服务器virtual server
4> 实际服务器real server

每个角色对应一个ip, realserver则对应多个, 如果你简单的了解过lvs, 就应该知道lvs的3中调度方式和10种调度算法, 这里将使用效率比较高的dr(直接路由)方式, 算法用比较合理的wrr(加权轮询)算法, 其它的模式和算法可执行尝试.
好了下面就直接开始吧, 当然了在这之前你还需要配置好realserver, 保持80通畅.

ip约定:
LVS-Master 192.168.1.101 LVS-BACKUP 192.168.1.102 LVS-VIP 192.168.1.8 Realserver 192.168.1.107 Realserver 192.168.1.108

然后开始安装LVS和Keepalvied软件包
cd /opt/soft wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.24.tar.gz wget http://www.keepalived.org/software/keepalived-1.1.15.tar.gz

在安装前还需要执行以下命令:
uname -r #2.6.18-238.19.1.el5 ln -s /usr/src/kernels/2.6.18-238.19.1.el5-i686/ /usr/src/linux
如果/usr/src/kernels/为空, 请执行yum -y install kernel-devel

不是太旧的内核已经包涵了lvs的模块的, 使用以下命令检查:
lsmod |grep ip_vs
如果检查结果为空, 请自行执行yum install ipvsadm安装, 或者使用源码安装:
tar zxvf ipvsadm-1.24.tar.gz cd ipvsadm-1.24 make && make install cd ..

安装keepalived:
tar zxvf keepalived-1.1.15.tar.gz cd keepalived-1.1.15 ./configure make && make install

创建(复制)配置/可执行文件(这样启动就不用带太多路径参数)
cp /usr/local/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/ cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/ mkdir /etc/keepalived cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/ cp /usr/local/sbin/keepalived /usr/sbin/

在realserver创建realserver.sh脚本, 脚本的作用是绑定vip并忽略arp请求(win下后面另外说)
vi /etc/init.d/lvsrs #内容如下 #!/bin/bash #description : Start Real Server VIP=192.168.1.8 ./etc/rc.d/init.d/functions case "$1" in start) echo " Start LVS of Real Server" /sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up 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 ;; stop) /sbin/ifconfig lo:0 down echo "close LVS Directorserver" echo "0">/proc/sys/net/ipv4/conf/lo/arp_ignore echo "0">/proc/sys/net/ipv4/conf/lo/arp_announce echo "0">/proc/sys/net/ipv4/conf/all/arp_ignore echo "0">/proc/sys/net/ipv4/conf/all/arp_announce ;; *) echo "Usage: $0{start|stop}" exit 1 esac

编辑keepalived配置文件:
vi /etc/keepalived/keepalived.conf #内容如下 ! Configuration File for keepalived global_defs { notification_email { lyf362345@163.com #接收邮件的email地址 } notification_email_from lvs@windphp.com #邮件来自.. smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id LVS_DEVEL } vrrp_instance VI_1 { state MASTER ##指定Keepalived的角色, backup里修改为BACKUP interface eth0 virtual_router_id 51 priority 100 #定义优先级, backup里修改为小于100的数字, 如99 advert_int 1 #设定MASTER与BACKUP负载均衡器之间同步检查的时间间隔, 单位是秒. authentication { auth_type PASS #设置验证类型, 主要有PASS和AH两种. auth_pass 1111 #设置验证密码, MASTER与BACKUP必须使用相同的密码才能正常通信. } virtual_ipaddress { 192.168.1.8 #虚拟ip, 如果有多个, 每个一行 } } virtual_server 192.168.1.8 80 { delay_loop 5 #设置realserver健康检查时间, 单位是秒. lb_algo wrr #设置负载调度算法, 这里设置为wrr, 即加权轮询算法. lb_kind DR #设置LVS实现负载均衡的机制 nat_mask 255.255.255.0 persistence_timeout 50 protocol TCP real_server 192.168.1.107 80 { weight 5 TCP_CHECK { connect_timeout 10 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } real_server 192.168.1.108 80 { weight 5 TCP_CHECK { connect_timeout 10 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } }

master和backup分别执行:
service keepalived start chkconfig keepalived on

realserver全部执行:
service lvsrs start #记得写入rc.local, 因为这个不支持chkconfig

这个时候可以在master上执行ipvsadm检测lvs是否正常:
[root@localhost ~]# ipvsadm IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 192.168.1.8:http wrr persistent 50 -> 192.168.1.108:http Route 5 0 0 -> 192.168.1.107:http Route 5 0 0 [root@localhost ~]#

这个时候如果尝试停掉某一台realserver在收到宕机邮件的同时服务也不会中断(会丢失一部分用户会话状态, 这个就需要session同步了, 这里不多说), 而如果停掉master那么backup就会接替master继续服务(由配置文件里设置的同步时间决定服务中断的时间, 不过不会丢失用户会话状态).

这里随便说下win如何充当realserver, 可参考本文: http://www.cnblogs.com/daizhj/archive/2010/06/13/1693673.html
详细配置参数和高级配置其它参考文档: http://dl.windphp.com/LoadBalance/

如有错误, 还望之处; 如转载还望注明出处.

标签: linux, lvs, keepalived

添加新评论