LVS负载均衡实战配置

LVS负载均衡技术实现是基于Linux内核模块IP_VS,与iptables一样是直接工作在内核中,互联网主流的Linux发行版默认都已经集成了ipvs模块,因此只需安装管理工具ipvsadm,所需软件ipvsadm-1.2.4.tar.gz软件,安装配置步骤如下

(1)ipvsadm编译安装方法如下

[root@lnmp-zabbix ~]# wget https://mirrors.edge.kernel.org/pub/linux/utils/kernel/ipvsadm/ipvsadm-1.31.tar.gz
[root@lnmp-zabbix ~]# yum install kernel-devel -y
[root@lnmp-zabbix ~]# ln -s /usr/src/kernels/3.10.* /usr/src/linux
[root@lnmp-zabbix ~]# tar xf ipvsadm-1.31.tar.gz 
[root@lnmp-zabbix ~]# cd ipvsadm-1.31/
[root@lnmp-zabbix ipvsadm-1.31]# make
[root@lnmp-zabbix ipvsadm-1.31]# make instal

(2)Ipvsadm软件安装完毕后,需要进行配置,主要配置方法有三步:添加虚拟服务器IP,添加realserver后端服务及启动LVS服务器VIP地址,配置代码如下:

[root@lnmp-zabbix ~]# ipvsadm -A -t 10.168.1.150:80 -s rr
[root@lnmp-zabbix ~]# ipvsadm -a -t 10.168.1.150:80 -r 10.168.1.178 -g -w 2
[root@lnmp-zabbix ~]# ipvsadm -a -t 10.168.1.150:80 -r 10.168.1.179 -g -w 2

(3)可以使用Shell脚本自动部署LVS相关软件及配置:

#!/bin/bash
SNS_VIP=$2
SNS_RIP1=$3
SNS_RIP2=$4
if [ "$1" == "stop" -a -z "$2" ];then
	echo "------------------------------------------"
	echo -e "\033[32mPlease Enter $0 stop LVS_VIP\n\nEXample:$0 stop 192.168.1.111\033[0m" 
	echo
	exit
else
	if [ -z "$2" -a -z "$3" -a -z "$4" ];then
		echo "----------------------------------------"
		echo -e "\033[32mPlease Enter Input $0 start VIP REALSERVER1  REALSERVER2\n\nEXample:$0 start/stop 192.168.1.111 192.168.1.2 192.168.1.3\033[0m"
		echo
		exit 0
	fi
fi
. /etc/rc.d/init.d/functions
logger $0 called with $1
function IPVSADM(){
/sbin/ipvsadm --set  30 5 60
/sbin/ifconfig eth0:0 $SNS_VIP broadcast $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP up
/sbin/route add -host $SNS_VIP dev eth0:0
/sbin/ipvsadm -A -t $SNS_VIP:80 -s wlc -p 120
/sbin/ipvsadm -a -t $SNS_VIP:80 -r $SNS_RIP1:80 -g -w 1
/sbin/ipvsadm -a -t $SNS_VIP:80 -r $SNS_RIP2:80 -g -w 1
}
case "$1" in
start)
IPVSADM
echo "-----------------------------------------------------"
/sbin/ipvsadm -Ln
touch /var/lock/subsys/ipvsadm > /dev/null 2>&1
;;
stop)
/sbin/ipvsadm -C
/sbin/ipvsadm -Z
ifconfig eth0:0 down >>/dev/null 2>&1
route del $SNS_VIP >>/dev/null 2>&1
rm -rf /var/lock/subsys/ipvsadm > /dev/null 2>&1
echo "ipvsadm stopped!"
;;
status)
if [ ! -e /var/lock/subsys/ipvsadm ]
then
echo "ipvsadm stopped!"
exit 1
else
echo "ipvsadm started!"
fi
;;
*)
echo "Usage: $0 {start | stop | status}"
exit 1
esac
exit 0

(4)LVS服务器绑定VIP地址,命令如下:

[root@lnmp-zabbix ~]# VIP=10.168.1.178
[root@lnmp-zabbix ~]# ifconfig br0:0 $VIP netmask 255.255.255.255 broadcast $VIP 
[root@lnmp-zabbix ~]# /sbin/route add -host $VIP dev br0:0

(5)LVS ipvsadm配置参数说明

-A						增加一台虚拟服务器VIP地址;
-t						虚拟服务器提供的是tcp服务;
-s						使用的调度算法;
-a						在虚拟服务器中增加一台后端真实服务器;
-r						指定真实服务器地址;
-w						后端真实服务器的权重;
-m						设置当前转发方式为NAT模式;-g为直接路由模式;-i  模式为隧道模式。

(6)查看LVS转发列表命令为:ipvsadm -Ln,如图

查看效果

访问10.168.1.178虚拟IP地址进行测试

(7)Nginx客户端realserver配置VIP脚本:

#!/bin/sh
#LVS Client Server
VIP=192.168.0.198
case  $1  in                                                                                                                                                                                                                                                    
start)                                                                                                                                                                                                                                            
    ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP
    /sbin/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"
    exit 0
;;                                                                                                                                                                                                                                         
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 OK"
    exit 1
;;
*)
    echo "Usage: $0 {start|stop}"
;;
esac

如果单台LVS发生突发情况,例如宕机、发生不可恢复现象,会导致用户无法访问后端所有的应用程序。避免这种问题可以使用HA故障切换,也就是有一台备用的LVS,主LVS 宕机,LVS VIP自动切换到从,可以基于LVS+Keepalived实现负载均衡及高可用功能,满足网站7x24小时稳定高效的运行。

Keepalived基于三层检测(IP层,TCP传输层,及应用层),主要用于检测WEB服务器的状态,如果有一台WEB服务器死机,或工作出现故障,Keepalived检测到并将有故障的WEB服务器从系统中剔除;

当后端一台WEB服务器工作正常后Keepalived自动将WEB服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的WEB服务器。

需要注意,如果使用了keepalived.conf配置,就不需要再执行ipvsadm  -A命令去添加均衡的realserver命令了,所有的配置都在keepalived.conf里面设置即可。

发表评论

后才能评论