一、LVS负载均衡安装
1.基础环境配置
1.1三台虚拟机
[root@lvs-01 ~]# cat /etc/redhat-release
CentOS release 6.5 (Final)
lvs-01 10.0.0.9 vip:10.0.0.19(eth0:1)
web-01 10.0.0.10 vip:10.0.0.19(lo:1)
web-02 10.0.0.11 vip:10.0.0.19(lo:1)
1.2配置两台web
[root@web-01 ~]# yum install httpd -y
[root@web-01 ~]# echo "10.0.0.10" >/var/www/html/index.html
[root@web-02 ~]# echo "10.0.0.11" >/var/www/html/index.html
[root@web-01 ~]# iptables -I INPUT -p tcp --dport 80 -j ACCEPT
[root@lvs-01~]# curl 10.0.0.10
10.0.0.10
[root@lvs-01~]# curl 10.0.0.11
10.0.0.11
2.部署lvs
2.1下载编译ipvsadm
[root@lvs-01 ~]# wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.26.tar.gz
[root@lvs-01 ~]# ll ipvsadm-1.26.tar.gz
-rw-r--r--. 1 root root 41700 Feb 7 2011 ipvsadm-1.26.tar.gz
[root@lvs-01 ~]# ln -s /usr/src/kernels/2.6.32-754.3.5.el6.x86_64/ /usr/local/linux
[root@lvs-01 ~]# tar xf ipvsadm-1.26.tar.gz
[root@lvs-01 ~]# cd ipvsadm-1.26
[root@lvs-01 ipvsadm-1.26]# make && make install
报错
make -C libipvs
make[1]: Entering directory `/root/ipvsadm-1.26/libipvs'
gcc -Wall -Wunused -Wstrict-prototypes -g -fPIC -DLIBIPVS_USE_NL -DHAVE_NET_IP_VS_H -c -o libipvs.o libipvs.c
make[1]: gcc: Command not found
make[1]: *** [libipvs.o] Error 127
make[1]: Leaving directory `/root/ipvsadm-1.26/libipvs'
make: *** [libs] Error 2
解决
[root@lvs-01 ipvsadm-1.26]# yum install gcc libnl* popt* -y
[root@lvs-01 ipvsadm-1.26]# make && make install
2.2加载ip_vs到内核
[root@lvs-01 ipvsadm-1.26]# lsmod|grep ip_vs
[root@lvs-01 ipvsadm-1.26]# ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
[root@lvs-01 ipvsadm-1.26]# lsmod|grep ip_vs
ip_vs 125220 0
libcrc32c 1246 1 ip_vs
ipv6 317340 270 ip_vs,ip6t_REJECT,nf_conntrack_ipv6,nf_defrag_ipv6
二、LVS负载均衡手动配置
1.服务端配置
1.1配置lvs虚拟IP(VIP)
[root@lvs-01 ~]# ifconfig eth0:1 10.0.0.19/24 up
[root@lvs-01 ~]# ifconfig eth0:1
eth0:1 Link encap:Ethernet HWaddr 00:0C:29:01:66:96
inet addr:10.0.0.19 Bcast:10.0.0.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
[root@lvs-01 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
10.0.0.19 0.0.0.0 255.255.255.255 UH 0 0 0 eth0
10.0.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth0
0.0.0.0 10.0.0.2 0.0.0.0 UG 0 0 0 eth0
1.2ipvsadm参数
参数 | 参数说明 |
---|---|
-A | -A –add-service 添加一个带选项的虚拟服务。 |
-t | 指定虚拟服务器的IP地址和端口 |
-s | -s,–scheduler scheduling-method 调度算法 |
-p | 会话保持按秒计算 |
-a | -a在对应的VIP下添加RS节点 |
-g | 指定此LVS的工作模式为-g ,-g为DR模式 |
-l | 指定LVS的工作模式为-l -l为tunnel模式 |
-m | 指定LVS的工作模式为NAT模式 |
-w | 指定RS节点的权重 |
-D | 删除虚拟服务,格式:ipvsadm-D -t |
-C | 清空lvs原有的配置。 |
-set | 设置tcp,tcpfn,udp的连接超时时间 |
1.3添加两台RS(web服务)
[root@lvs-01 ~]# ipvsadm -C(清空原有的配置)
[root@lvs-01 ~]# ipvsadm --set 30 5 60
[root@lvs-01 ~]# ipvsadm -A -t 10.0.0.19:80 -s rr -p 20
[root@lvs-01 ~]# ipvsadm -a -t 10.0.0.19:80 -r 10.0.0.10 -g -w 1
[root@lvs-01 ~]# ipvsadm -a -t 10.0.0.19:80 -r 10.0.0.11 -g -w 1
[root@lvs-01 ~]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 10.0.0.19:80 rr persistent 20
-> 10.0.0.10:80 Route 1 0 0
-> 10.0.0.11:80 Route 1 0 0
2.RS端配置(两台web操作)
2.1arp抑制参数说明:
arp_ignore-INTEGER
定义对目标地址为本地IP的ARP询问不同的应答模式。
0(默认值);回应任何网络接口上对任何本地IP地址的ARP查询请求
1:只回答目标IP地址,是来访网络接口本地地址的ARP查询请求。 2:只应答目标IP地址,是来访网络接口本地地址的ARP查询请求,且来访IP必须在该网络接口的自网段内
3:不回答该网络界面的ARP请求,而只对设置的唯一和连接地址做出回应。
4-7:保留未使用
8:不回应所有(本地地址)的arp请求。
arp_announce-INTEGER
对网络接口上,本地IP地址发出的,ARP回应,做出相应级别的限制
确定不同程度的限制,宣布对来自本地源IP地址发出ARP请求的接口。
0:(默认)在任意网络接口上任意本地地址
1:尽量避免不在该网络接口子网段的本地地址做出arp回应,当发起arp请求的源ip地址是被设置应该经由路由达到此网络接口的时候很有用,此时会检查来访ip是否为所有接口上的子网段内ip之一,如果该来访ip不属于各个网络接口上的子网段内,那么将采用级别2的方式来进行处理。
2:对查询目标使用最适当的本地地址.在此模式下将忽略这个IP数据包的源地址并尝试选择与能与该地址通信的本地地址.首要是选择所有的网络接口的子网中外出访问子网中包含该目标IP地址的本地地址. 如果没有合适的地址被发现,将选择当前的发送网络接口或其他的有可能接受到该ARP回应的网络接口来进行发送.
2.2添加回环端口的VIP及路由
[root@web-01 ~]# ifconfig lo:1 10.0.0.19/32
[root@web-01 ~]# ifconfig lo:1
lo:1 Link encap:Local Loopback
inet addr:10.0.0.19 Mask:0.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
[root@web-01 ~]# route add -host 10.0.0.19 dev lo
[root@web-01 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
10.0.0.19 0.0.0.0 255.255.255.255 UH 0 0 0 lo
10.0.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth0
0.0.0.0 10.0.0.2 0.0.0.0 UG 0 0 0 eth0
2.3arp抑制
[root@web-01 ~]# echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@web-01 ~]# echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
[root@web-01 ~]# echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@web-01 ~]# echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
3.测试
三、LVS负载均衡脚本配置
1.服务端脚本
[root@lvs-01 ~]# cat ipvs.sh
#!/bin/bash
Vip=10.0.0.19
Rip1=10.0.0.10
Rip2=10.0.0.11
Port=80
. /etc/init.d/functions
start(){
ifconfig eth0:1 ${Vip}/24 up
route add -host ${Vip} dev eth0
ipvsadm -C
ipvsadm -A -t ${Vip}:${Port} -s rr
ipvsadm -a -t ${Vip}:${Port} -r ${Rip1} -g
ipvsadm -a -t ${Vip}:${Port} -r ${Rip2} -g
action "ipvs start..." /bin/true
}
stop(){
ifconfig eth0:1 down
route del -host $Vip
ipvsadm -C
action "ipvs stop ..." /bin/true}
restart(){
stop
start
}
case $1 in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
*)
echo "Usage: $0 {stop|stop|restart}"
esac
2.RS端脚本
[root@web-01 ~]# cat ipvs_client.sh
#!/bin/bash
IP=10.0.0.19
. /etc/init.d/functions
start(){
ifconfig lo:1 ${IP}/32 up
route add -host $IP dev lo
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
action "ipvs client start ..." /bin/true
}
stop(){
ifconfig lo:1 down
route del -host $IP
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
action "ipvs client stop ..." /bin/true
}
restart(){
start
stop
}
case $1 in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
*)
echo "Usage: $0 {start|stop|restart}"
esac