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

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

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

https://blog.liuts.com/post/245/

https://blog.liuts.com/post/246/

https://github.com/yorkoliu/pyauto

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

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

主机 ip 操作系统 软件 备注
web 172.27.9.17 Centos7.3.1611 Python2.7.5、Django1.4.9、uwsgi2.0.4、mysql5.7.22、rpyc3.2.3、nginx1.12.2、setuptools0.6c11 关闭防火墙和selinux
server 172.27.9.23 Centos7.3.1611 Python2.7.5、rpyc3.2.3、setuptools39.1.0、ansible2.3.1.0-1 关闭防火墙和selinux
agent01 172.27.9.19 Centos7.3.1611 / 被控主机
agent02 172.27.9.22 Centos7.3.1611 / 被控主机

Web端搭建

安装包准备:

链接:https://pan.baidu.com/s/1Y6nYv3L9udEGsIsOma2Vzg 密码:048j

[[email protected] ~]# mkdir /home/apps

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

1.nginx部署

参考文档:http://blog.51cto.com/3241766/2094315

[[email protected] ~]# yum -y install gcc-c++
[[email protected] ~]# yum  -y install  pcre pcre-devel
[[email protected] ~]# yum -y install zlib zlib-devel
[[email protected] ~]# yum -y install wget
[[email protected] ~]# wget -c https://nginx.org/download/nginx-1.12.2.tar.gz
[[email protected] ~]# tar -zxvf nginx-1.12.2.tar.gz
[[email protected] ~]# groupadd nginx
[[email protected] ~]# useradd -g nginx -d /home/nginx nginx
[[email protected] ~]# passwd nginx
[[email protected] ~]# cd nginx-1.12.2
[[email protected] nginx-1.12.2]# ./configure --user=nginx --group=nginx --prefix=/usr/local/nginx
[[email protected] nginx-1.12.2]# make && make install
[[email protected] nginx-1.12.2]# cd /usr/local/nginx/sbin/
[[email protected] sbin]# ln -s /usr/local/nginx/sbin/nginx /usr/local/bin/nginx

2.mysql数据库安装

[[email protected] ~]# rpm -ivh https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
[[email protected] ~]# yum -y install mysql-community-server
[[email protected] ~]# systemctl start mysqld.service
[[email protected] ~]# systemctl enable mysqld.service

修改密码:

[[email protected] ~]# cat /var/log/mysqld.log | grep password
2018-05-08T09:07:09.591079Z 1 [Note] A temporary password is generated for [email protected]: Ipuq?4#lWyo+
[[email protected] ~]# 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 [email protected]'%' identified by 'Omserver_user123!';
Query OK, 0 rows affected, 1 warning (0.00 sec)

导入表数据:

[[email protected] apps]# cd /home/apps/
[[email protected] 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模块安装:

[[email protected] apps]# tar -xvf setuptools-0.6c11.tar.gz
[[email protected] apps]# cd setuptools-0.6c11
[[email protected] setuptools-0.6c11]# python setup.py build
[[email protected] setuptools-0.6c11]# python setup.py install

MySQL-python模块安装:

[[email protected] apps]# cd MySQL-python-1.2.5
[[email protected] MySQL-python-1.2.5]# python setup.py install

4.rpyc模块安装

rpyc用于平台与主控端做数据通讯交互

[[email protected] apps]# cd rpyc-3.2.3
[[email protected] rpyc-3.2.3]# python setup.py install

5.uwsgi模块安装

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

[[email protected] apps]# cd uwsgi-2.0.4
[[email protected] uwsgi-2.0.4]# make

安装成功:

[[email protected] uwsgi-2.0.4]# view /etc/ld.so.conf
include ld.so.conf.d/*.conf
/usr/local/lib    #新增行
[[email protected] uwsgi-2.0.4]# ldconfig    #让动态链接库为系统所共享
[[email protected] uwsgi-2.0.4]# cp uwsgi /usr/local/bin/

6.安装Django

[[email protected] apps]# cd Django-1.4.9
[[email protected] Django-1.4.9]# python setup.py install

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

http://www.cnblogs.com/qianyuliang/p/6814376.html

https://zhuanlan.zhihu.com/p/24831528

7.django-debug-toolbar安装

[[email protected] apps]# cd /home/apps/django-debug-toolbar-master/
[[email protected] django-debug-toolbar-master]# python setup.py install 
[[email protected] ~]# view /data/www/OMserverweb/settings.py

根据实际情况修改如下:

8.导入项目文件

导入项目文件至/data/www目录

链接:https://pan.baidu.com/s/1Z69_DOwR4R3y06Jcgn7jxA 密码:uhyl

[[email protected] ~]# mkdir -p /data/www
[[email protected] ~]# cd /data/www

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

9.修改数据库连接信息

[[email protected] OMserverweb]# view /data/www/OMserverweb/settings.py

10.修改主控端rpyc主机IP

[[email protected] 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安装包中:

[[email protected] 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服务

[[email protected] OMserverweb]# uwsgi --ini /data/www/OMserverweb/uwsgi.ini
[uWSGI] getting INI configuration from /data/www/OMserverweb/uwsgi.ini
[[email protected] OMserverweb]# nginx

启动日志查看:

[[email protected] logs]# more /data/logs/django_uwsgi.log

nginx日志查看:

[[email protected] ~]# tail /usr/local/nginx/logs/access.log

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

Server端搭建

下载安装包:

链接:https://pan.baidu.com/s/11FGbZ1Q9oedrqdKnnHhCwQ 密码:yszq

[[email protected] ~]# mkdir /home/app-server/

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

1.ansible部署

setuptools安装:

[[email protected] ~]# cd /home/app-server/
[[email protected] app-server]# yum -y install unzip
[[email protected] app-server]# unzip setuptools-39.1.0.zip
[[email protected] app-server]# cd setuptools-39.1.0
[[email protected] app-server]# python setup.py install

ansible安装(ansible必须使用2.3.1.0-1版本,否则会报错):

[[email protected] ~]# cd /home/app-server/
[[email protected] app-server]# tar -zxvf ansible-2.3.1.0-1.tar.gz 
[[email protected] app-server]# cd ansible-2.3.1.0-1
[[email protected] ansible-2.3.1.0-1]# python setup.py install

sshpass安装:

[[email protected] ansible-2.3.1.0-1]# cd ..
[[email protected] app-server]# tar -zxvf sshpass.tar.gz
[[email protected] app-server]# cd sshpass-1.06/
[[email protected] sshpass-1.06]# ./configure
[[email protected] sshpass-1.06]# make && make install

2.ansible配置

添加主机IP

[[email protected] ~]# mkdir -p /etc/ansible
[[email protected] ~]# cd /home/app-server/ansible-2.3.1.0-1/examples
[[email protected] examples]# cp ansible.cfg hosts /etc/ansible
[[email protected] 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."

[[email protected] ~]# 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.
[email protected]'s password:

ansible进行ping测试

[[email protected] ~]# 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来下发生成的公钥。

创建秘钥:

分别同步公钥至目标主机:

[[email protected] ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub [email protected]
/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
[email protected]'s password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh '[email protected]'"
and check to make sure that only the key(s) you wanted were added.

校验SSH无密码配置是否成功:

[[email protected] ~]# ssh 172.27.9.17
Last login: Wed May  9 17:50:17 2018 from 172.27.9.19

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

5.rpyc模块安装

[[email protected] app-server]# tar -zxvf rpyc-3.2.3.tar.gz
[[email protected] rpyc-3.2.3]# python setup.py install

6.Server端配置

[[email protected] app-server]# mv OMServer /home
[[email protected] app-server]# cd /home/OMServer/
[[email protected] OMServer]# view config.py

本文以ansible为例

7.修改数据库配置

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

8.启动server

[[email protected] OMServer]# python OMserver.py &
[[email protected] OMServer]# netstat -an|grep 11511 
tcp        0      0 0.0.0.0:11511           0.0.0.0:*               LISTEN

11511端口处于监听状态

9.访问web页面

测试

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

‘提交’确定

编写后台任务模块,编号为1008

[[email protected] ~]# cd /home/OMServer/modules/ansible
[[email protected] 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端主进程:

[[email protected] OMServer]# python OMserver.py &

原因:server端开启了防火墙

[[email protected] OMServer]# systemctl stop firewalld.service
[[email protected] OMServer]# systemctl disable firewalld.service

原因:web端uwsgi进程异常,重拉进程

[[email protected] OMserverweb]# ps -ef|grep uwsgi |awk '{print $2}'|xargs kill -9 
[[email protected] 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的掌握有一定要求。

原文地址:http://blog.51cto.com/3241766/2114863

时间: 2024-10-09 02:08:06

OMserver自动化运维平台搭建及测试的相关文章

自动化运维平台之系统自动化安装Cobbler系统使用详解

一.简介 Cobbler是一个快速网络安装linux的服务,而且在经过调整也可以支持网络安装windows.该工具使用python开发,小巧轻便(才15k行python代码),使用简单的命令即可完成PXE网络安装环境的配置,同时还可以管理DHCP.DNS.以及yum仓库.构造系统ISO镜像. Cobbler支持命令行管理,web界面管理,还提供了API接口,可以方便二次开发使用. Cobbler客户端Koan支持虚拟机安装和操作系统重新安装,使重装系统更便捷. 二.cobbler提供的功能 使用

2015年5月9日公开课第二季—《自动化运维平台的设计理念》

朋友们,随着我们上期公开课的成功举办,马哥linux运维为了给大家分享更多的干货,我们将于2015年5月9日进行公开课第二季,本季公开课将由magedu-comyn老师为大家进行分享! 运维即将迈入2.0时代,越来越追求平台化,自动化,工具化等多元化的整合,相应的,对运维的要求在慢慢的提升,知名互联网公司中,devops已经成为一种新趋势,新的职业,在未来的运维职业中,自动化运维程度要求将会更高,comyn大神的运维自动化框架,已经成熟的运用于多家互联网公司中,标准化流程化自动化,极大的提高了运

从零打造B/S 自动化运维平台   (一、自动化运维平台的应用及业务流程)

背景以及需求: 随着企业业务的不断发展,运营方面,如何保障业务的高可用及服务质量?很多企业处于"半自动化"状态,一但出现故障,技术部人员都会加入"救火"的行列,不仅浪费人力物力,而且使业务出现一段"停运时间",给公司造成一定的损失. 解决方案: 如果要解决以上问题,就需要构建一个高效的运营模式. 要构建一个高效的运营系统,可以从以下几方面放手: 1)制定符合企业特点的 IT 制度 2)流程规范 3)质量与成本管理 4)运营效率建设 接下来我们就开

MySQL自动化运维平台建设

MySQL自动化运维工具Inception 一.Inception简介 Inception是集审核.执行.回滚于一体的一个自动化运维系统,它是根据MySQL代码修改过来的,用它可以很明确的,详细的,准确的审核MySQL的SQL语句,它的工作模式和MySQL完全相同,可以直接使用MySQL客户端来连接,但不需要验证权限,它相对应用程序(上层审核流程系统等)而言,是一个服务器,在连接时需要指定服务器地址及Inception服务器的端口即可,而它相对要审核或执行的语句所对应的线上MySQL服务器来说,

saltstack自动化运维平台的介绍、部署、基本使用

saltstack:服务器基础架构集中化管理平台,有配置管理.远程执行.监控等功能,基于Python语言开发,结合轻量级消息队列(ZeroMQ)与Python第三方模块(Pyzmq.PyCrypto.Pyjinjia2.python-msgpack和PyYAML等)构建, 优点(1.部署简单便捷:2支持的系统多样:3配置简单,功能强,扩展性好:4基于主从,用证书建立连接,安全性高:5支持API及自定义模块) 认证minion在启动时,会在/etc/salt/pki/minion自动生成minio

运维平台搭建

初步设定如图 开发语言:python web框架:django

[转载] 运维平台规划体系全介绍

原文: http://www.infoq.com/cn/articles/operation-platform-planning-introduction 很多观点我都比较赞同, 特别是工作流引擎+运维可视化的观点 识别运维平台的边界在哪儿,才能更好地构建平台,从而协助运维的日常工作. 在之前的文章中,谈到过“运维的本质——可视化”,在可视化的篇幅中,着重介绍自动化的可视化和数据的可视化:在后续的篇章中又介绍了“互联网运维的价值体系”,里面分解了几个维度:质量.成本.效率.安全等.以上都是为了清

BAT解密:互联网技术发展之路(10)- 运维平台技术

备注:本来想自己写一篇运维体系的文章的,但毕竟不是专业运维人员出身,担心讲的太肤浅,因此转载我的好朋友王金银(江湖人称老王)同学发表在InfoQ的运维体系介绍.老王的牛逼相信很多同学已经领教过了,全球运维技术大会深圳站一个人专场讲运维能讲3个小时,而且会场还爆满,更多老王的介绍可以参考文章的最后,也可以关注老王的微信公众号:互联网运维杂谈. 原文链接:运维平台规划体系全介绍 =============================================================

用友iuap云运维平台支持基于K8s的微服务架构

什么是微服务架构? 微服务(MicroServices)架构是当前互联网业界的一个技术热点,业内各公司也都纷纷开展微服务化体系建设.微服务架构的本质,是用一些功能比较明确.业务比较精练的服务去解决更大.更实际的问题.该架构强调的一些准则:单一职责.协议轻量.进程隔离.数据分离.独立部署.按需伸缩. 什么是Kubernetes? Kubernetes是Google开源的容器集群管理系统,其提供应用部署.维护. 扩展机制等功能,利用Kubernetes能方便地管理跨机器运行容器化的应用,其主要功能: