利用LVS+Keepalived 实现高性能高可用负载均衡
一.LVS+Keepalived 介绍
1. LVS
十种调度算法(rrr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq)。
2. Keepalvied
Keepalived在这里主要用作RealServer的健康状态检查以及LoadBalance主机和BackUP主机之间failover的实现
二. 网站负载均衡拓朴图
IP信息列表:
名称
|
IP
|
LVS-DR-Master
|
222.73.247.19*
|
LVS-DR-BACKUP
|
222.73.247.19*
|
LVS-DR-VIP
|
222.73.247.19*
|
WEB1-Realserver-slave
|
222.73.247.197
|
WEB2-Realserver-master
|
222.73.247.19*
|
GateWay
|
222.73.247.254
|
三. 安装LVS和Keepalvied软件包
系统均为centos6.2,内核版本; 2.6.32-220.el6.x86_64
#yum -y install kernel-devel
#yum -y update kernel
#modprobe ip_vs //内核加载ip_vs模块
#lsmod |grep ip_vs //查看是否加载成功。
#ln -s /usr/src/kernerls/2.6.32-220.23.1.el6.x86_64/ /usr/src/linux //生成一个链接文件
#cp /usr/src/kernels/2.6.32-220.23.1.el6.x86_64/include/net/ip_vs.h /usr/inclide/net/ //这个很重要,否则在安装ipvsadm的时候会提示缺少*.h文件
#yum -y install openssl openssl-devel //安装keepalived需要
安装完以下这些软件
popt-1.13-7.el6.x86_64
popt-devel-1.13-7.el6.x86_64
libnl-1.1-14.el6.x86_64
libnl-devel-1.1-14.el6.x86_64
popt-static-1.13-7.el6.x86_64.rpm
tar xzvf ipvsadm-1.26.tar.gz
#cd ipvsadm-1.26
#make && make install
安装完成,会多出以下文件。
/sbin/ipvsadm
/sbin/ipvsadm-save
/sbin/ipvsadm-restore
/usr/man/man8/ipvsadm.8
/usr/man/man8/ipvsadm-save.8
/usr/man/man8/ipvsadm-restore.8
/etc/rc.d/init.d/ipvsadm
#tar xzvf keepalived-1.2.2.tar.gz
#cd keepalived-1.2.2
#./configure --prefix=/usr/local/keepalived--with-kernel-dir=/usr/src/kernels/2.6.32-220.23.1.el6.x86_64/
#make && make install
正确完成安装会显示如下信息:
Keepalived configuration
------------------------
Keepalived version : 1.1.20
Compiler : gcc
Compiler flags : -g -O2
Extra Lib : -lpopt -lssl -lcrypto
Use IPVS Framework : Yes
IPVS sync daemon support : Yes
Use VRRP Framework : Yes
Use Debug flags : No
设置成为系统服务 ,方便启动,keepalived默认查找配置文件的位置是/etc/keepalived/
cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
mkdir /etc/keepalived
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
chkconfig --add keepalived
chkconfig keepalived
四. 利用Keepalvied实现负载均衡和和高可用性
1、Vim /etc/keepalived/keepalived.conf,在slave上面只需要更改优先级,和状态,官方推荐备份的优先级要低于master的优先级50
! Configuration File for keepalived
global_defs {
router_id LVS_DEVEL
}
# 20081013 written by :netseek
# VIP1
vrrp_instance VI_1 {
state MASTER #备份服务器上将MASTER改为BACKUP
interface eth0
virtual_router_id 51
priority 100 # 备份服务优先级将低于master50
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.5.46
#(如果有多个VIP,继续换行填写.)
}
}
virtual_server 192.168.5.46 80 {
delay_loop 3 #(每隔3秒查询realserver状态)
lb_algo wrr #(lvs 算法)
lb_kind DR #(Direct Route)
persistence_timeout 60 #(同一IP的连接60秒内被分配到同一台realserver)
protocol TCP #(用TCP协议检查realserver状态)
real_server 192.168.5.148 80 {
weight 3 #(权重)
TCP_CHECK {
connect_timeout 4 #(4秒无响应超时)
nb_get_retry 2
delay_before_retry 2
connect_port 80
}
}
real_server 192.168.5.161 80 {
weight 6
TCP_CHECK {
connect_timeout 4
nb_get_retry 2
delay_before_retry 2
connect_port 80
}
}
}
2. BACKUP服务器同上配置,先安装lvs再按装keepalived,仍后配置/etc/keepalived/keepalived.conf,只需将红色标示的部分改一下即可.
3在LVS的DR模式下,有一个必须要处理的问题就是real server上的ARP响应问题,必须对real server进行一定的处理,使其不响应VIP接口上的ARP请求
1) 通过脚本更改
#!/bin/bash
# description: Config realserver lo and apply noarp
#Written by :NetSeek http://www.linuxtone.org
SNS_VIP=192.168.5.46 ,注意vip的配置
. /etc/rc.d/init.d/functions
case "$1" in
start)
ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP
/sbin/route add -host $SNS_VIP dev lo:0
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
sysctl -p >/dev/null 2>&1
echo "RealServer Start OK"
;;
stop)
ifconfig lo:0 down
route del $SNS_VIP >/dev/null 2>&1
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 "RealServer Stoped"
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
exit 0
将这个脚本分别放在web1和web2上执行之后就ok
2) 也可以通过修改 /etc/sysctl.conf.来实现
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
sysctl –p使其生效
分别启动keepalived,
4. 查看lvs服务是否正常
#watch ipvsadm –ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 61.164.122.8:80 wrr persistent 60
-> 61.164.122.10:80 Route 3 0 0
-> 61.164.122.9:80 Route 3 0 0
#tail –f /var/log/message 监听日志,查看状态。
5.停Master服务器的keepalived服务,查看BAKCUP服务器是否能正常接管.