LVS+keepalived实现高可用性负载均衡

一、实验说明

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模块,如果没有则需要安装
  1. root@server200 ~]# modprobe -l|grep ipvs
  2. kernel/net/netfilter/ipvs/ip_vs.ko
  3. kernel/net/netfilter/ipvs/ip_vs_rr.ko
  4. kernel/net/netfilter/ipvs/ip_vs_wrr.ko
  5. kernel/net/netfilter/ipvs/ip_vs_lc.ko
  6. kernel/net/netfilter/ipvs/ip_vs_wlc.ko
  7. kernel/net/netfilter/ipvs/ip_vs_lblc.ko
  8. kernel/net/netfilter/ipvs/ip_vs_lblcr.ko
  9. kernel/net/netfilter/ipvs/ip_vs_dh.ko
  10. kernel/net/netfilter/ipvs/ip_vs_sh.ko
  11. kernel/net/netfilter/ipvs/ip_vs_sed.ko
  12. kernel/net/netfilter/ipvs/ip_vs_nq.ko
  13. kernel/net/netfilter/ipvs/ip_vs_ftp.ko
  14. kernel/net/netfilter/ipvs/ip_vs_pe_sip.ko

如果出现类似上面的内容则表示已经安装ipvs模块(如果没有安装,可以通过yum -y install ipvs来安装)

(2)安装ipvsadm

下载地址:http://www.linuxvirtualserver.org/software/index.html

需要根据服务器的版本下载相应的软件包,比如查看本机的linux版本:

  1. [root@server200 ~]# uname -r
  2. 2.6.32-504.16.2.el6.x86_64

说明我的linux版本是2.6系列的,所以下载 IPVS for kernel 2.6

  1. wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.26.tar.gz
  2. tar -zxvf ipvsadm-1.26.tar.gz
  3. cd ipvsadm-1.26
  4. make

发现编译报错,这是因为ipvsadm的一些依赖包没有安装

安装LVS前系统需要安装popt-static,kernel-devel,make,gcc,openssl-devel,lftp,libnl,popt,可以通过yum依次安装,因为本机已经安装make,gcc,所以这里安装除mak和gcc外的其他依赖包

  1. yum -y install popt-static kernel-devel openssl-devel lftp libnl* popt*
  2. mkdir /usr/src/linux
  3. ln -s /usr/src/kernels/2.6.32-504.23.4.el6.x86_64/ /usr/src/linux #这个根据自己实际的内核包的具体情况设置软链接
  4. make && make install
  5. 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添加可执行的权限

  1. #!/bin/bash
  2. # description: start lvs with DirectorServer
  3. VIP=192.168.18.180
  4. RS1=192.168.18.202
  5. RS2=192.168.18.203
  6. /etc/rc.d/init.d/functions
  7. case "$1" in
  8. start)
  9. ifconfig eth0:0 $VIP netmask 255.255.255.255 broadcast $VIP up
  10. echo 1 > /proc/sys/net/ipv4/ip_forward
  11. ipvsadm -A -t $VIP:80 -s wlc
  12. ipvsadm -a -t $VIP:80 -r $RS1 -g
  13. ipvsadm -a -t $VIP:80 -r $RS2 -g
  14. echo "starting LVS DR ……"
  15. ;;
  16. stop)
  17. ifconfig eth0:0 down
  18. ipvsadm -D $VIP
  19. ipvsadm -d $RS1
  20. ipvsadm -d $RS2
  21. echo "LVS DR has stoped"
  22. ;;
  23. *)
  24. echo "USAGE $0 {start|stop}"
  25. exit 1
  26. esac
4、在两台真实机上添加脚本

把脚本放在/usr/local/sysscripts/lvs/lvs-rs.sh中

首先也要把/etc/init.d/functions添加可执行的权限

  1. #!/bin/bash
  2. # descriptin: start lvs realserver
  3. VIP=192.168.18.180
  4. /etc/init.d/functions
  5. case $1 in
  6. start)
  7. ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP up
  8. route add -host $VIP dev lo:0
  9. echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
  10. echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
  11. echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
  12. echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
  13. sysctl -p >/dev/null 2>&1
  14. echo "RealServer Start OK"
  15. ;;
  16. stop)
  17. ifconfig lo:0 down
  18. route del $VIP >/dev/null 2>&1
  19. echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore
  20. echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
  21. echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
  22. echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
  23. echo "RealServer Stoped"
  24. ;;
  25. *)
  26. echo "USAGE $0 {start|stop}"
  27. exit 1
  28. esac
5、启动脚本

(1)依次执行真实机1和真实机2上的脚本

  1. chmod a+x /usr/local/sysscripts/lvs/lvs-rs.sh
  2. cd /usr/local/sysscripts/lvs
  3. ./lvs-rs.sh start

(2)执行调度服务器上的脚本

  1. cd /usr/local/sysscripts/lvs
  2. chmod a+x lvs-dr.sh
  3. ./lvs-dr.sh start
6、查看lvs的状态,在调度服务器上查看
  1. [root@server200 lvs]# ipvsadm -l --stats
  2. IP Virtual Server version 1.2.1 (size=4096)
  3. Prot LocalAddress:Port Conns InPkts OutPkts InBytes OutBytes
  4. -> RemoteAddress:Port
  5. TCP 192.168.18.180:http 8 134 0 24460 0
  6. -> 192.168.18.202:http 4 78 0 15898 0
  7. -> 192.168.18.203:http 4 56 0 8562 0
7、为lvs调度服务器添加备用服务器,提高可用性

注:也可以为每台真实服务器添加备用服务器,防止单点故障

具体步骤参考:nginx+keepalived实现高可用性负载均衡