LVS+KEEPALIVED(1/3)
LVS
准备三台虚拟机,一台当做LVS,另外两台当做real server
实验前先做一个软链接
ln -s /usr/src/kernels/(uname -r)/ /usr/src/linux
#如果没有/usr/src/kernels/uname -r 路径,很可能是因为缺少kernel-develop-(uname -r) 软件包, 可通过 yum install kernel-devel -y 安装
编译安装ipvsadm
wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.26.tar.gz
yum install libnl* popt * -y
tar zxf ipvsadm-1.26.tar.gz
cd ipvsadm-1.26
make
make install
lsmod | grep ip_vs
/sbin/ipvsadm 或者 modprobe ip_vs #动态加载ip_vs模块
cd ../
lsmod | grep ip_vs
配置ipvsadm
ipvsadm -C
ipvsadm --set 30 5 60 #--set tcp tcpfin udp set connection timeout values
ipvsadm -A -t 10.0.0.10:80 -s wrr
ipvsadm -a -t 10.0.0.10:80 -r 10.0.0.8:80 -g -w 1
ipvsadm -a -t 10.0.0.10:80 -r 10.0.0.9:80 -g -w 1
# 此处都是临时操作,重启电脑配置全无,需要编写脚本
LVS的调度算法
固定(静态)调度方法:rr,wrr,dh,sh
动态调度算法:wlc,lc,lblc,lblcr,SED,NQ
一般的网络服务,如HTTP、Mail、MySQL等,常用的LVS调度算法为:
ipvsadm命令参数
1.定义集群服务格式:
(1).添加集群服务:
ipvsadm -A|E -t|u|f service-address [-s scheduler]
[-p [timeout]] [-M netmask]
-A: 表示添加一个新的集群服务
-E: 编辑一个集群服务
-t: 表示tcp协议
-u: 表示udp协议
-f: 表示firewall-Mark,防火墙标记
service-address: 集群服务的IP地址,即VIP
-s 指定调度算法
-p 持久连接时长,如#ipvsadm -Lcn ,查看持久连接状态
-M 定义掩码
ipvsadm -D -t|u|f service-address 删除一个集群服务
ipvsadm -C 清空所有的规则
ipvsadm -R 重新载入规则
ipvsadm -S [-n] 保存规则
2.向集群服务添加RealServer规则:
(1).添加RealServer规则
ipvsadm -a|e -t|u|f service-address -r server-address
[-g|i|m] [-w weight]
-a 添加一个新的realserver规则
-e 编辑realserver规则
-t tcp协议
-u udp协议
-f firewall-Mark,防火墙标记
service-address realserver的IP地址
-g 表示定八义为LVS-DR模型
-i 表示定义为LVS-TUN模型
-m 表示定义为LVS-NAT模型
-w 定义权重,后面跟具体的权值
. /etc/init.d/functions
VIP=10.0.0.10
PORT=80
RIP=(
10.0.0.8
10.0.0.9
10.0.0.82
)
start(){
ifconfig eth0:0 $VIP/24 up
route add -host $VIP dev eth0
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 eth0:0 down
route del -host $VIP dev eth0
}
case "$1" in
start)
start
echo "ipvs is started"
;;
stop)
stop
echo "ipvs is stopped"
;;
restart)
stop
echo "ipvs is stopped"
start
echo "ipvs is started"
;;
*)
echo "Usage:$0 {start|stop|restart}"
esac
每台real server端执行
yum install httpd -y
echo "10.0.0.8" < /var/www/html/index.html
#为了区分俩台real server的内容,另一台写入10.0.0.9
ifconfig lo:0 10.0.0.10/32 up
route add -host 10.0.0.10 dev lo
抑制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
# 1 - 只回答目标IP地址是来访问接口本地地址的ARP查询请求
# 2 - 对查询目标使用最适当的本地地址,在此模式下将忽略这个IP数据包的源地址并尝试选择能与该地址通信的本地地址,首要是选择所有的网络接口的子网中外出访问子网中包含该目标IP地址的本地地址。如果没有合适的地址呗发现,将选择当前发送网络接口或其他的有可能接受到该ARP回应的网络接口来进行发送,限制了使用本地的VIP地址作为有限的网络接口
测试:
客服端访问 VIP
页面会显示其中一个 real server上的内容,重复访问,页面会切换到另一个real server上的内容,实现负载均衡