本文基于《Python自动化运维  技术与最佳实践》第十三章内容“从零开始打造B/S自动化运维平台”。

参考链接为作者刘天斯个人博客:

平台简介:OMServer是本平台的名称。OMServer实现了一个集中式的Linux集群管理基础平台,提供了模块扩展的支持,可以随意添加集群操作任务模块,服务器端模块支持前端HTML表单参数动态定制,可灵活实现日常运维远程操作、文件分发等任务;在安全方面,采用加密(RC4算法)指令传输、操作日志记录、分离Web Server与主控设备等。在用户体验方面,采用前端异步请求,模拟Linux终端效果接收返回串。任何人都可以根据自身的业务特点对OMServer平台进行扩展,比如与现有资产平台进行对接,或整合到现有的运维平台中。

系统架构设计:OMServer平台采用三层设计模式,第一层为Web交互层,采用了Django+prototype.js+MySQL实现,服务器端采用了Nginx+uwsgi构建高效的Web服务;第二层为分布式计算层,采用rpyc分布式计算框架实现,作为第一层与第三层的数据交互及实现主控端物理分离,提高整体安全性,同时具备第三层的多机服务的能力;第三层为集群主控端服务层,支持Saltstack、Ansible、Func等平台。架构图:

主机ip操作系统软件备注

web172.27.9.17Centos7.3.1611Python2.7.5、Django1.4.9、uwsgi2.0.4、mysql5.7.22、rpyc3.2.3、nginx1.12.2、setuptools0.6c11关闭防火墙和selinux

server172.27.9.23Centos7.3.1611Python2.7.5、rpyc3.2.3、setuptools39.1.0、ansible2.3.1.0-1关闭防火墙和selinux

agent01172.27.9.19Centos7.3.1611/被控主机

agent02172.27.9.22Centos7.3.1611/被控主机

Web端搭建

安装包准备:[root@web ~]# mkdir /home/apps

将apps.zip上传至/home/apps并解压

1.nginx部署[root@web ~]# yum -y install gcc-c++

[root@web ~]# yum  -y install  pcre pcre-devel

[root@web ~]# yum -y install zlib zlib-devel

[root@web ~]# yum -y install wget

[root@web ~]# wget -c https://nginx.org/download/nginx-1.12.2.tar.gz

[root@web ~]# tar -zxvf nginx-1.12.2.tar.gz

[root@web ~]# groupadd nginx

[root@web ~]# useradd -g nginx -d /home/nginx nginx

[root@web ~]# passwd nginx

[root@web ~]# cd nginx-1.12.2

[root@web nginx-1.12.2]# ./configure --user=nginx --group=nginx --prefix=/usr/local/nginx

[root@web nginx-1.12.2]# make && make install

[root@web nginx-1.12.2]# cd /usr/local/nginx/sbin/

[root@web sbin]# ln -s /usr/local/nginx/sbin/nginx /usr/local/bin/nginx

2.mysql数据库安装[root@web ~]# rpm -ivh https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm

[root@web ~]# yum -y install mysql-community-server

[root@web ~]# systemctl start mysqld.service

[root@web ~]# systemctl enable mysqld.service

修改密码:[root@web ~]# cat /var/log/mysqld.log | grep password

2018-05-08T09:07:09.591079Z 1 [Note] A temporary password is generated for root@localhost: Ipuq?4#lWyo+

[root@web ~]# mysql -uroot -p

Enter password:

输入密码"Ipuq?4#lWyo+",重置密码:mysql> set password = password('Mysql123!');

创建数据库OMServer和omserver_user用户并授权:mysql> create database OMServer character set utf8 collate utf8_bin;

Query OK, 1 row affected (0.01 sec)

mysql> grant all privileges on OMServer.* to omserver_user@'%' identified by 'Omserver_user123!';

Query OK, 0 rows affected, 1 warning (0.00 sec)

导入表数据:[root@web apps]# cd /home/apps/

[root@web apps]# cat OMServer.sql |mysql -uomserver_user -pOmserver_user123! -D OMServer

mysql: [Warning] Using a password on the command line interface can be insecure.

查看导入:

使用SQLyog Community数据库连接工具查看:

3.MySQL-python库安装

MySQL-python是Python访问MySQL数据库的第三方模块库

setuptools模块安装:[root@web apps]# tar -xvf setuptools-0.6c11.tar.gz

[root@web apps]# cd setuptools-0.6c11

[root@web setuptools-0.6c11]# python setup.py build

[root@web setuptools-0.6c11]# python setup.py install

MySQL-python模块安装:[root@web apps]# cd MySQL-python-1.2.5

[root@web MySQL-python-1.2.5]# python setup.py install

4.rpyc模块安装

rpyc用于平台与主控端做数据通讯交互[root@web apps]# cd rpyc-3.2.3

[root@web rpyc-3.2.3]# python setup.py install

5.uwsgi模块安装

uwsgi是一个快速的、纯C语言开发的、自维护、对开发者友好的WSGI服务器,旨在提供专业的Python web应用发布和开发。[root@web apps]# cd uwsgi-2.0.4

[root@web uwsgi-2.0.4]# make

安装成功:

[root@web uwsgi-2.0.4]# view /etc/ld.so.conf

include ld.so.conf.d/*.conf

/usr/local/lib    #新增行

[root@web uwsgi-2.0.4]# ldconfig    #让动态链接库为系统所共享

[root@web uwsgi-2.0.4]# cp uwsgi /usr/local/bin/

6.安装Django[root@web apps]# cd Django-1.4.9

[root@web Django-1.4.9]# python setup.py install

推荐两个比较好的Django入门博客:

7.django-debug-toolbar安装[root@web apps]# cd /home/apps/django-debug-toolbar-master/

[root@web django-debug-toolbar-master]# python setup.py install

[root@web ~]# view /data/www/OMserverweb/settings.py

根据实际情况修改如下:

8.导入项目文件

导入项目文件至/data/www目录[root@web ~]# mkdir -p /data/www

[root@web ~]# cd /data/www

将OMserverweb.zip上传至/data/www并解压

9.修改数据库连接信息[root@web OMserverweb]# view /data/www/OMserverweb/settings.py

10.修改主控端rpyc主机IP[root@web OMserverweb]# view /data/www/OMserverweb/autoadmin/views.py

connect里的ip修改为172.27.9.23

11.修改Nginx配置server {

listen       80;

server_name  localhost;

location / {

include  uwsgi_params;

uwsgi_pass  127.0.0.1:9001;

uwsgi_connect_timeout 30;

uwsgi_param UWSGI_CHDIR /data/www/OMserverweb;

uwsgi_param UWSGI_SCRIPT django_wsgi;

}

location ^~ /static {

root /data/www/OMserverweb;

}

location ~* ^.+\.(mpg|avi|mp3|swf|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|txt|tar|mid|midi|wav|rtf|mpeg)$ {

root /data/www/OMserverweb/static;

}

}

12.uwsgi配置

uwsgi.ini为新建文件,已经在OMserverweb安装包中:[root@web OMserverweb]# more /data/www/OMserverweb/uwsgi.ini

[uwsgi]

chdir=/data/www/OMserverweb

pythonpath=/data/www

socket=127.0.0.1:9001

master=true

workers=4

pidfile=/data/logs/uwsgi.pid

vacuum=true

thunder-lock=true

enable-threads=true

harakiri=30

post-buffering=4096

daemonize=/data/logs/django_uwsgi.log

13.启动web服务[root@web OMserverweb]# uwsgi --ini /data/www/OMserverweb/uwsgi.ini

[uWSGI] getting INI configuration from /data/www/OMserverweb/uwsgi.ini

[root@web OMserverweb]# nginx

启动日志查看:[root@web logs]# more /data/logs/django_uwsgi.log

nginx日志查看:[root@web ~]# tail /usr/local/nginx/logs/access.log

浏览器直接输入IP地址:http://172.27.9.17/

Server端搭建

下载安装包:[root@server ~]# mkdir /home/app-server/

将安装包app-server上传至/home/app-server

1.ansible部署

setuptools安装:[root@server ~]# cd /home/app-server/

[root@server app-server]# yum -y install unzip

[root@server app-server]# unzip setuptools-39.1.0.zip

[root@server app-server]# cd setuptools-39.1.0

[root@server app-server]# python setup.py install

ansible安装(ansible必须使用2.3.1.0-1版本,否则会报错):[root@server ~]# cd /home/app-server/

[root@server app-server]# tar -zxvf ansible-2.3.1.0-1.tar.gz

[root@server app-server]# cd ansible-2.3.1.0-1

[root@server ansible-2.3.1.0-1]# python setup.py install

sshpass安装:[root@server ansible-2.3.1.0-1]# cd ..

[root@server app-server]# tar -zxvf sshpass.tar.gz

[root@server app-server]# cd sshpass-1.06/

[root@server sshpass-1.06]# ./configure

[root@server sshpass-1.06]# make && make install

2.ansible配置

添加主机IP[root@server ~]# mkdir -p /etc/ansible

[root@server ~]# cd /home/app-server/ansible-2.3.1.0-1/examples

[root@server examples]# cp ansible.cfg hosts /etc/ansible

[root@server examples]# view /etc/ansible/hosts

[webservers]

## alpha.example.org

## beta.example.org

## 192.168.1.100

## 192.168.1.110

172.27.9.17

172.27.9.19

172.27.9.22

172.27.9.23

3.连接测试

首先分别ssh连接websrvers组主机,此过程会生成秘钥信息,不然后面的ansible测试会报错:"msg": "Using a SSH password instead of a key is not possible because Host Key checking is enabled and sshpass does not support this.  Please add this host's fingerprint to your known_hosts file to manage this host."[root@server ~]# ssh 172.27.9.17

The authenticity of host '172.27.9.17 (172.27.9.17)' can't be established.

ECDSA key fingerprint is b2:dc:51:b1:a1:b6:e2:4a:c1:ab:f4:e3:15:48:4c:f6.

Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added '172.27.9.17' (ECDSA) to the list of known hosts.

root@172.27.9.17's password:

ansible进行ping测试[root@server ~]# ansible 172.27.9.17 -m ping -k

SSH password:

172.27.9.17 | SUCCESS => {

"changed": false,

"ping": "pong"

}

4.配置Linux主机SSH无密码访问

为避免Ansible下发指令时输入目标主机密码,通过证书签名达到SSH无密码是一个好的方案。这里使用ssh-keygen生成一对秘钥,使用ssh-copy-id来下发生成的公钥。

创建秘钥:

分别同步公钥至目标主机:[root@server ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.27.9.17

/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed

/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys

root@172.27.9.17's password:

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'root@172.27.9.17'"

and check to make sure that only the key(s) you wanted were added.

校验SSH无密码配置是否成功:[root@server ~]# ssh 172.27.9.17

Last login: Wed May  9 17:50:17 2018 from 172.27.9.19

登陆成功,无需输入密码。

5.rpyc模块安装[root@server app-server]# tar -zxvf rpyc-3.2.3.tar.gz

[root@server rpyc-3.2.3]# python setup.py install

6.Server端配置[root@server app-server]# mv OMServer /home

[root@server app-server]# cd /home/OMServer/

[root@server OMServer]# view config.py

本文以ansible为例

7.修改数据库配置

使用SQLyog Community工具修改server_list表数据,新增被控主机17/19/22/23

8.启动server[root@server OMServer]# python OMserver.py &

[root@server OMServer]# netstat -an|grep 11511

tcp        0      0 0.0.0.0:11511           0.0.0.0:*               LISTEN

11511端口处于监听状态

9.访问web页面

测试

新增模块(使用火狐浏览器)

‘提交’确定

编写后台任务模块,编号为1008[root@server ~]# cd /home/OMServer/modules/ansible

[root@server ansible]# view Mid_1008.py# -*- coding: utf-8 -*-

from Public_lib import *

#查看系统版本模块#

class Modulehandle():

def __init__(self,moduleid,hosts,sys_param_row):

self.hosts = ""

self.Runresult = ""

self.moduleid = moduleid

self.sys_param_array= sys_param_row

self.hosts=target_host(hosts,"IP")

def run(self):

try:

self.Runresult = Order_Run(host=self.hosts, module_name='shell', module_args="df -h")

if len(self.Runresult["failed"]) == 0 and len(self.Runresult["success"]) == 0 and len(self.Runresult["unreachable"]) == 0:

return "No hosts found,请确认主机已经添加ansible环境!"

except Exception,e:

return str(e)

return self.Runresult

常见错误:

server进程异常,重启server端主进程:[root@server OMServer]# python OMserver.py &

原因:server端开启了防火墙[root@server OMServer]# systemctl stop firewalld.service

[root@server OMServer]# systemctl disable firewalld.service

原因:web端uwsgi进程异常,重拉进程[root@web OMserverweb]# ps -ef|grep uwsgi |awk '{print $2}'|xargs kill -9

[root@web OMserverweb]# uwsgi --ini uwsgi.ini

原因:web端settings.py中的SECRET_KEY与server端config.py中的SECRET_KEY不一致,改成一致即可。

总结:

1.该平台为我们进行自动化运维提供了一种思路。

OMServer平台的三层架构模式简明清晰,第一层是Django+uwsgi+Nginx+Mysql,第二层是rpyc分布式计算框架,第三层是Ansible、Saltstack、Func等自动化运维工具,三层都具有很强的代表性。

2.Django是用Python写的Web框架,功能强大、内容全面、安全性高、高效,对ORM支持完善,社区活跃,同时其灵活性低、可修改性差。

3.Ansible是一个部署一群远程主机的工具,具有部署简单、功能强大、配置简单、扩展性强、支持API及自定义模块,可通过Python轻松扩展的特点,被控主机无需部署客户端代理。ansible通过常用模块在命令行就可以针对主机清单来管理配置远程主机。

4.Web端搭建难点一是在对Django框架的理解,各模块做什么的,起什么作用,二是uwsgi和nginx的参数配置;Server端搭建相对容易,主要是后期平台扩展对Python和Ansible的掌握有一定要求。

python自动化运维平台搭建_OMserver自动化运维平台搭建及测试相关推荐

  1. 从零搭建一个自动化运维体系

    作者简介: 胥峰,著有畅销书<Linux运维最佳实践>.译著<DevOps:软件架构师行动指南>,资深运维专家,有 11 年运维经验,在业界颇具威望和影响力.2006 年毕业于 ...

  2. python的运维开发课程_Python自动化运维开发实战课程方案

    课程简介:? ? 随着信息时代的持续发展,IT运维已经成为IT服务内涵中重要的组成部分.面对越来越复杂的业务以及日趋多样化的用户需求,不断扩展的IT应用需要合理的IT运维保障IT服务灵活便捷.安全稳定 ...

  3. 运维转型之路—手工运维到无人值守的自动化运维,从根本实现降本增效

    运维伴随信息技术的发展而生,经历了从手工管理到工具化运维,发展至平台化运维,最终实现自动化.智能化运维的四个阶段. 图一:运维发展阶段及特点 在信息化发展初期,业务流量不大,服务器数量相对较少,系统复 ...

  4. 运维技能定级标准第4篇——关于运维工程师岗位的自动化运维与运维开发技能级别设计

    运维工程师岗位工作技能的评定类别(5)和(6) 5.自动化运维技术 级别0,什么都不懂 级别1,了解ansible.saltstack.puppet等主流的自动化运维管理技术工具,掌握公司主要使用的一 ...

  5. 观2021年公安监控运维项目,察智能运维平台必不可少

    一.2021公安监控运维项目特点 2021年只余下一个小尾巴了,2021年相对2020年来好了很多,无论是疫情的遏制,还是项目的机会.12月作为年度冲刺的最后一个月,应该还是有不少项目即将落地.最近趁 ...

  6. 遇到的坑_新手搭建web自动化遇到的坑...

    关注并置顶[柠檬班] 就能第一时间找到呦~ 现在自动化测试越来越火,企业在招聘人才的时候明明招的是功能测试. 但是面试的时候还是问到了,同学,你会不会自动化呀? 不会呀?那可能不是很适合我们这个岗位. ...

  7. python编程快速上手 让繁琐工作自动化 豆瓣_2019年,这些豆瓣评分9.0以上的8本程序员好书你都知道吗?...

    豆瓣这些9.0以上的高评分程序员好书你都知道有哪些吗?小编去豆瓣看了一下,推荐这8本最适用的程序员好书给你. 1.UNIX环境高级编程(第3版)(豆瓣评分9.6)UNIX编程圣经 与Linux相结合的 ...

  8. docker 启动容器的时候没-p 后面怎么加-p_基于Docker搭建基础自动化部署

           阅读本文约需要7分钟  大家好,我是你们的导师,我每天都会在这里给大家分享一些干货内容(当然了,周末也要允许老师休息一下哈).上次老师跟大家分享了下SpringBoot如何实现全链路调用 ...

  9. Centos7下的LibreOffice的搭建及自动化脚本部署

    Centos7下的LibreOffice的搭建及自动化脚本部署 LibreOffice 简介 LibreOffice 是一个强大的办公套件 – 它清晰的界面和强大的工具让您释放您的创造力并增长您的生产 ...

  10. 自动化运维(使用api自动化管理f5设备)

    自动化运维(使用api自动化管理f5设备) 前言 F5 的API接口 关于认证 利用python实现自动化巡检 成果 附录(f5 api reference) 前言 利用F5设备自带的API,通过py ...

最新文章

  1. mysql体系结构:
  2. 总结libevent安装方法
  3. 信息学奥赛一本通(1318:【例5.3】自然数的拆分)
  4. wordpress阿里百秀主题v7.7
  5. 如何对待逐渐疏远的朋友?
  6. VS2008中的一些命令窗口
  7. 免费讲座:从草根到巨人——互联网时代的LAMP开源架构
  8. 【linux】redhat笔记:红帽企业Linux入门与安装
  9. 苹果电脑mysql_MacBook 安装 MySQL 5.7.29(新手都看得懂的安装教程)
  10. 一天破万:二十一个微信公众号推广技巧
  11. 2021年全球手工具收入大约16510百万美元,预计2028年达到18370百万美元
  12. ubuntu 安装 mujoco-py
  13. python转义字符\r的使用
  14. 已经出狱的李一男和即将出狱的王欣,还能赶上这个时代吗?
  15. TensorFlow Ranking框架在海外推荐业务中的实践与应用
  16. 医用计算机是什么意思,pc是什么意思(全网最全解读pc寓意)
  17. 微信小程序怎么开发自己的小程序?
  18. win10 + Ubuntu 20.04 LTS 双系统安装 (UEFI + GPT)(图文,多图预警)
  19. 亚马逊ERP贴牌OEM代理贴牌是什么意思 起到一个什么样的作用
  20. 【ASE入门学习】ASE入门系列二十四——轴向溶解

热门文章

  1. 心形函数的正确打开方式(Unity3D Shader)
  2. 计算机高级工程师职称评定条件,高级工程师职称评定条件是什么
  3. 英语单词记忆测试软件,适用于检查学生英语单词背诵情况的软件
  4. 盘点那些被AI换脸、一键“脱”衣所滥用的AI模型
  5. linux学习知识体系
  6. 整流-1.输入电压角度计算
  7. 四年磨一剑:我是如何拿到蚂蚁offer的?
  8. Lae程序员小漫画(二),仅供一乐
  9. 机器学习可解释性之shap模块的使用——基础用法(一)
  10. (转载)NPOI使用手册,实践发现使用2.2版本的库需要稍作调整