2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > python自动化运维平台搭建_OMserver自动化运维平台搭建及测试

python自动化运维平台搭建_OMserver自动化运维平台搭建及测试

时间:2024-02-07 20:19:13

相关推荐

python自动化运维平台搭建_OMserver自动化运维平台搭建及测试

本文基于《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-yinstallgcc-c++

[root@web~]#yum-yinstallpcrepcre-devel

[root@web~]#yum-yinstallzlibzlib-devel

[root@web~]#yum-yinstallwget

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

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

[root@web~]#groupaddnginx

[root@web~]#useradd-gnginx-d/home/nginxnginx

[root@web~]#passwdnginx

[root@web~]#cdnginx-1.12.2

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

[root@webnginx-1.12.2]#make&&makeinstall

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

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

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

[root@web~]#yum-yinstallmysql-community-server

[root@web~]#systemctlstartmysqld.service

[root@web~]#systemctlenablemysqld.service

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

-05-08T09:07:09.591079Z1[Note]Atemporarypasswordisgeneratedforroot@localhost:Ipuq?4#lWyo+

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

Enterpassword:

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

创建数据库OMServer和omserver_user用户并授权:mysql>createdatabaseOMServercharactersetutf8collateutf8_bin;

QueryOK,1rowaffected(0.01sec)

mysql>grantallprivilegesonOMServer.*toomserver_user@'%'identifiedby'Omserver_user123!';

QueryOK,0rowsaffected,1warning(0.00sec)

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

[root@webapps]#catOMServer.sql|mysql-uomserver_user-pOmserver_user123!-DOMServer

mysql:[Warning]Usingapasswordonthecommandlineinterfacecanbeinsecure.

查看导入:

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

3.MySQL-python库安装

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

setuptools模块安装:[root@webapps]#tar-xvfsetuptools-0.6c11.tar.gz

[root@webapps]#cdsetuptools-0.6c11

[root@websetuptools-0.6c11]#pythonsetup.pybuild

[root@websetuptools-0.6c11]#pythonsetup.pyinstall

MySQL-python模块安装:[root@webapps]#cdMySQL-python-1.2.5

[root@webMySQL-python-1.2.5]#pythonsetup.pyinstall

4.rpyc模块安装

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

[root@webrpyc-3.2.3]#pythonsetup.pyinstall

5.uwsgi模块安装

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

[root@webuwsgi-2.0.4]#make

安装成功:

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

includeld.so.conf.d/*.conf

/usr/local/lib#新增行

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

[root@webuwsgi-2.0.4]#cpuwsgi/usr/local/bin/

6.安装Django[root@webapps]#cdDjango-1.4.9

[root@webDjango-1.4.9]#pythonsetup.pyinstall

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

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

[root@webdjango-debug-toolbar-master]#pythonsetup.pyinstall

[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@webOMserverweb]#view/data/www/OMserverweb/settings.py

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

connect里的ip修改为172.27.9.23

11.修改Nginx配置server{

listen80;

server_namelocalhost;

location/{

includeuwsgi_params;

uwsgi_pass127.0.0.1:9001;

uwsgi_connect_timeout30;

uwsgi_paramUWSGI_CHDIR/data/www/OMserverweb;

uwsgi_paramUWSGI_SCRIPTdjango_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@webOMserverweb]#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@webOMserverweb]#uwsgi--ini/data/www/OMserverweb/uwsgi.ini

[uWSGI]gettingINIconfigurationfrom/data/www/OMserverweb/uwsgi.ini

[root@webOMserverweb]#nginx

启动日志查看:[root@weblogs]#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@serverapp-server]#yum-yinstallunzip

[root@serverapp-server]#unzipsetuptools-39.1.0.zip

[root@serverapp-server]#cdsetuptools-39.1.0

[root@serverapp-server]#pythonsetup.pyinstall

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

[root@serverapp-server]#tar-zxvfansible-2.3.1.0-1.tar.gz

[root@serverapp-server]#cdansible-2.3.1.0-1

[root@serveransible-2.3.1.0-1]#pythonsetup.pyinstall

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

[root@serverapp-server]#tar-zxvfsshpass.tar.gz

[root@serverapp-server]#cdsshpass-1.06/

[root@serversshpass-1.06]#./configure

[root@serversshpass-1.06]#make&&makeinstall

2.ansible配置

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

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

[root@serverexamples]#cpansible.cfghosts/etc/ansible

[root@serverexamples]#view/etc/ansible/hosts

[webservers]

##

##

##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~]#ssh172.27.9.17

Theauthenticityofhost'172.27.9.17(172.27.9.17)'can'tbeestablished.

ECDSAkeyfingerprintisb2:dc:51:b1:a1:b6:e2:4a:c1:ab:f4:e3:15:48:4c:f6.

Areyousureyouwanttocontinueconnecting(yes/no)?yes

Warning:Permanentlyadded'172.27.9.17'(ECDSA)tothelistofknownhosts.

root@172.27.9.17'spassword:

ansible进行ping测试[root@server~]#ansible172.27.9.17-mping-k

SSHpassword:

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.pubroot@172.27.9.17

/usr/bin/ssh-copy-id:INFO:attemptingtologinwiththenewkey(s),tofilteroutanythatarealreadyinstalled

/usr/bin/ssh-copy-id:INFO:1key(s)remaintobeinstalled--ifyouarepromptednowitistoinstallthenewkeys

root@172.27.9.17'spassword:

Numberofkey(s)added:1

Nowtryloggingintothemachine,with:"ssh'root@172.27.9.17'"

andchecktomakesurethatonlythekey(s)youwantedwereadded.

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

Lastlogin:WedMay917:50:17from172.27.9.19

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

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

[root@serverrpyc-3.2.3]#pythonsetup.pyinstall

6.Server端配置[root@serverapp-server]#mvOMServer/home

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

[root@serverOMServer]#viewconfig.py

本文以ansible为例

7.修改数据库配置

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

8.启动server[root@serverOMServer]#pythonOMserver.py&

[root@serverOMServer]#netstat-an|grep11511

tcp000.0.0.0:115110.0.0.0:*LISTEN

11511端口处于监听状态

9.访问web页面

测试

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

‘提交’确定

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

[root@serveransible]#viewMid_1008.py#-*-coding:utf-8-*-

fromPublic_libimport*

#查看系统版本模块#

classModulehandle():

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")

defrun(self):

try:

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

iflen(self.Runresult["failed"])==0andlen(self.Runresult["success"])==0andlen(self.Runresult["unreachable"])==0:

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

exceptException,e:

returnstr(e)

returnself.Runresult

常见错误:

server进程异常,重启server端主进程:[root@serverOMServer]#pythonOMserver.py&

原因:server端开启了防火墙[root@serverOMServer]#systemctlstopfirewalld.service

[root@serverOMServer]#systemctldisablefirewalld.service

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

[root@webOMserverweb]#uwsgi--iniuwsgi.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的掌握有一定要求。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。