一、实验说明
1、实现步骤
(1)安装lvs
(2)安装keepalived
(3)调度器LVS脚本配置
(4)真实主机Readserver1和Realserver2的配置
(5)调度器主机keepalived的配置
2、主要设备
名称(主机名) | IP |
---|---|
VIP(虚拟IP,对外的公网IP) | 192.168.18.180 |
MASTER(负载均衡器或者叫调度器的主机) | 192.168.18.200 |
BACKUP(负载均衡器或者叫调度机的备用机) | 192.168.18.201 |
REALSERVER1(真正提供服务的真实主机1) | 192.168.18.202 |
REALSERVER2(真正提供服务的真实主机2) | 192.168.18.103 |
3、网络拓扑图
二、实验过程
1、安装LVS
(1)查看linux内核中是否有ipvs模块,如果没有则需要安装
root@server200 ~]# modprobe -l|grep ipvs
kernel/net/netfilter/ipvs/ip_vs.ko
kernel/net/netfilter/ipvs/ip_vs_rr.ko
kernel/net/netfilter/ipvs/ip_vs_wrr.ko
kernel/net/netfilter/ipvs/ip_vs_lc.ko
kernel/net/netfilter/ipvs/ip_vs_wlc.ko
kernel/net/netfilter/ipvs/ip_vs_lblc.ko
kernel/net/netfilter/ipvs/ip_vs_lblcr.ko
kernel/net/netfilter/ipvs/ip_vs_dh.ko
kernel/net/netfilter/ipvs/ip_vs_sh.ko
kernel/net/netfilter/ipvs/ip_vs_sed.ko
kernel/net/netfilter/ipvs/ip_vs_nq.ko
kernel/net/netfilter/ipvs/ip_vs_ftp.ko
kernel/net/netfilter/ipvs/ip_vs_pe_sip.ko
如果出现类似上面的内容则表示已经安装ipvs模块(如果没有安装,可以通过yum -y install ipvs来安装)
(2)安装ipvsadm
下载地址:http://www.linuxvirtualserver.org/software/index.html
需要根据服务器的版本下载相应的软件包,比如查看本机的linux版本:
[root@server200 ~]# uname -r
2.6.32-504.16.2.el6.x86_64
说明我的linux版本是2.6系列的,所以下载 IPVS for kernel 2.6
wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.26.tar.gz
tar -zxvf ipvsadm-1.26.tar.gz
cd ipvsadm-1.26
make
发现编译报错,这是因为ipvsadm的一些依赖包没有安装
安装LVS前系统需要安装popt-static,kernel-devel,make,gcc,openssl-devel,lftp,libnl,popt,可以通过yum依次安装,因为本机已经安装make,gcc,所以这里安装除mak和gcc外的其他依赖包
yum -y install popt-static kernel-devel openssl-devel lftp libnl* popt*
mkdir /usr/src/linux
ln -s /usr/src/kernels/2.6.32-504.23.4.el6.x86_64/ /usr/src/linux #这个根据自己实际的内核包的具体情况设置软链接
make && make install
ipvsadm --help #如查可以看到帮助手册说明成功了
2、安装keepalived
安装及配置过程,请参考nginx+keepalived实现高可用性负载均衡 这篇文章
3、编写调度器LVS配置脚本(MASTER机上添加)
ipvsadm的用法请参照:http://zh.linuxvirtualserver.org/node/5
注:也可以在命令行中直接执行命令,配置参数参考:http://www.linuxvirtualserver.org/VS-DRouting.html
把脚本放到/usr/local/sysscripts/lvs/lvs-dr.sh中
首先还要把/etc/rc.d/init.d/functions添加可执行的权限
#!/bin/bash
# description: start lvs with DirectorServer
VIP=192.168.18.180
RS1=192.168.18.202
RS2=192.168.18.203
/etc/rc.d/init.d/functions
case "$1" in
start)
ifconfig eth0:0 $VIP netmask 255.255.255.255 broadcast $VIP up
echo 1 > /proc/sys/net/ipv4/ip_forward
ipvsadm -A -t $VIP:80 -s wlc
ipvsadm -a -t $VIP:80 -r $RS1 -g
ipvsadm -a -t $VIP:80 -r $RS2 -g
echo "starting LVS DR ……"
;;
stop)
ifconfig eth0:0 down
ipvsadm -D $VIP
ipvsadm -d $RS1
ipvsadm -d $RS2
echo "LVS DR has stoped"
;;
*)
echo "USAGE $0 {start|stop}"
exit 1
esac
4、在两台真实机上添加脚本
把脚本放在/usr/local/sysscripts/lvs/lvs-rs.sh中
首先也要把/etc/init.d/functions添加可执行的权限
#!/bin/bash
# descriptin: start lvs realserver
VIP=192.168.18.180
/etc/init.d/functions
case $1 in
start)
ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP up
route add -host $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 $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
5、启动脚本
(1)依次执行真实机1和真实机2上的脚本
chmod a+x /usr/local/sysscripts/lvs/lvs-rs.sh
cd /usr/local/sysscripts/lvs
./lvs-rs.sh start
(2)执行调度服务器上的脚本
cd /usr/local/sysscripts/lvs
chmod a+x lvs-dr.sh
./lvs-dr.sh start
6、查看lvs的状态,在调度服务器上查看
[root@server200 lvs]# ipvsadm -l --stats
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Conns InPkts OutPkts InBytes OutBytes
-> RemoteAddress:Port
TCP 192.168.18.180:http 8 134 0 24460 0
-> 192.168.18.202:http 4 78 0 15898 0
-> 192.168.18.203:http 4 56 0 8562 0
7、为lvs调度服务器添加备用服务器,提高可用性
注:也可以为每台真实服务器添加备用服务器,防止单点故障
具体步骤参考:nginx+keepalived实现高可用性负载均衡