郑征
成熟的自动化运维平台都具备哪些要素呢?
(1)需要有支持混合云的配置管理数据库(CMDB)。CMDB存储与管理企业IT架构中设备的各种配置信息,它与所有服务支持和服务交付流程都紧密相连,支持这些流程的运转、发挥配置信息的价值,同时依赖于相关流程保证数据的准确性。
现在更多的企业选择将服务器资源放在云上,无论是公有云还是私有云都提供资源管理接口,利用这些接口构建一个自动化的CMDB,同时增加日志审计功能,通过接口对资源的操作都应该记录,供后续审计。
2)有完备的监控和应用性能分析系统。运维离不开监控和性能分析。资源监控(如服务器、磁盘、网络)和性能监控(如中间件、数据库)都是较为基础的监控,开源工具有Zabbix、Nagios、OpenFalcon(国产)。
应用性能分析,如某些Web请求的响应速度、SQL语句执行的快慢等对于问题的定位是非常有帮助的,开源工具有pinpoint、zipkin、cat;商业工具有New Reclic、Dynatrace。
(3)需要具备批量运维工具。如何有效降低运维的成本呢,
4)需要有日志分析工具。随着服务器的增多,日志的采集和分析成了运维中的难点,试想如何快速地从成百上千台服务中采集日志并分析出问题所在呢?日志采集方面工具有Sentry,也是纯由Python打造,日志分析有ELK,两者都是开源的。
(5)需要有持续集成和版本控制工具。持续集成是一种软件实践,团队成员经常集成他们的工作,每次集成都通过自动化的构建来验证,从而尽早发现集成错误。持续集成的工具有Hudson、CruiseControl、Continuum、Jenkins等。版本控制是软件开发中常用的工具,比较著名的是svn、git。
(6)还要有漏洞扫描工具。借助商业的漏洞扫描工具扫描漏洞,保护服务器资源不受外界的攻击。
Python拥有一个强大的标准库和丰富的第三方库,拿来即用,无须重复造轮子。 可移植性高,Linux、UNIX、Windows、Android、Mac OS等一次编写,处处运行。 实用效果好,学习一个知识点,能够直接实战——用在工作上,立竿见影。
Python是一种面向对象的解释型计算机程序设计语言,由荷兰人Guido van Rossum于1989年发明,第一个公开发行版发行于1991年。面向对象如果不理解可先不去理会,在实际使用的过程中去理解它,解释型语言表明Python不需要预先编译成字节码而是由Python虚拟机直接执行,当然Python也完全可以先编译成字节码来适当提高装载速度。
Python已经为您想好了解决方案——创建虚拟环境,每个项目一个独立的环境,这样井水不犯河水,合平共处,互不干扰。 Windows创建虚拟环境的方法:在cmd窗口中顺序执行以下命令(#后面表示注释,执行命令时要去掉)。
virtualenv是如何创建独立的Python运行环境的呢?原理很简单,就是把系统Python复制一份到虚拟环境。使用命令.\projectA_env\bin\activate.bat进入一个projectA虚拟环境时,virtualenv会修改相关环境变量,让命令python和pip均指向当前的projectA虚拟环境。
(3)卸载包:pip uninstall packgename。 (4)查看已安装的包:pip list。
在Python中获取系统信息最便捷的模块是psutil(process and system utilities)。通过简短的几行代码就可以获取系统相关信息,而且还是跨平台库。psutil不属于标准库,需要手动安装。安装psutil非常简单,执行以下命令即可。  pip install psutil
subprocess模块是Python自带的模块,无须再另行安装,它主要用来取代一些旧的模块或方法,如os.system、os.spawn*、os.popen*、commands.*等,因此如果需要使用Python调用外部命令或任务时,则优先使用subprocess模块。使用subprocess模块可以方便地执行操作系统支持的命令,可与其他应用程序结合使用。因此,Python也常被称为胶水语言。
Ansible是一款强大的配置管理工具,目的是帮助系统管理员高效率地管理成百上千台主机。
Ansible使用SSH协议与被管理的主机通信,只要SSH能连接这些主机,Ansible便可以控制它们,被管理的主机不需要安装Ansible。
任务队列:简单来说,任务队列就是存放着任务的队列,客户端将要执行任务的消息放入任务队列中,执行节点worker进程持续监视队列,如果有新的任务,就取出来执行该任务。这种机制就像生产者、消费者模型一样,客户端作为生产者,执行节点worker作为消费者,它们之前通过任务队列进行传递,如图9.1所示。
中间人(broker):Celery用于消息通信,通常使用中间人(broker)在客户端和worker之前传递,这个过程从客户端向队列添加消息开始,之后中间人把消息派送给worker。官方给出的实现broker的工具可参见表9-1。
在实际使用中,我们选择RabbitMQ或Redis作为中间人。
(5)组建微服务架构。 通过多个容器,一台机器可以跑很多个虚拟服务器,因此在一台机器上就可以模拟出微服务架构,也可以模拟出分布式架构。
例如,当启动Docker后选择docker0了172.17.0.1/16,一个16位的子网掩码给容器提供了65534个IP地址。 docker0并不是正常的网络接口,它只是一个在绑定到这上面的其他网卡之间自动转发数据包的虚拟以太网桥,可以使容器与主机相互通信、容器与容器相互通信。
4)bridge模式,使用–net=bridge指定,默认设置。
host模式:如果启动容器时使用host模式,那么这个容器将与宿主机共用一个Network Namespace。容器将不会虚拟出自己的网卡、配置自己的IP等,而是使用宿主机的IP和端口进行通信。但是容器的其他方面,如文件系统、进程列表等还是与宿主机隔离的。
none模式:使用none模式,Docker容器就会拥有自己的Network Namespace,但是并不为Docker容器进行任何网络配置。也就是说,这个Docker容器没有网卡、IP、路由等信息,需要我们自己为Docker容器添加网卡、配置IP等。
bridge模式:bridge模式是Docker默认的网络设置,为每一个容器分配Network Namespace、设置IP等,并将主机上的Docker容器连接到虚拟网桥docker0上。