- 一、LVS负载均衡安装
- 1.基础环境配置
- 2.部署lvs
- 2.1下载编译ipvsadm
- 二、LVS负载均衡手动配置
- 1.服务端配置
- 1.1配置lvs虚拟IP(VIP)
- 1.2ipvsadm参数
- 1.3添加两台RS(web服务)
- 2.RS端配置(两台web操作)
- 2.1arp抑制参数说明:
- 2.2添加回环端口的VIP及路由
- 2.3arp抑制
- 3.测试
- 三、LVS负载均衡脚本配置
一、LVS负载均衡安装
1.基础环境配置
1.1三台虚拟机
[root@lvs-01 ~]
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 ~]
[root@web-01 ~]
[root@web-02 ~]
[root@web-01 ~]
[root@lvs-01~]
10.0.0.10
[root@lvs-01~]
10.0.0.11
2.部署lvs
2.1下载编译ipvsadm
[root@lvs-01 ~]
[root@lvs-01 ~]
-rw-r--r--. 1 root root 41700 Feb 7 2011 ipvsadm-1.26.tar.gz
[root@lvs-01 ~]
[root@lvs-01 ~]
[root@lvs-01 ~]
[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]
2.2加载ip_vs到内核
[root@lvs-01 ipvsadm-1.26]
[root@lvs-01 ipvsadm-1.26]
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]
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 ~]
[root@lvs-01 ~]
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 ~]
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 ~]
[root@lvs-01 ~]
[root@lvs-01 ~]
[root@lvs-01 ~]
[root@lvs-01 ~]
[root@lvs-01 ~]
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 ~]
[root@web-01 ~]
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 ~]
[root@web-01 ~]
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 ~]
#!/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 ~]
#!/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