ospf+lvs 2.0 集群配置

回复 收藏

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转发如下:



流量图:
   




2016-03-10 09:48 举报
已邀请:
0

Linuxpp

赞同来自:

stduy
0

Nyemu

赞同来自:

学习。

回复帖子,请先登录注册

退出全屏模式 全屏模式 回复
评分
可选评分理由: