环境规划
按照上图配置好ip地址
路由器开启路由转发功能
路由器开启路由功能
[router]#
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sysctl -p
RS服务器的配置
[RS1]#
[RS2]#
vim lvs_dr_rs.sh
#!/bin/bash
vip=10.0.0.100
mask='255.255.255.255'
dev=lo:1
rpm -q httpd &> /dev/null || yum -y install httpd &> /dev/null
service httpd start &> /dev/null && echo "The httpd Server is Ready"
echo "<h1>`hostname`</h1>" > /var/www/html/index.html
case $1 in
start)
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
ifconfig $dev $vip netmask $mask #broadcast $vip up
#route add -host $vip dev $dev
echo "The RS Server is Ready"
;;
stop)
ifconfig $dev down
echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce
;;
*)
echo "Usage: $(basename $0) start|stop"
exit 1
;;
esac
bash lvs_dr_rs.sh start
lvs服务器的配置
[lvs]#
yum install ipvsadm -y
vim lvs_dr_vs.sh
#!/bin/bash
vip='10.0.0.100'
iface='lo:1'
mask='255.255.255.255'
port='80'
rs1='192.168.43.27'
rs2='192.168.43.37'
scheduler='wrr'
type='-g'
case $1 in
start)
ifconfig $iface $vip netmask $mask #broadcast $vip up
iptables -F
ipvsadm -A -t ${vip}:${port} -s $scheduler
ipvsadm -a -t ${vip}:${port} -r ${rs1} $type -w 1
ipvsadm -a -t ${vip}:${port} -r ${rs2} $type -w 1
;;
stop)
ipvsadm -C
ifconfig $iface down
;;
*)
echo "Usage $(basename $0) start|stop"
exit 1
esac
bash lvs_dr_vs.sh start
客户端测试
[Client]#
while : ;do curl http://10.0.0.100;sleep 0.5; done
注意:
- 在 VMware Workstation中,如果在开机状态下添加网卡,是不会添加直连路由的(在没有重启的情况下)
- 以上实验做复杂了,可以将 router 的 192.168.43.7/24 这个ip去掉,配置不变。
Firewall Mark
借助于防火墙标记来分类报文,而后基于标记定义集群服务;可将多个不同的应用使用同一个集群服务进行调度
RS服务器上开启https
[RS1]#
[RS2]#
yum install mod_ssl -y
systemctl restart httpd
防火墙标记
[lvs]#
iptables -t mangle -A PREROUTING -d 10.0.0.100 -p tcp -m multiport --dports 80,443 -j MARK --set-mark 10
添加lvs规则
[lvs]#
ipvsadm -C
ipvsadm -A -f 10 -s rr
ipvsadm -a -f 10 -r 192.168.43.27 -g
ipvsadm -a -f 10 -r 192.168.43.37 -g
客户端测试
[Client]#
while : ;do curl http://10.0.0.100;curl -k https://10.0.0.100;sleep 0.5; done
持久连接
持久连接( lvs persistence )模板:实现无论使用任何调度算法,在一段时间内(默认360s ),能够实现将来自同一个地址的请求始终发往同一个RS
ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]]
持久连接实现方式:
- 每端口持久(PPC):每个端口定义为一个集群服务,每集群服务单独调度
- 每防火墙标记持久(PFWMC):基于防火墙标记定义集群服务;可实现将多个端口上的应用统一调度,即所谓的port Affinity
- 每客户端持久(PCC):基于0端口(表示所有服务)定义集群服务,即将客户端对所有应用的请求都调度至后端主机,必须定义为持久模式
- 举例
ipvsadm -E -f 10 -s rr -p