混合云管理问题,你解决了么?

背景

近几年随着“互联网+”,“云+”等概念的出现,云化服务日益成熟,市场上涌入大量的企业开始将自身的服务云化,如中小型互联网企业,传统企业,金融企业等。但是完整的云化不是一个短期就能快速实现的目标,特别对于一些庞大的传统企业,或一些对数据安全高度敏感的金融企业,市场提出了一个新的需求:混合云方案。

混合云方案指融合公有云和私有云等多种云环境的服务管理解决方案,包括管理多种公有云环境、自建的国内外IDC私有云环境。而混合云管理平台需要提供的能力包含统一CMDB资产管理、统一的服务器密码管理、统一的变更发布、数据迁移、跨云容灾、监控等。

所有的操作类能力全都依赖于底层的平台命令通道和云厂商的接口对接,该文章将介绍织云是如何建设和使用命令通道解决混合云的服务器管理问题。

混合云管理的问题 “客户虐我千百遍,我待客户如初恋!”

TOB和TOC最大的不同在于TOB的客户就是上帝,而且上帝有很多个性化的问题和需求。在织云命令通道设计的时候参考了很多织云实际客户的问题和场景,总结下主要有以下几点问题:

1. 网络复杂度

混合云最大的问题之一就是网络复杂度,不同客户可能购买了不同的公有云,有些搭建了自己的IDC,甚至有些在一个云环境里还搭建了多个私有子网,所以往往会遇到集群网络不通,集群之间网络不通,网络上行和下行只有一边通,安全策略限制,通信协议限制等。

2. 网络带宽

有客户搭建了海外IDC,海外IDC只能通过香港,走宽带很小的公网访问回国内,当客户需要对目标集群做数据迁移或发布一个大的文件包时,宽带将是最大的限制。

3. 服务器多样性

有些传统企业使用Windows 2000+ubuntu 12.04,14.04,16.04+定制的centos......由于客户服务器种类比较多,对底层通道的兼容性要求非常高。

4. 需求灵活性

客户往往有多种不同的个性化需求,例如有客户需要监控tomcat,写java的客户需要定时监控java的gc,采集指定的业务日志等,所以在设计底层通道的agent时,需要有足够的灵活性。

解决方案

在设计方案之前,参考过比较热门的开源软件,如saltstack、ansible、puppet等;以及市场上同类型管理平台。都非常优秀,而且各有优点,但无法满足客户和织云的需求,在此不多做对比。

1 网络复杂度

A) 使用Master+Proxy+Agent模型

Agent通过Proxy与Master通信,用户只需要给1~N台能与Master通信的服务器即可,这是目前最有效且兼容性最好的管理方式。当Agent启动时Agent主动连接Master,握手成功之后与Master保持长连接,该方式对客户的网络要求较低而且安全,只要Proxy能主动访问公网Master即可。

B) Proxy支持横向和纵向扩展

Proxy横向扩展主要为了容灾,当某Proxy连不上时,Agent尝试使用剩余Proxy;

纵向扩展解决用户子网深度,例如海外客户:泰国->香港->织云。

C) 使用HTTP/HTTP2.0做为通信协议

几年前做运维的时候体验过私有协议在某些用户网络的兼容性痛苦,深切认识到HTTP应该是目前兼容性最高的应用层通信协议。但为了安全起见,使用HTTP2.0(基于HTTPS)做为通信协议。

协议兼容性切换,当HTTP2.0连不上Master时,尝试切换为HTTP短连接做轮询。

D) 支持SSH协议下发

Proxy+Aent需要客户环境到织云Master的上行网络,但如果有客户只支持下行网络,命令通道还需要支持Master通过SSH协议访问到客户集群的Proxy(优先使用Proxy-Agent模式)

2 网络带宽

A) 采用“CDN”模型

做为混合云管理,变更发布是一项高频操作,发布本质上是文件分发的问题,有着资源热点的特性,所以采用CDN模型是比较合适的模型。

织云CDN源节点能提供文件分片能力,同时在Proxy节点上部署缓存组件,任一文件分片只要经过Proxy节点的缓存将会在Proxy上缓存一段时间,这样发布的数据文件只会经过一次公网,大大节约了带宽。

B) CDN+P2P架构

CDN方案解决了宽带限制问题,但如果目标集群有大量的服务器且需要分发一个很大文件包时,Proxy的宽带将会是瓶颈。

思路是采用P2P模型做数据分享,提高文件分发效率,P2P有几种模型,如中心化拓扑模型,DHT网络模型,全分布式非结构化拓扑模型,半分布式拓扑模型。考虑到如果在客户环境采用类DHT搜索会给客户网络造成大量的额外数据搜索,织云采用中心化拓扑模型,由Proxy做为源seeder和tracker,结合上上面的A方案,最终文件分发模型类似如下:

3 服务器多样性

A) Agent跨平台且对环境零依赖

早期采用shell+python的方式管理目标服务器,但发现在不同linux操作系统,客户定制系统下兼容性很差,更别提windows了,根本原因是对底层操作系统有很强的依赖,例如用了很多shell命令,有些命令在精简版linux下没有;python本身部分库又依赖了底层操作系统lib库。

最终agent选用golang开发,golang支持跨平台编译,且编译出来的可执行文件对环境无依赖(不写C,Go),是最合适做为agent开发的语言

4 需求灵活性

A) 设计方案

使用golang的plugin插件+container容器的设计方案,通过生成so插件文件,在线热加载新的so文件:

B) 请求命令字

UUID:设备唯一ID,定位一台服务器,由框架解析定位。

CMD:命令字,定位要调用的模块,由worker解析找到指定执行模块,可以通过在线更新插件添加新命令字。

Taskid:当前任务id,定位某次命令执行。

C) 在线更新与热加载插件

当Agent需要更新时,使用在线更新功能:

1. 下发命令给旧Agent;

2. 安装并启动新Agent;

3. 新Agent与Master连接并完成握手(如果握手失败或启动失败,则由旧Agent中止更新);

4. Master更新该服务器的下发连接,即断开Master->旧Agent下发通道,不再下发命令给的旧Agent,但仍需等待旧Agent完成回收;

5. 发送kill信号(不是kill -9强杀)给旧Agent等待现有任务完成并上报,此时旧Agent->Master长连接还在,仍能上报;

6. 旧Agent完成回收任务,发送EOF信号给Master,释放该长连接;

7. 在线更新完成。

总结

随着市场对云化大趋势的日益认可,混合云管理也将会是这个时期的强需求,织云也一直在探索市场的最新动态,支撑着云化的市场需求。

·  分  ·  割  ·  线  ·  啦  ·

织云企业版预约体验

织云社区版 V1.3下载

原文发布于微信公众号 - 腾讯织云(TencentCOC)

原文发表时间:2018-07-18

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏开源项目

本周新晋优秀开源项目榜单 | 码云周刊第 76 期

1553
来自专栏ChaMd5安全团队

Shodan在渗透测试及漏洞挖掘中的一些用法

渗透测试中,第一阶段就是信息搜集,这一阶段完成的如何决定了你之后的进行是否顺利,是否更容易。而关于信息收集的文章网上也是有太多,但是你真的会用吗?...

59911
来自专栏知晓程序

小程序用起来耗流量吗? | 小程序问答 #5

1402
来自专栏编程一生

实现一个自己的搜索引擎的初始规划

1754
来自专栏FreeBuf

基于代理IP的挖掘与分析

? 废话不多说,直入主题。关于代理IP的挖掘与分析,个人的一些分析与总结。 1. 思路 1、获取代理地址 2、对获取的代理地址进行验证,提取出真实可用的代理地...

6207
来自专栏HaHack

化繁为简的企业级Git管理实战(三):分支管理策略

1234
来自专栏地方网络工作室的专栏

打造前端 Deepin Linux 工作环境——安装系统

打造前端 Deepin Linux 工作环境——安装系统 为什么选择 Deepin Linux 系统 在 linux 操作系统的选择上,我个人不喜欢太花里胡哨的...

53210
来自专栏程序员的SOD蜜

闲话权限系统的设计

一、权限的本质 权限管理,首先要理清权限的本质:权限就是对受保护资源的有限许可访问。 理解了权限的本质,就好谈权限的管理了。 权限就是对受保护资源的有限许可访问...

3818
来自专栏恰童鞋骚年

《大型网站技术架构》读书笔记之七:随需应变之网站的可扩展架构

此篇已收录至《大型网站技术架构》读书笔记系列目录贴,点击访问该目录可获取更多内容。

1083
来自专栏猿人谷

一个项目的简单开发流程——需求、数据库、编码

关于一个项目的简单开发流程   前言:从11月8号开始到11月12号我们小组使用html+easyUI+ashx+异步,开发了一个简易的网 站,也就是简单的门户...

2915

扫码关注云+社区

领取腾讯云代金券