实验规划:
client | 桥接 | eth0 | 192.168.1.123/24 | 网关:192.168.1.200 |
router | 桥接 | eth1 | 192.168.1.200/24 | |
仅主机 | eth0 | 192.168.8.200/24 | ||
eth0:1 | 10.0.0.200/8 | |||
LVS | 仅主机 | eth0 | DIP192.168.8.7/24 | 网关:192.168.8.200 |
VIP10.0.0.100/8 | ||||
RS1 | 仅主机 | eth0 | 192.168.8.17/24 | 网关:192.168.8.200 |
VIP10.0.0.100/8 | ||||
RS2 | 仅主机 | eth0 | 192.168.8.27/24 | 网关:192.168.8.200 |
VIP10.0.0.100/8 |
主机router:开启ip转发
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
主机RS1,RS2运行如下脚本:
#!/bin/bash
vip=10.0.0.100
mask='255.0.0.0'
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 "`hostname`
" > /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
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
~
限制响应级别: arp_ignore为1
仅在请求的目标IP配置在本地主机的接收到请求报文的接口上时,才给予响应
限制通告级别: arp_announce为2
必须避免将接口信息向非本网络进行通告
主机LVS运行如下脚本:
#!/bin/bash
vip='10.0.0.100'
iface='eth0:1'
mask='255.0.0.0'
port='80'
rs1='192.168.8.17'
rs2='192.168.8.27'
scheduler='wrr'
type='-g' #dr
rpm -q ipvsadm &> /dev/null || yum -y install ipvsadm &> /dev/null
case $1 in
start)
ifconfig $iface $vip netmask $mask
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
echo "the VS server is ready!"
;;
stop)
ipvsadm -C
ifconfig $iface down
echo "the VS server is canceled!"
;;
*)
echo "Usage $(basename $0) start|stop"
exit 1
;;
esac
~
ipvs scheduler调度算法:分为4种静态方法和6种动态方法
静态:
1、RR:轮询
2、WRR:加权轮询
3、SH:源IP地址hash,来自同一IP地址的请求,始终发往第一次挑中的RS,从而实现会话绑定
4、DH:目标地址hash,将发往同一目标地址的请求始终转发至第一次挑中的RS,
典型场景:正向代理缓存场景中的负载均衡,如:宽带运营商
正向,反向代理:离服务端近,反向,离客户端近,正向
动态:
主要根据每个RS当前的负载状态及调试算法进行调试 Overhead=value 较小的RS将被调度
1、LC :适用于长连接应用
Overhead=activeconns(活动链接)*256+inactiveconns (非活动链接)
谁值小,说明负载小,优选调度
2、WLC:默认调度方法
Overhead=(activeconns*256+inactiveconns)/weight(权重)
缺点:第一次大家值都一样,都是0
3、SED
Overhead=(activeconns+1)*256/weight
初始连接高权重优先,针对上面的缺点,先都加1
缺点:可能造成权重高的一样在调度,一直没能超过低的值
例如:权重比10:1 (0+1)*256/10<(0+1)*256/1 (1+1)*256/10<(0+1)*256/1
4、NQ
针对上面的缺点,第一次不考虑权重,均匀分配,后续SED
5、LBLC 动态的DH算法
场景:根据负载状态实现正向代理
6、LBLCR 带复制功能的LBLC
解决LBLC负载不均衡问题,从负载重的复制到负载轻的RS
主机Client:
[root@client ~]#curl 10.0.0.100
RS2
[root@client ~]#curl 10.0.0.100
RS1
[root@client ~]#curl 10.0.0.100
RS2
[root@client ~]#curl 10.0.0.100
RS1
yum从光盘安装,修改
cd /
cd mnt
mkdir cdrom
cd ..
mount /dev/sr0 /mnt/cdrom/
vim /etc/yum.repos.d/CentOS-Media.repo
[dvd]
name=Media
baseurl=file:///mnt/cdrom
enabled=1
gpgcheck=0