您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码:  验证码,看不清楚?请点击刷新验证码 必填



  要资料 文章 文库 Lib 视频 Code iProcess 课程 认证 咨询 工具 讲座吧   成长之路  
会员   
 
   
 
  
每天15篇文章
不仅获得谋生技能
更可以追随信仰
 
 
     
   
 订阅
  捐助
突破LVS瓶颈,LVS Cluster部署(OSPF + LVS)
 
作者:snakelxc 来源:开源中国 发布于: 2015-04-07
来自于要资料   1665 次浏览     评价:      
 

前言

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

架构简图

如上图三层设备的路由表,VIP地址183.60.153.100对应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三台: 183.60.153.101 183.60.153.102 183.60.153.103

2.三层设备OSPF配置

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

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

interface GigabitEthernet1/0/2
port link-mode route
ip address 192.168.0.1 255.255.255.0

#配置ospf的参数, timer hello是发送hello包的间隔,timer dead是存活的死亡时间。 默认是10,40。
#hello包是ospf里面维持邻居关系的报文,这里配置是每秒发送一个, 当到4秒还没有收到这个报文,就会认为这个邻居已经丢失,需要修改路由
ospf timer hello 1
ospf timer dead 4
ospf dr-priority 100

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

interface GigabitEthernet1/0/3
port link-mode route
ip address 192.168.3.1 255.255.255.0

ospf timer hello 1
ospf timer dead 4
ospf dr-priority 99



interface GigabitEthernet1/0/6
port link-mode route
ip address 192.168.2.1 255.255.255.0

ospf timer hello 1
ospf timer dead 4
ospf dr-priority 98



#配置ospf
ospf 1
area 0.0.0.0
network 192.168.0.0 0.0.0.255
network 192.168.3.0 0.0.0.255
network 192.168.2.0 0.0.0.255

3.LVS调度机的OSPF配置

a.安装软路由软件quagga

yum –y install quagga

b.配置zerba.conf

vim /etc/quagga/zebra.conf

hostname lvs-route-1
password xxxxxx
enable password xxxxxx

log file /var/log/zebra.log
service password-encryption

c.配置ospfd.conf

vim /etc/quagga/ospfd.conf

 

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

log file /var/log/ospf.log
log stdout
log syslog
interface eth0
ip ospf hello-interval 1
ip ospf dead-interval 4
router ospf
ospf router-id 192.168.0.1
log-adjacency-changes
auto-cost reference-bandwidth 1000
network 183.60.153.100/32 area 0.0.0.0
network 192.168.0.0/24 area 0.0.0.0

d.开启IP转发

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

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

e.开启服务

/etc/init.d/zebra start

/etc/init.d/ospfd start

chkconfig zebra on

chkconfig ospfd on

4.LVS keepalived配置

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

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

vim /etc/keepalived/keepalived.conf

#keepalived的全局配置global_defs { 
notification_email {

lxcong@gmail.com
}
notification_email_from lvs_notice@gmail.com
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id Ospf_LVS_1
}

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

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

state MASTER #备份服务器上将MASTER改为BACKUP
interface eth0 ##VIP 捆绑网卡
virtual_router_id 100 ##LVS_ID 在同一个网络中,LVS_ID是唯一的
priority 100 #选举的优先级,优先级大的为MASTER 备份服务上将100改为99
advert_int 1 #发送vrrp的检查报文的间隔,单位秒
authentication { ##认证信息。可以是PASS或者AH
auth_type PASS
auth_pass 08856CD8
}
virtual_ipaddress {
183.60.153.100
}
}

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

virtual_server 183.60.153.100 80 {
delay_loop 6
lb_algo wrr
lb_kind DR
persistence_timeout 60
protocol TCP

real_server 183.60.153.101 80 {
weight 1 # 权重
inhibit_on_failure # 若此节点故障,则将权重设为零(默认是从列表中移除)
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 80
}

}

real_server 183.60.153.102 80 {
weight 1 # 权重
inhibit_on_failure # 若此节点故障,则将权重设为零(默认是从列表中移除)
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 80
}

}

real_server 183.60.153.103 80 {
weight 1 # 权重
inhibit_on_failure # 若此节点故障,则将权重设为零(默认是从列表中移除)
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 80
}

}

}

b.启动keepalived

/etc/init.d/keepalived start

chkconfig keepalived on

5.realserver配置

a.添加启动服务脚本/etc/init.d/lvs_realserver

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

#!/bin/sh
### BEGIN INIT INFO
# Provides: lvs_realserver
# Default-Start: 3 4 5
# Default-Stop: 0 1 6
# Short-Description: LVS real_server service scripts
# Description: LVS real_server start and stop controller
### END INIT INFO
# Copyright 2013 kisops.com
#
# chkconfig: - 20 80
#
# Author: k_ops_yw@ijinshan.com

#有多个虚拟IP,以空格分隔
SNS_VIP="183.60.153.100"
. /etc/rc.d/init.d/functions
if [[ -z "$SNS_VIP" ]];then
echo 'Please set vips in '$0' with SNS_VIP!'
fi

start(){
num=0
for loop in $SNS_VIP
do
/sbin/ifconfig lo:$num $loop netmask 255.255.255.255 broadcast $loop
/sbin/route add -host $loop dev lo:$num
((num++))
done
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
sysctl -e -p >/dev/null 2>&1
}

stop(){
num=0
for loop in $WEB_VIP
do
/sbin/ifconfig lo:$num down
/sbin/route del -host $loop >/dev/null 2>&1
((num++))
done
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
sysctl -e -p >/dev/null 2>&1
}

case "$1" in
start)
start
echo "RealServer Start OK"
;;
stop)
stop
echo "RealServer Stoped"
;;
restart)
stop
start
;;
*)
echo "Usage: $0 {start|stop|restart}"
exit 1
esac
exit 0

b.启动服务

service lvs_realserver start
chkconfig lvs_realserver on

总结

到这里,LVS Cluster架构已部署完了,如果各位有其他更好的LVS扩展方式请留意或者联系我,互相交流 QQ:83766787。另外以前做了一个LVS的管理平台,但是一直都做得不好,也希望有相关平台开发经验的能联系我,交流交流。

   
 订阅
  捐助
相关文章

阻碍使用企业架构的原因及克服方法
世界级企业架构的行业挑战
企业架构和SOA架构的角色将融合
什么最适合您的组织?
相关文档

企业架构与ITIL
企业架构框架
Zachman企业架构框架简介
企业架构让SOA落地
相关课程

企业架构设计
软件架构案例分析和最佳实践
嵌入式软件架构设计—高级实践
企业级SOA架构实践
 

专家视角看IT与架构
软件架构设计
面向服务体系架构和业务组件
人人网移动开发架构
架构腐化之谜
谈平台即服务PaaS


面向应用的架构设计实践
单元测试+重构+设计模式
软件架构师—高级实践
软件架构设计方法、案例与实践
嵌入式软件架构设计—高级实践
SOA体系结构实践

相关咨询服务
应用架构设计与构建


锐安科技 软件架构设计方法
成都 嵌入式软件架构设计
上海汽车 嵌入式软件架构设计
北京 软件架构设计
上海 软件架构设计案例与实践
北京 架构设计方法案例与实践
深圳 架构设计方法案例与实践
嵌入式软件架构设计—高级实践
更多...   
 
 
实录 基于Tensorflow进行深度学习
主讲:钱兴会
曾任联想集团大数据平台架构师
 
实录 区块链数据库的原理与应用
主讲:王金剑
区块链数据库SunlightDB创始人,CSDN认证专家
 
 
 
每天2个文档/视频
扫描微信二维码订阅
订阅技术月刊
获得每月300个技术资源
 
 

关于我们 | 联系我们 | 京ICP备10020922号 京公海网安备110108001071号