突破LVS瓶颈,LVS Cluster部署(OSPF + LVS)

目录:[ - ]

  • 前言
  • 架构简图
  • 架构优势
  • 部署方法
  • 1.硬件资源准备
  • 2.三层设备OSPF配置
  • 3.LVS调度机的OSPF配置
  • a.安装软路由软件quagga
  • b.配置zerba.conf
  • c.配置ospfd.conf
  • d.开启IP转发
  • e.开启服务
  • 4.LVS keepalived配置
  • a.修改配置文件 keepalived.conf ,在Cluster架构中,所有调度机用相同的配置文件
  • b.启动keepalived
  • 5.realserver配置
  • a.添加启动服务脚本/etc/init.d/lvs_realserver
  • b.启动服务
  • 总结

前言

LVS大家应该很熟悉,这款优秀的开源软件基本成为了IP负载均衡的代言词。但在实际的生产环境中会发现,LVS调度在大压力下很容易就产生瓶颈,其中瓶颈包括ipvs内核模块的限制,CPU软中断,网卡性能等,当然这些都是可以调优的,关于LVS的调优,会在这里详细讲 LVS调优攻略 。回到主题,那当无法避免的单台LVS调度机出现了性能瓶颈,有什么办法呢?在本文就来介绍如何横向扩展LVS调度机

架构简图

 

如上图三层设备的路由表,VIP地址1.1.1.1对应nexthop有三个地址,这三个地址是三台lvs调度机的地址。这样便可达到效果:用户访问------>VIP------>三台LVS调度机------>分发到多台RealServe

架构优势

1.LVS调度机自由伸缩,横向扩展(最大8台,受限于三层设备允许的等价路由数目)

2.LVS调度资源全利用,All Active。不存在备份机

部署方法1.硬件资源准备

三层设备: 本文用的是h3c 5800三层交换机

LVS调度机三台: 192.168.0.2 192.168.2.2 192.168.3.2

Realserver三台:  1.1.1.100 1.1.1.101 1.1.1.102

2.三层设备OSPF配置

01#查找与三层交换与lvs调度相连的端口,在本文端口分别为 g1/0/2 g1/0/3 g1/0/6

02

03#把g1/0/2改为三层端口,并配上IP

04

05interface GigabitEthernet1/0/2

06port link-mode route

07ip address 192.168.0.1 255.255.255.0

08

09#配置ospf的参数, timer hello是发送hello包的间隔,timer dead是存活的死亡时间。默认是10,40。

10

11#hello包是ospf里面维持邻居关系的报文,这里配置是每秒发送一个,当到4秒还没有收到这个报文,就会认为这个邻居已经丢失,需要修改路由

12ospf timer hello 1

13ospf timer dead 4

14ospf dr-priority 100

15

16#如此类推,把g1/0/3 g1/0/6都配置上

17

18interface GigabitEthernet1/0/3

19port link-mode route

20ip address 192.168.3.1 255.255.255.0

21

22ospf timer hello 1

23ospf timer dead 4

24ospf dr-priority 99

25

26

27

28interface GigabitEthernet1/0/6

29port link-mode route

30ip address 192.168.2.1 255.255.255.0

31

32ospf timer hello 1

33ospf timer dead 4

34ospf dr-priority 98

35

36

37

38#配置ospf

39ospf 1

40area 0.0.0.0

41network 192.168.0.0 0.0.0.255

42network 192.168.3.0 0.0.0.255

43network 192.168.2.0 0.0.0.255

3.LVS调度机的OSPF配置a.安装软路由软件quagga

1yum –y install quagga

b.配置zerba.conf

vim /etc/quagga/zebra.conf

1hostname lvs-route-1

2password xxxxxx

3enable password xxxxxx

4

5log file /var/log/zebra.log

6service password-encryption

c.配置ospfd.conf

vim /etc/quagga/ospfd.conf

01#ospf的配置类似于上面三层设备,注意需要把vip声明出去(1.1.1.1)

02

03log file /var/log/ospf.log

04log stdout

05log syslog

06interface eth0

07ip ospf hello-interval 1

08ip ospf dead-interval 4

09router ospf

10ospf router-id 192.168.0.1

11log-adjacency-changes

12auto-cost reference-bandwidth 1000

13network 1.1.1.1/32 area 0.0.0.0

14network 192.168.0.0/24 area 0.0.0.0

d.开启IP转发

1sed –i ‘/net.ipv4.ip_forward/d’ /etc/sysctl.conf

2

3echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.confsysctl –p

e.开启服务

1/etc/init.d/zebra start

2

3/etc/init.d/ospfd start

4

5chkconfig zebra on

6

7chkconfig ospfd on

4.LVS keepalived配置

在此架构下,LVS只能配置成DR模式。如果要配置成NAT模式,我的想法是,需要参照上面的方式让LVS调度机与内网三层设备配置ospf,此方法未验证,有其他方案请告知。

a.修改配置文件 keepalived.conf ,在Cluster架构中,所有调度机用相同的配置文件

vim /etc/keepalived/keepalived.conf

01#keepalived的全局配置global_defs {

02   notification_email {

03

04   [email protected]

05   }

06   notification_email_from [email protected]

07   smtp_server 127.0.0.1

08   smtp_connect_timeout 30

09   router_id Ospf_LVS_1

10}

11

12#VRRP实例,在这个架构下所有的LVS调度机都配置成MASTER

13

14vrrp_instance LVS_Cluster{  ##创建实例 实例名为LVS_Cluster

15

16    state MASTER #备份服务器上将MASTER改为BACKUP

17    interface eth0    ##VIP 捆绑网卡

18    virtual_router_id 100   ##LVS_ID  在同一个网络中,LVS_ID是唯一的

19    priority 100    #选举的优先级,优先级大的为MASTER  备份服务上将100改为99

20    advert_int 1  #发送vrrp的检查报文的间隔,单位秒

21    authentication {  ##认证信息。可以是PASS或者AH

22        auth_type PASS

23        auth_pass 08856CD8

24    }

25    virtual_ipaddress {

26        1.1.1.1

27    }

28}

29

30#LVS实例,在本文采用的是DR模式,WRR调度方式。其实在这种架构下也只能使用DR模式

31

32virtual_server 1.1.1.1 80 {

33    delay_loop 6

34    lb_algo wrr

35    lb_kind DR

36    persistence_timeout 60

37    protocol TCP

38

39real_server 1.1.1.100 80 {

40    weight 1                                           # 权重

41    inhibit_on_failure                               # 若此节点故障,则将权重设为零(默认是从列表中移除)

42    TCP_CHECK {

43        connect_timeout 3

44        nb_get_retry 3

45        delay_before_retry 3

46        connect_port 80

47    }

48

49}

50

51real_server 1.1.1.101 80 {

52    weight 1                                           # 权重

53    inhibit_on_failure                               # 若此节点故障,则将权重设为零(默认是从列表中移除)

54    TCP_CHECK {

55        connect_timeout 3

56        nb_get_retry 3

57        delay_before_retry 3

58        connect_port 80

59    }

60

61}

62

63real_server 1.1.1.102 80 {

64    weight 1                                           # 权重

65    inhibit_on_failure                               # 若此节点故障,则将权重设为零(默认是从列表中移除)

66    TCP_CHECK {

67        connect_timeout 3

68        nb_get_retry 3

69        delay_before_retry 3

70        connect_port 80

71    }

72

73}

74

75}

 

b.启动keepalived

1/etc/init.d/keepalived start

2

3chkconfig keepalived on

5.realserver配置a.添加启动服务脚本/etc/init.d/lvs_realserver

请自行按需要修改脚本中SNS_VIP变量

01#!/bin/sh

02### BEGIN INIT INFO

03# Provides: lvs_realserver

04# Default-Start:  3 4 5

05# Default-Stop: 0 1 6

06# Short-Description: LVS real_server service scripts

07# Description: LVS real_server start and stop controller

08### END INIT INFO

09#  Copyright 2013 lxcong

10#

11#  chkconfig: - 20 80

12#

13#  Author:  xxxx@xxxx

14

15#有多个虚拟IP,以空格分隔

16SNS_VIP="1.1.1.1"

17. /etc/rc.d/init.d/functions

18if [[ -z "$SNS_VIP"  ]];then

19    echo 'Please set vips in '$0' with SNS_VIP!'

20fi

21

22start(){

23num=0

24for loop in $SNS_VIP

25do

26    /sbin/ifconfig lo:$num $loop netmask 255.255.255.255 broadcast $loop

27    /sbin/route add -host $loop dev lo:$num

28    ((num++))

29done

30echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore

31echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce

32echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore

33echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce

34sysctl -e -p >/dev/null 2>&1

35}

36

37stop(){

38num=0

39for loop in $WEB_VIP

40do

41    /sbin/ifconfig lo:$num down

42    /sbin/route del -host $loop >/dev/null 2>&1

43    ((num++))

44done

45echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore

46echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce

47echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore

48echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce

49sysctl -e -p >/dev/null 2>&1

50}

51

52case "$1" in

53    start)

54        start

55        echo "RealServer Start OK"

56        ;;

57    stop)

58        stop

59        echo "RealServer Stoped"

60        ;;

61    restart)

62        stop

63        start

64        ;;

65    *)

66         echo "Usage: $0 {start|stop|restart}"

67         exit 1

68esac

69exit 0

b.启动服务

1service lvs_realserver start

2chkconfig lvs_realserver on


你可能感兴趣的:(服务器)