LVS服务器简单搭建
LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。可以在UNIX/linux平台下实现负载均衡集群功能。该项目在1998年5月由章文嵩博士组织成立,是中国国内最早出现的自由软件项目之一。
LVS一般分为三个模式,DR模式也就是路由模式,这样是用的最多的一种模式。NAT模式,tunnel模式也就是隧道模式。 也有说四种的,就是多了FULL NAT模式。
我们这里的实验也是一个简单实验,显示一个路由模式,也就是1台LVS带动两台nginx服务器。
大概就是这样一个简单拓扑。
先安装LVS吧
安全装备命令。
lsmod |grep ip_vs
uname -rm
ls /usr/src/kernels/`uname -r`
ln -s /usr/src/kernels/`uname -r` /usr/src/linux
因为LVS是基于内核的,所以要建立这么一个连接,注意最后的链接应该是蓝色显示
如果显示不出内核,就要安装一个包
yum install kernel-devel -y
开始源码安装LVS
yum install libnl* libpopt*
yum install popt-static
yum install gcc
yum install gcc+
先提前把这些包给装了。然后下载软件
wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.26.tar.gz
ls
tar zxf ipvsadm-1.26.tar.gz
cd ipvsadm-1.26/
mkdir /application
cd /application/
mv /software/ipvsadm-1.26/ .
cd ipvsadm-1.26/
make
echo $?
make install
这样就安装好了。
然后要设置VIP
ip addr add 192.168.19.44/24 dev ens192
添加路由表
在LVS先清空。
用ipvsadm -C 命令
然后开始配置两台主机上去
ipvsadm --set 30 5 60
ipvsadm -A -t 192.168.19.44:80 -s rr -p 20
ipvsadm -a -t 192.168.19.44:80 -r 192.168.19.39 -g -w 1
ipvsadm -a -t 192.168.19.44:80 -r 192.168.19.38 -g -w 1
ipvsadm -L -n
然后就是要在RIP上做ARP的抑制和绑定VIP。
ip addr show
ip addr add 192.168.19.44/32 dev lo:0
route add -host 192.168.19.44 dev lo
route -n
下面是做ARP抑制
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
可以开始测试效果了。
同一个地址访问出不同的效果。
证明负载均衡有在作用了。
这样最简单的两台WEB的负载均衡就可以了。当然我们最佳的方式,是搭配keepalived来实现高可用是最好的。
但我这里没有列出来,高可用又分了单实例和多实例。
这个后面还要好好学习一下。
监测命令 watch -n 1 ipvsadm -L -n
ARP抑制的选项说明。
这里写一个非常简单的IPVS启动和停止的脚本。
#!/bin/bash . /etc/init.d/functions VIP=192.168.19.44 PORT=80 RIP=( 192.168.19.38 192.168.19.39 ) start(){ ifconfig ens192:0 $VIP/24 up route add -host $VIP dev ens192 ipvsadm -C ipvsadm --set 30 5 60 ipvsadm -A -t $VIP:$PORT -s rr -p 20 for (( i=0;i<${#RIP[*]};i++)) do ipvsadm -a -t $VIP:$PORT -r ${RIP[$i]} -g -w 1 done } stop(){ ipvsadm -C ifconfig ens192:0 down route del -host $VIP dev ens192 } case "$1" in start) start echo -e "\e[32m ipvs is started \e[0m" ;; stop) stop echo -e "\e[31m ipvs is stoped \e[0m" ;; restart) stop echo -e "\e[31m ipvs is stop \e[0m" start echo -e "\e[32m ipvs is start \e[0m" ;; *) echo -e "\e[42m USAGE:$0 {start|stop|restart} \e[0m" esac