OSPF + LVS ,突破LVS瓶颈 (转)
突破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配置
#查找与三层交换与lvs调度相连的端口,在本文端口分别为 g1/0/2 g1/0/3 g1/0/6
#把g1/0/2改为三层端口,并配上IP
interfaceGigabitEthernet1/0/2
port link-mode route
ip address 192.168.0.1255.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都配置上
interfaceGigabitEthernet1/0/3
port link-mode route
ip address 192.168.3.1255.255.255.0
ospf timer hello 1
ospf timer dead 4
ospf dr-priority 99
interfaceGigabitEthernet1/0/6
port link-mode route
ip address 192.168.2.1255.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.00.0.0.255
network 192.168.3.00.0.0.255
network 192.168.2.00.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声明出去(1.1.1.1)
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 1.1.1.1/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 {
1.1.1.1
}
}
#LVS实例,在本文采用的是DR模式,WRR调度方式。其实在这种架构下也只能使用DR模式
virtual_server 1.1.1.180 {
delay_loop 6
lb_algo wrr
lb_kind DR
persistence_timeout 60
protocol TCP
real_server 1.1.1.10080 {
weight 1 # 权重
inhibit_on_failure # 若此节点故障,则将权重设为零(默认是从列表中移除)
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 1.1.1.10180 {
weight 1 # 权重
inhibit_on_failure # 若此节点故障,则将权重设为零(默认是从列表中移除)
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 1.1.1.10280 {
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 lxcong
#
# chkconfig: - 20 80
#
# Author:xxxx@xxxx
#有多个虚拟IP,以空格分隔
SNS_VIP="1.1.1.1"
. /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的管理平台,但是一直都做得不好,也希望有相关平台开发经验的能联系我,交流交流、

OSPF + LVS ,突破LVS瓶颈 (转)的更多相关文章
- 突破LVS瓶颈,LVS Cluster部署(OSPF + LVS) - lxcong的运维技术 - 开源中国社区
突破LVS瓶颈,LVS Cluster部署(OSPF + LVS) - lxcong的运维技术 - 开源中国社区 突破LVS瓶颈,LVS Cluster部署(OSPF + LVS)
- LVS+Nginx(LVS + Keepalived + Nginx安装及配置)
(也可以每个nginx都挂在上所有的应用服务器) nginx大家都在用,估计也很熟悉了,在做负载均衡时很好用,安装简单.配置简单.相关材料也特别多. lvs是国内的章文嵩博士的大作,比nginx被广 ...
- PHP程序员如何突破成长瓶颈
PHP因为简单而使用,但不能因为它的简单而限制我们成长!文章给PHP工程师突破成长瓶颈提了一些建议,希望PHPer能够突破自己,有更好的发展. AD: 作为Web开发中应用最广泛的语言之一,PHP有着 ...
- 安装LVS安装LVS和配置LVS的工作比较繁杂
安装LVS安装LVS和配置LVS的工作比较繁杂,读者在配置的过程中需要非常细心和耐心.在本节我们将对其进行详细地介绍.主要包括如下几个核心步骤:1.获取支持LVS的内核源代码如果读者需要使用LVS,需 ...
- 想突破学习瓶颈,为什么要认真的学一下Dubbo?
今天有学生在问,在学习dubbo的时候遇到瓶颈了怎么办,一些东西就感觉就在那里,但是,就是碰不到,摸不着,陷入了迷茫,今天在这里,就跟大家讲一下怎么突破这个瓶颈 先自我介绍一下哈,我是鲁班学院的周瑜老 ...
- 如何突破Jenkins瓶颈,实现集中管理、灵活高效的CI/CD
在过去的几年间,随着DevOps的兴起,持续集成(Continuous Integration)与持续交付(Continuous Delivery)的热度也水涨船高.在本文中,我们将首先带您了解热门的 ...
- PHP程序员如何突破成长瓶颈(php开发三到四年)
看了这篇博文,我正好处于这个阶段,也有心要突破自己,呵呵! 作为Web开发中应用最广泛的语言之一,PHP有着大量的粉丝,那么你是一名优秀的程序员吗?在进行自我修炼的同时,你是否想过面对各种各样的问题, ...
- lvs之 lvs原理架构介绍
一. 概念 lvs的术语: Router:GWIP vs:virtual server,director rs:real server CIP:client IP VIP:virtual server ...
- 负载均衡集群介绍 LVS介绍 LVS调度算法 LVS NAT模式搭建
LVS BAT模式搭建 更改主机名: hostnamectl set-hostname centos7-three bash 准备工作 • 三台机器 • 分发器,也叫调度器(简写为dir) • 内网: ...
随机推荐
- Opencl API解释(一)
首先注明:我用的AMD的opencl,它有很多sample代码,结合代码来解释这些API Opencl 常用的API 汇总总结: 信息查询函数 1. cl_int clGetDeviceInfo(cl ...
- zabbix邮件告警
Zabbix邮件告警看了很多文档,写的那叫一个蛋疼,明明没有发出去邮件,硬要糊弄观众,我也跟着被糊弄. 操作系统环境: CentOS 5.5 x84_64位 Zabbix版本2.2.3 Web服务器: ...
- JavaScript 各种遍历方式详解
为了方便例子讲解,现有数组和json对象如下 var demoArr = ['Javascript', 'Gulp', 'CSS3', 'Grunt', 'jQuery', 'angular']; v ...
- 软件授权协议有什么作用,例如GPL、Apache License、CDDL、EPL这些协议有什么区别?
1.授权协议有什么作用:授权协议就是授予你使用或修改软件等权利,由于软件受到著作权保护,未经授权使用即是侵犯著作权,属于违法行为,所以同意或签署软件授权协议是你使用或修改软件的前提条件.既然是授权协议 ...
- 中文字符串的编码转换(c实现)
中文字符串在c/c++中表示为字节序列,在分词的时候需要根据不同的编码方式进行分词,一般分词器需要转换成统一的编码方式再进行转换,有些分词器如ICTCLAS在分词的时候可以不显示定义编码方式,可以检测 ...
- Maven : 将Jar安装到本地仓库和Jar上传到私服 转
http://blog.csdn.net/we_shell/article/details/49819221 Jar的maven配置 <dependency><groupId> ...
- Android学习(一)
#常见布局 ###线性布局 有一个布局方向,水平或者竖直 在竖直布局下,左对齐.右对齐,水平居中生效 在水平布局下,顶部对齐.底部对齐.竖直居中生效 权重:按比例分配屏幕的剩余宽度或者高度 ###相对 ...
- SQL 中having 和where的区别分析
在select语句中可以使用groupby子句将行划分成较小的组,然后,使用聚组函数返回每一个组的汇总信息,另外,可以使用having子句限制返回的结果集 在select语句中可以使用groupby子 ...
- Day 1 @ RSA Conference Asia Pacific & Japan 2016
# 国内出发 早上8:45的航班,首次从深圳机场乘坐国际航班(先前去日本.欧洲都从香港走),就提前了3个小时出发. 乘taxi到机场30分钟不到,135元.到了T3 4号出发口,发现check-in的 ...
- iOS APNS远程推送(史上最全步骤)
/*****************************************1************************************************/ waterma ...