基于openstack搭建百万级并发负载均衡器的解决方案
最近,喜欢研究一些国外技术大咖们的文章,而这篇文章是基于openstack负载均衡器的解决方案,做的一些总结~希望能够给小伙伴带来一些灵感或者帮助。
openstack现有的负载均衡解决方案,无论是lbaas plugin还是octavia,后端都是基于haproxy的,由于haproxy本身的限制,其单任务最高并发不会超过5万,经本人亲测,利用octavia,在openstack云主机上运行haproxy最高达到过3万并发,所有如果要想达到更高基本的并发,就需要重新设计负载均衡的架构了。
废话不多,先上实现架构图:
如上图,利用lvs的dr转发模式把外部请求分发到多个haproxy,然后由haproxy提供四、七层负载均衡服务。借助这种方式我们就能横向扩展haproxy集群了,整个集群的能力最终由LVS决定,由于lvs特殊的流量转发的处理方式,所以其性能我们完全没必要担心(后面会有解释)。
【01 LVS】
Linux Virtual Server是一个由章文嵩博士发起的一个开源项目,它的官方网站是 http://www.linuxvirtualserver.org现在 LVS 已经是 Linux 内核标准的一部分。LVS能提供高性能的四层负载均衡功能。
LVS有三种转发方式:DR、NAT、TUN,其中DR模式下LVS仅处理二层包头,LVS仅作为访问入口,不作为网关,且后端返回流量不需要进过LVS,因此,LVS对于大流量的转发有很高的处理性能。这次我们借助LVS的DR转发模式提供高速转发功能,在结合haproxy丰富的4、7层功能,来达到我们的需求。
【02 Keepalived】
Keepalived顾名思义keepalilved是实现多机热备的软件,LVS作为负载均衡集群的访问入口,自然要考虑到单点故障的问题,keepaived+lvs的模式是目前业内的首选解决方案,当前端接收请求的lvs虚机出现健康问题时,keepalived会迅速转移VIP到健康的LVS虚机上,保证整个业务不间断。
另外Keepalived不仅能监控前端lvs的健康状况,还能监控后端haproxy集群每台haproxy虚机的健康状况,实时剔除不健康的虚机,并发出报警。
【03 VIP】
整个集群对外的IP,VIP分布在haproxy集群的每台机器及LVS虚机上(只能有一台LVS虚机拥有VIP),LVS上的VIP作为请求的目的IP,haproxy上的VIP作为应答的原IP。配置VIP有很多注意事项,我后面会给出一些配置链接作为参考。
【04 RIP】
haproxy虚机的真实IP,用于haproxy集群内部通讯,接收lvs分发过来的流量,及管理虚机的IP。
【05 Haproxy】
这个就不做介绍了,凡是在openstack上捣鼓负载均衡的小伙伴们对它应该有了深入的了解了。
参考链接:
LVS相关:
http://www.cnblogs.com/liwei0526vip/p/6370103.html
http://www.cnblogs.com/czh-liyu/archive/2011/11/29/2267963.html
http://www.cnblogs.com/danbo/p/4609202.html
keepalived相关:
http://freeloda.blog.51cto.com/2033581/1280962
http://www.cnblogs.com/edisonchou/p/4281978.html
http://blog.csdn.net/xyang81/article/details/52554398
更详细的资料,小伙伴们就需要自己在网上找了,自己动手试着搭建一套,能对上面架构有更深刻的理解。
注意!!!(在小伙伴们迫不及待想验证这个架构时一定要先阅读这儿)
参考链接的配置是在正常物理机上的配置,但在openstack环境中,有以下几点需要注意:
1、 openstack默认开启了防arp欺骗(这个会过滤掉源IP和目的IP为VIP的数据包),且在ovs流表和iptables规则中均有防arp欺骗的规则,在配置文件中关闭防arp欺骗,也只是去掉了ovs流表的规则,iptables中的规则依然存在。正确的解决方案是在配置集群之前要为每个haproxy虚拟机的port添加allowed_address_pairs。添加方法:neutron port-update--allowed-address-pair ip_address=VIP
2、 openstack会利用iptables规则检查非法的tcp连接(即:请求和应答不在同一端口上的连接(有没有一种它就是故意针对lvs dr转发模式的感觉)),这里解决方案给出两种:
2.1如果仅是在验证阶段,改变下面三个内核参数:
net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-arptables = 0
2.2如果小伙伴觉得方案可行,想要实现代码时:
修改neutron代码:neutron/agent/linux/iptables_firewall.py,
需要注释掉625行(仅此一行,小伙伴们大可放心,不会对neutron功能有任何影响)
3、由于VIP是我们手动设置上的,在neutron数据库中没有记录,neutron为后续虚拟机分配IP时可能会重复,因此我们要先创建一个port占用VIP,创建方法:
neutron port-create--fixed-ip ip_address=VIP
最后给出实现该方案的编码建议:
依然利用octavia的架构,octavia-api不变。添加octavia.amphora.drivers、octavia.compute.drivers和octavia.network.drivers,可根据用户创建负载均衡时选择的最大连接数决定启动多少haproxy虚机。
另,还可实现octavia的多provider,如果用户要求并发数不多,后端可用namespace,如果用户要求稍大并发可用octavia的默认方法用单个虚拟机haproxy实现,如果要求大并发就用lvs+haproxy的方式实。
转载于:https://www.cnblogs.com/xiaohanlin/p/8570275.html
基于openstack搭建百万级并发负载均衡器的解决方案相关推荐
- 远程办公是巨头游戏?十倍扩容,他们如何做到百万级并发流量
疫情发生后,除了Zoom这样深耕视频会议多年的软件,钉钉.企业微信.飞书等一大批互联网巨头也开通了免费服务,凭借着自身庞大的资源四处招揽用户. 据说,远程办公工具是2020年的第一个风口. 疫情发生后 ...
- 读书笔记第四讲:《百万级并发商品服务架构解密》丁鸣亮
本文是读书笔记第四讲:网易考拉海购商品中心2017年商品中心架构,百万级并发商品服务 架构解密,作者:丁鸣亮 文章目录 1.前言:电商平台的商品服务 2.考拉:商品服务的"黑历史" ...
- 总结:如何使用redis缓存加索引处理数据库百万级并发
前言:事先说明:在实际应用中这种做法设计需要各位读者自己设计,本文只提供一种思想.准备工作:安装后本地数redis服务器,使用mysql数据库,事先插入1000万条数据,可以参考我之前的文章插入数据, ...
- 一台mysql并发能力_mysql怎么支撑百万级并发-对于同一个表,MySQL支持多少个并发操作...
到服务器的SQL最大并发连接数为16384.mysql百万级数据查询. 受服务器配置和网络环境的限制,实际服务器支持的并发连接数量会更小. MySQL流量大,并发问题高 因为mysql是一个线程的连接 ...
- 使用redis缓存加索引处理数据库百万级并发
使用redis缓存加索引处理数据库百万级并发 前言:事先说明:在实际应用中这种做法设计需要各位读者自己设计,本文只提供一种思想.准备工作:安装后本地数redis服务器,使用mysql数据库,事先插入1 ...
- 10月13日云栖精选夜读:【云栖大会】阿里云和红帽达成合作为百万级客户提供更多企业级解决方案...
在与全球第三大公共云厂商合作后,红帽进一步扩大了全球云计算领域的服务范围.阿里云客户可以在阿里云云市场购买按量付费的红帽企业级Linux产品,可以充分应用红帽的云解决方案组合.作为双方合作项目之一,已 ...
- 基于Netty的百万级推送服务设计要点
1. 背景 1.1. 话题来源 最近很多从事移动互联网和物联网开发的同学给我发邮件或者微博私信我,咨询推送服务相关的问题.问题五花八门,在帮助大家答疑解惑的过程中,我也对问题进行了总结,大概可以归纳为 ...
- 类似微信陌陌app百万级并发系统源码转让
产品包含WEB端/android/IOS端/web管理端 功能完善, 具体请联系团队 QQ 2768232187 产品为客户上线产品,目前单台服务器并发15W用户左右,系统做过百万级压力测试,产品功 ...
- mqtt服务器搭建php,百万级并发 之 MQTT 服务器
一.简介 整体是利用MQTTBroker + MQTTClient 实现服务端(HTTP服务器)和终端(网关)的通信过程. 其中MQTTBroker是采用Go语言实现,MQTTClient是采用PH ...
最新文章
- 牛客网NOIP赛前集训营-普及组(第一场)
- (转)rlwrap真是一个好东西
- 如何用ASP.NET加密Cookie数据过程分析
- 《Python数据科学实践指南》——0.2节如何成为数据科学家
- .NET6之MiniAPI(十七):缓存
- 自学c语言后的感受,一路走来,浅谈c语言的学习感想
- linux下物理内存不足,vm中linux物理内存不足解决方案
- linux ss命令查看端口监听情况
- SSM项目之短信验证码登录
- 一些CS领域、互联网领域的名词解释,作为知识补充
- python报错(一):takes no arguments
- 大梦谁先觉 --伍立杨
- 如何开笔记本电脑的无线WIFI(有图有真相)
- 为什么有时候外商无需提单可提货
- 光学识别(OCR)之 Tesseract
- 软测_2执行发送邮件程序的回归测试
- 图像处理压缩Huffman编码方法实现
- 海康威视 web端开发经验 (二)
- 了解膝关节损伤后的支具-关于韧带断裂,半月板术后康复
- java时间和电脑时间_用Java语言获取我电脑的当前时间
热门文章
- 容器大小_C++ 顺序容器基础知识总结
- linux编译blas,Linux下安装BLAS,CBLAS,LAPACK
- 成为解决计算机问题的利器,高中数学教学借助计算机的“翅膀”腾飞
- CodeForces - 1058D D. Vasya and Triangle
- SiamMask算法详解
- 轻量级网络之mobilenet_v1
- 图像算法中常用的数学概念
- 单词嵌入_单词嵌入与单词袋:推荐系统的奇怪案例
- swap最大值和平均值_SWAP:Softmax加权平均池
- FPGA专有名词的积累