高可用负载均衡集群方案之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 {
[email protected] #接收邮件的email地址
}
notification_email_from [email protected] #邮件来自..
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/
如有错误, 还望之处; 如转载还望注明出处.