导航菜单
路很长,又很短
博主信息
昵   称:Cocodroid ->关于我
Q     Q:2531075716
博文数:356
阅读量:1648462
访问量:205676
至今:
×
云标签 标签球>>
云标签 - Su的技术博客
Tags : nginx,自动扩容,架构发表时间: 2021-11-12 00:40:13

文科 八戒技术团队

需求背景


因公司业务的飞速发展,以往的服务器硬件采购方式已经不能快速适应公司的业务需求。在此需求下,公司运维团队投入了虚拟化平台的建设,并最终采用了云平台业界较为知名和成熟的开源产品Openstack。随着公司虚拟化平台的不断深入,规模的不断壮大,服务器运维部署相关的需求也越来越多,动态扩容的解决方案呼之而出。


Nginx手动扩容阶段


Openstack平台仅仅提供根据镜像创建虚机,但是虚机中的软件需要自己手动安装,当一个项目中包含多台虚拟机时,配置较为繁琐,虽说可以设定脚本或其它方法自动安装所需软件,但是从项目创建到项目中虚机配置完成,仍需要花费较长时间。在此情况下,运维部依据Openstack自由的功能和puppet强大的自动化部署功能,设计并实现了第一套架构。


图片

首先依据Zabbix监控功能发现使用资源较为紧张的项目,通过Openstack的nova metadata技术,在创建虚拟机的时候,对虚拟机进行一些配置,比如:开启一些服务、安装某些包、添加 SSH 秘钥、配置 hostname 等等。


在 OpenStack 中,这些配置信息被分成两类:metadata 和 user data。Metadata 主要包括虚拟机自身的一些常用属性,如 hostname、网络配置信息、SSH 登陆秘钥等,主要的形式为键值对,而 user data 主要包括一些命令、脚本等。User data 通过文件传递,并支持多种文件格式,包括 gzip 压缩文件、shell 脚本、cloud-init 配置文件等。虽然 metadata 和 user data 并不相同,但是 OpenStack 向虚拟机提供这两种信息的机制是一致的,只是虚拟机在获取到信息后,对两者的处理方式不同罢了。所以下文统一用metadata 来描述,我们通过往虚机中注入脚本方式,使虚机中的cloud_init程序启动后会去执行metadata传入的脚本,自动安装puppet agent,puppet agent会链接对应的puppet服务端,根据项目名称安装对应的软件到虚机。


安装完成后,因Nginx项目中的虚机并未做对应的配置,所以并未将虚机囊入到项目的负载均衡策略当中,并未起到分流的作用,所以仍需手动修改Nginx相应配置文件使其生效。


流程图如下:

图片


手动扩容存在问题:

随着项目数量的不断增加,暴漏出来的问题如下:


  1. 要随时保持对项目使用资源的关注。

  2. 从发现项目资源使用负载过高到重新添加虚机资源配置完毕耗时较长。

  3. 对负载低的资源不能做到及时的回收,利用,造成资源的浪费。

  4. 人工干预过多,自动化程度低。

自动扩容阶段

针对于以上问题,运维团队设计并开发了Nginx动态扩容系统,简称DEM(Dynamic extended management system )系统,架构如下:


图片

项目资源的创建原理及流程图


图片


首先通过Demdashboard中配置heat模板(heat是openstack中一款强大的服务编排组件),Heat根据模板创建项目所需虚机,并通过ceilometer服务(openstack的计量服务模块,可监控项目使用资源,如cpu,内存,磁盘IO等)对项目中的云主机资源进行监控。nova api会根据前文介绍的cloud_init和nova metadata技术安装项目对应的软件,并调用zabbix-api在zabbix中创建对应的监控项,把此Nginx项目纳入zabbix的管控当中,并在DNS中注册云主机相关信息。当完成此步骤后,会调用dem_init程序通知dem管理系统,将所加云主机相关信息录入数据库当中,并最终在dashboard中得以呈现。


项目的自动扩容原理及流程图:

图片


当Nginx项目在某一段时间内,发现项目中云主机持续负载过高(表象为CPU使用率过高),heat模块会根据ceilometer搜集的数据及时发现,自动触发heat模板中的策略,如高于%70时,通过调用nova-api接口创建两台云主机,云主机会安装与此项目对应的软件,在DNS中注册云主机相关信息,在zabbix中注册新增云主机信息,并通过dem_init 将新建云主机的相关信息(如主机名,ip地址等信息)发送给dem模块,dem在数据库中记录了相关信息后,会调用puppet-api模块去修改Ngnix的配置文件,Ngnix会添加新加云主机的相关信息,修改完成后,发送返回信息给dem模块,在dem dashboard中可以观察到项目中云主机的变化,至此Nginx动态扩容功能完成。


项目资源的回收原理及流程图:

图片

当对Nginx项目进行一段时间监控后,发现项目中云主机的负载低于某一在heat模板中界定的值,触发heat功能模块,heat根据模板中事先设定的删除的云主机的数量进行云主机的删除动作,但因删除云主机的同时也要保证Zabbix平台和dem模块以及Nginx中数据的同步,所以需要在nova模块的删除操作中添加nova-hook模块,用来捕获删除操作,nova-hook会调用zabbix-api从zabbix平台中删除云主机对应信息,也会在DNS中删除云主机信息,并发送删除云主机相关信息(如主机名,ip地址等)给dem模块,dem在同步信息到数据库后,调用puppet-api模块去修改Nginx相应的配置,至此回收云主机工作完成。



结语


在此次Nginx的设计与实现中,对自动化运维的意义有了更深一层的认识,对Openstack自身平台相关部分,如openstack接口模块的设计,nova模块的架构,keystone的认证原理等有了代码级别的理解,并通过与公司具体业务相结合,做到了开源软件在实际中的应用积累了经验,将来还需在实际中不断去完善相关模块并丰富功能。


参考文献:

Python的pecan框架相关资料 :

https://en.wikipedia.org/wiki/Pecan

http://www.pecanpy.org/


Python djiango 框架相关资料:  

https://www.djangoproject.com/

Cloud_init 技术:              

https://cloudinit.readthedocs.org/en/latest/

Openstack 相关资料:          

https://www.openstack.org/

http://docs.openstack.org/developer/nova/hooks.html


Openstackheat(编排服务):     

https://wiki.openstack.org/wiki/Heat

http://docs.openstack.org/developer/heat/


Openstack ceilometers(计量服务):

https://wiki.openstack.org/wiki/Telemetry

http://docs.openstack.org/developer/ceilometer/

Puppet 官网:                  

http://docs.puppetlabs.com/




...阅读原文
推荐文章