Lvs 2.0部署
目前线上两台lvs 用keepalived主备模式,性能受限于单台机器,如何横向扩展lvs?提高lvs的调度性能?
为了解决上面这些问题,所以我们开始尝试LVS(DR)通过ospfd,做lvs集群,实现一个VIP,多台LVS同时工作提供服务,不存在热备机器,如图:
如上图三层设备的路由表,VIP地址192.168.143.102对应nexthop有二个地址,这二个地址是二台lvs调度机的地址。这样便可达到效果:用户访问------>VIP------>二台LVS调度机------>分发到多台RealServe(nginx)
架构优势
1.LVS调度机自由伸缩,横向扩展(最大8台,受限于三层设备允许的等价路由数目)
2.LVS调度资源全利用,All Active。不存在备份机
3. 做到了真正的高可用,某台LVS机器宕机后,不会影响服务(但因为华3设备ospfd调度算法的问题,一台宕机会使所有的长连接的断开重连,目前还无法解决;思科的设备已经支持一至性哈希算法,不会出现这个问题)
部署方法
1.硬件资源准备
路由器: 本文用的是Huawei AR2240-S Route(没有空闲三层交换机测试用路由器)192.168.143.147
LVS调度机二台: 192.168.143.226,192.168.143.227
Realserver二台: 192.168.143.219,192.168.143.159
2.华为路由器配置
ospf 110
area 0.0.0.0
network 192.168.143.0 0.0.0.255
interface GigabitEthernet0/0/0
ip address 192.168.143.147 255.255.255.0
ospf timer hello 1
ospf timer dead 4
3.服务器配置(lvs服务器配置都一样)
yum install quagga keepalived ipvsadm expect ntp –y
a、设置时区,同步ntp时间;
rm /etc/localtime -rf
ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
echo "*/5 * * * * /usr/sbin/ntpdate time.windows.com >/dev/null 2>&1" > /var/spool/cron/root
关闭selinx
cp -rf /etc/selinux/config /etc/selinux/config_bak
sed -i '/^SELINUX/s/SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
setenforce 0
开启转发(dr|tun都可以开启)
sed -i '/^net.ipv4.ip_forward/s/net.ipv4.ip_forward = .*/net.ipv4.ip_forward = 1/' /etc/sysctl.conf
sysctl -p
b、配置zebra(第二台lvs配置文件一样,修改hostname lvs-p2).
[root@lvs-p1 ~]# cat /etc/quagga/zebra.conf
hostname lvs-p1
password juanpi2016
enable password juanpi2016
c、配置ospfd.conf (第二台lvs配置文件一样,修改hostname lvs-p2,ospf router-id 192.168.143.227 , network 192.168.143.227/24,这几个值).
#####################################
[root@lvs-p1 ~]# cat /etc/quagga/ospfd.conf
hostname lvs-p1
password 8 5ubmJdMAQxXbs
enable password 8 4fcJB8NFa.0v6
log stdout
log syslog
service password-encryption
!
!
interface eth0
!
interface eth0
ip ospf hello-interval 1
ip ospf dead-interval 4
!
interface lo
!
router ospf
ospf router-id 192.168.143.226
log-adjacency-changes
! Important: ensure reference bandwidth is consistent across all routers
auto-cost reference-bandwidth 1000
network 192.168.143.226/24 area 0.0.0.0
network 192.168.143.102/32 area 0.0.0.0
!
line vty
!
#####################################
启动服务
/etc/init.d/zebra start
/etc/init.d/ospfd start
Chkconfig zebra on
Chkconfig ospfd on
d、配置vip(二台lvs配置文件一样)
#####################################
[root@lvs-p1 ~]# cat /etc/sysconfig/network-scripts/ifcfg-lo:01
#for lvs-dr-real-server
DEVICE=lo:01
IPADDR=192.168.143.102
NETMASK=255.255.255.255
ONBOOT=yes
#####################################
启动ifcfg-lo:01网卡
ifup ifcfg-lo:01
e、后端realserver(nginx) 配置
安装nginx(略)
realserver(nginx)上的脚本如下
#####################################
[root@localhost ~]# cat /opt/lvsReal.sh
#!/bin/bash
# description: Config realserver
#Written by : dege
SRV_GATE_VIP1=192.168.143.102
. /etc/rc.d/init.d/functions
case "$1" in
start)
/sbin/ifconfig lo:0 $SRV_GATE_VIP1 netmask 255.255.255.255 broadcast $SRV_GATE_VIP
#/sbin/route add -host $SRV_GATE_VIP dev lo:0
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
echo "RealServer Start OK"
;;
stop)
/sbin/ifconfig lo:0 down
#/sbin/route del $SNS_VIP >/dev/null 2>&1
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
echo "RealServer Stoped"
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
exit 0
#####################################
运行命令
Sh /opt/lvsReal.sh start
echo ‘Sh /opt/lvsReal.sh start’>>/etc/rc.local
f、配置keepalived((第二台lvs配置文件一样)
#####################################
[root@lvs-p1 ~]# cat /etc/keepalived/keepalived.conf
virtual_server 192.168.143.102 80 {
delay_loop 6
lb_algo wlc
lb_kind DR
protocol TCP
real_server 192.168.143.219 80 {
weight 6
TCP_CHECK {
connect_port 80
connect_timeout 20
nb_get_retry 3
delay_before_retry 5
}
}
real_server 192.168.143.159 80 {
weight 6
TCP_CHECK {
connect_port 80
connect_timeout 20
nb_get_retry 3
delay_before_retry 5
}
}
}
#####################################
启动服务
/etc/init.d/keepalived start
Chkconfig keepalived on
测试方法
在其他几台服务器上安装httpd-tools,运行如下命令压访问vip:102
while true; do ab -n10000 -c20 http://192.168.143.102/index.html; arp -d 192.168.143.102; done
1、lvs后端转发情况如下:
226,227两台流量如下,基本一样:
2、将226 shutdown,有收敛,流量在227,ping 192.168.143.102不丢包。
Zabbix 流量截图:
3、将192.168.143.226开机,两台lvs 都有负载,lvs转发情况:
两lvs台服务器的流量如下:
4、停掉192.168.143.227,流量到192.168.143.226上如下:
5、开启192.168.143.227,两台lvs都负载。
lvs转发如下:
流量图:
编辑回复