`

python 常用基础管理工具

阅读更多

       

Fabric

Fabric 是一个简化系统管理任务的库。Chef和Puppet倾向于关注管理服务器和系统库,而Fabric更加关注应用级别的任务,比如说部署。

安装Fabric:

$ pip install fabric

下面的代码将会创建我们可以使用的两个任务: memory_usage 和 deploy。前者将会在每台机器上输出内存使用情况。后者将会ssh到每台服务器,cd到我们的工程目录,激活虚拟环境,拉取最新的代码库,以及重启应用服务器。

from fabric.api import cd, env, prefix, run, task

env.hosts = ['my_server1', 'my_server2']

@task
def memory_usage():
    run('free -m')

@task
def deploy():
    with cd('/var/www/project-env/project'):
        with prefix('. ../bin/activate'):
            run('git pull')
            run('touch app.wsgi')

将上述代码保存到文件 fabfile.py 中,我们可以这样检查内存的使用:

$ fab memory_usage
[my_server1] Executing task 'memory'
[my_server1] run: free -m
[my_server1] out:              total     used     free   shared  buffers   cached
[my_server1] out: Mem:          6964     1897     5067        0      166      222
[my_server1] out: -/+ buffers/cache:     1509     5455
[my_server1] out: Swap:            0        0        0

[my_server2] Executing task 'memory'
[my_server2] run: free -m
[my_server2] out:              total     used     free   shared  buffers   cached
[my_server2] out: Mem:          1666      902      764        0      180      572
[my_server2] out: -/+ buffers/cache:      148     1517
[my_server2] out: Swap:          895        1      894

and we can deploy with:

$ fab deploy

额外的特性包括并行执行、和远程程序交互、以及主机分组。

Fabric 文档

Salt

Salt 是一个开源的基础管理工具。它支持从中心节点(主要的主机)到多个主机(指从机)的远程命令执行。它也支持系统语句,能够使用简单的模板文件配置多台服务器。

Salt支持Python 2.6和2.7,并能通过pip安装:

$ pip install salt

在配置好一台主服务器和任意数量的从机后,我们可以在从机上使用任意的shell命令或者预制的复杂命令的模块。

下面的命令使用ping模块列出所有可用的从机:

$ salt '*' test.ping

主机过滤是通过匹配从机id或者使用颗粒系统(grains system)。 颗粒(grains) 系统使用静态的主机信息,比如操作系统版本或者CPU架构,来为Salt模块提供主机分类内容。

下列命令行使用颗粒系统列举了所有可用的运行CentOS的从机:

$ salt -G 'os:CentOS' test.ping

Salt也提供状态系统。状态能够用来配置从机。

例如,当一个从机接受读取下列状态文件的指令,他将会安装和启动Apache服务器:

apache:
  pkg:
    - installed
  service:
    - running
    - enable: True
    - require:
      - pkg: apache

状态文件可以使用YAML、Jinja2模板系统或者纯Python编写。

Salt 文档

Psutil

Psutil 是获取不同系统信息(比如CPU、内存、硬盘、网络、用户、进程)的接口。

下面是一个关注一些服务器过载的例子。如果任意一个测试(网络、CPU)失败,它将会发送一封邮件。

# 获取系统变量的函数:
from psutil import cpu_percent, net_io_counters
# 休眠函数:
from time import sleep
# 用于email服务的包:
import smtplib
import string
MAX_NET_USAGE = 400000
MAX_ATTACKS = 4
attack = 0
counter = 0
while attack <= MAX_ATTACKS:
    sleep(4)
    counter = counter + 1
    # Check the cpu usage
    if cpu_percent(interval = 1) > 70:
        attack = attack + 1
    # Check the net usage
    neti1 = net_io_counters()[1]
    neto1 = net_io_counters()[0]
    sleep(1)
    neti2 = net_io_counters()[1]
    neto2 = net_io_counters()[0]
    # Calculate the bytes per second
    net = ((neti2+neto2) - (neti1+neto1))/2
    if net > MAX_NET_USAGE:
        attack = attack + 1
    if counter > 25:
        attack = 0
        counter = 0
# 如果attack大于4,就编写一封十分重要的email
TO = "you@your_email.com"
FROM = "webmaster@your_domain.com"
SUBJECT = "Your domain is out of system resources!"
text = "Go and fix your server!"
BODY = string.join(("From: %s" %FROM,"To: %s" %TO,"Subject: %s" %SUBJECT, "",text), "\r\n")
server = smtplib.SMTP('127.0.0.1')
server.sendmail(FROM, [TO], BODY)
server.quit()

一个类似于基于psutil并广泛扩展的top,并拥有客服端-服务端监控能力的完全终端应用叫做 glance 。

Ansible

Ansible 是一个开源系统自动化工具。相比于Puppet或者Chef最大的优点是它不需要客户机上的代理。Playbooks是Ansible的配置、部署和编制语言,它用YAML格式编写,使用Jinja2作为模板。

Ansible支持Python 2.6和2.7,并能使用pip安装:

$ pip install ansible

Ansible requires an inventory file that describes the hosts to which it has access. Below is an example of a host and playbook that will ping all the hosts in the inventory file. Ansible需要一个清单文件,来描述主机经过何处。以下是一个主机和playbook的例子,在清单文件中将会ping所有主机。

清单文件示例如下: hosts.yml

[server_name]
127.0.0.1

playbook示例如下: ping.yml

---
- hosts: all

  tasks:
    - name: ping
      action: ping

要运行playbook:

$ ansible-playbook ping.yml -i hosts.yml --ask-pass

Ansible playbook在 hosts.yml 中将会ping所有的服务器。你也可以选择成组的服务器使用Ansible。了解更多关于Ansible的信息,请阅读 Ansible Docs 。

An Ansible tutorial 也是一个很棒的且详细的指引来开始熟悉Ansible。

Chef

Chef 是一个系统的云基础设施自动化框架,它使部署服务器和应用到任何物理、虚拟或者云终端上变得简单。你可以选择进行配置管理,那将主要使用Ruby去编写你的基础设施代码。

Chef客户端运行于组成你的基础设施的每台服务器上,这些客户端定期检查Chef服务器来确保系统是均衡并且处于设想的状态。由于每台服务器拥有它自己的独立的Chef客户端,每个服务器配置自己,这种分布式方法使得Chef成为一个可扩展的自动化平台。

Chef通过使用定制的在cookbook中实现的食谱(配置元素)来工作。Cookbook通常作为基础设施的选择项,作为包存放在Chef服务器中。请阅读 Digital Ocean tutorial series关于Chef的部分来学习如何创建一个简单的Chef服务器。

要创建一个简单的cookbook,使用 knife 命令:

knife cookbook create cookbook_name

Getting started with Chef 对Chef初学者来说是一个好的开始点,许多社区维护着cookbook,可以作为是一个好的参考。要服务自己的基础设施配置需求,请见 Chef Supermarket 。

Puppet

Puppet 是来自Puppet Labs的IT自动化和配置管理软件,允许系统管理员定义他们的IT基础设施状态,这样就能够提供一种优雅的方式管理他们成群的物理和虚拟机器。

Puppet均可作为开源版和企业版获取到。其模块是小的、可共享的代码单元,用以自动化或定义系统的状态。 Puppet Forge 是一个模块仓库,它由社区编写,面向开源和企业版的Puppet。

Puppet代理安装于其状态需要被监控或者修改的节点上。作为特定服务器的Puppet Master负责组织代理节点。

代理节点发送系统的基本信息到Puppet Master,比如说操作系统、内核、架构、ip地址、主机名等。接着,Puppet Master编译携带有节点生成信息的目录,告知每个节点应如何配置,并发送给代理。代理便会执行前述目录中的变化,并向Puppet Master发送回一份报告。

Facter是一个有趣的工具,它用来传递Puppet获取到的基本系统信息。这些信息可以在编写Puppet模块的时候作为变量来引用。

$ facter kernel
Linux
$ facter operatingsystem
Ubuntu

在Puppet中编写模块十分直截了当。Puppet清单(manifest)组成了Puppet模块。Puppet清单以扩展名 .pp 结尾。下面是一个Puppet中 ‘Hello World’的例子。

notify { 'This message is getting logged into the agent node':

    #As nothing is specified in the body the resource title
    #the notification message by default.
}

这里是另一个基于系统的逻辑的例子。注意操纵系统信息是如何作为变量使用的,变量前加了前缀符号 $ 。类似的,其他信息比如说主机名就能用 $hostname 来引用。

notify{ 'Mac Warning':
    message => $operatingsystem ? {
        'Darwin' => 'This seems to be a Mac.',
        default  => 'I am a PC.',
    },
}

Puppet有多种资源类型,需要时可以使用包-文件-服务(package-file-service)范式来承担配置管理的主要任务。下面的Puppet代码确保了系统中安装了OpenSSH-Server包,并且在每次sshd配置文件改变时重启sshd服务。

package { 'openssh-server':
    ensure => installed,
}

file { '/etc/ssh/sshd_config':
    source   => 'puppet:///modules/sshd/sshd_config',
    owner    => 'root',
    group    => 'root',
    mode     => '640',
    notify   =>  Service['sshd'], # sshd will restart
                                  # whenever you edit this
                                  # file
    require  => Package['openssh-server'],

}

service { 'sshd':
    ensure    => running,
    enable    => true,
    hasstatus => true,
    hasrestart=> true,
}

了解更多信息,参考 Puppet Labs 文档 。

Blueprint

待处理

Write about Blueprint

Buildout

Buildout 是一个开源软件构件工具。Buildout由Python编写。它实现了配置和构建脚本分离的原则。Buildout主要用于下载和设置正在开发或部署软件的Python egg格式的依赖。在任何环境中构建任务的指南(recipe,原意为“食谱”,引申为“指南”)能被创建,许多早已可用。

分享到:
评论

相关推荐

    Python3完全零基础入门精讲超清教程.txt

    计算机基础常识.mp402-Python语言概览、安装与运行.mp403-Python 变量、数据类型及存储.mp404-Python 常用数据类型概览.mp405-数值与字符串.mp406-列表list.mp407-字典表dict 与元组 tuple.mp408-文件与类型汇总.mp...

    基于python实现人力资源管理系统的设计与实现.docx

    2.3 python常用库介绍 第三章 人力资源管理系统需求分析 3.1 系统概述 3.2 功能需求 3.3 性能需求 3.4 接口需求 3.5 安全需求 第四章 人力资源管理系统设计与实现 4.1 系统设计概述 4.2 模块一设计与实现 4.3 模块二...

    Python3完全零基础入门精讲 全套视频教程 下载地址.txt

    04-Python 常用数据类型概览.mp4 05-数值与字符串.mp4 06-列表list.mp4 07-字典表dict 与元组 tuple.mp4 08-文件与类型汇总.mp4 09-语句、表达式与if分支.mp4 10-循环语句.mp4 11-迭代.mp4 12-函数定义与参数.mp4 13...

    Python小白到大牛-视频笔记

    项目实战4:开发Python版QQ2006聊天工具。 为便于读者高效学习,快速掌握Python编程方法。本书作者精心制作了电子书、完整的教学课件、完整的源代码与丰富的配套视频教程以及在线答疑服务等内容。

    《Python从小白到大牛》思维导图.html

    项目实战4:开发Python版QQ2006聊天工具。 为便于读者高效学习,快速掌握Python编程方法。本书作者精心制作了电子书、完整的教学课件、完整的源代码与丰富的配套视频教程以及在线答疑服务等内容。

    零基础 Python 数据分析课程.zip

    网盘文件永久链接1 Python 常用的变量与数据类型2 流程控制:如何控制代码执行的顺序?3 函数:快速实现代码的复用4 类与对象:更好地组织你的代码5 案例实战:日程管理小工具6 获取数据:公开数据集与 DIY 数据集7 ...

    采用pip安装配置python数据分析开发环境.docx

    conda是一个包和环境管理工具,它不仅能管理包,还能隔离和管理不同python版本的环境。 anaconda和miniconda都是conda的一种发行版。只是包含的包不同: anaconda包含了conda、python等180多个科学包及其依赖项,...

    采用pip安装配置python数据分析开发环境new.docx

    conda是一个包和环境管理工具,它不仅能管理包,还能隔离和管理不同python版本的环境。 anaconda和miniconda都是conda的一种发行版。只是包含的包不同: anaconda包含了conda、python等180多个科学包及其依赖项,...

    Python语言程序设计源代码.zip

    Python程序设计基础部分(第1章至第6章、第10章)主要介绍Python作为一门高级编程语言所涉及的语法知识、控制结构、函数与模块、类和对象、图形界面设计,并穿插了计数、累加、连乘等数值计算常用算法内容;...

    基于Python的数据分析的研究.doc

    文章首先对Python数据分析技术进行 介绍,并研究Python数据分析工具的常用类库。在此基础上,探讨Python数据分析平台 的设计及应用,以期为相关数据分析工作提供参考。 关键词:Python;数据分析;平台设计 中图分类号...

    Python全栈从零入门:一份全面的思维导图

    您将学习如何创建吸引人的用户界面,实现交互功能,并了解常用的前端框架和工具。 后端开发:介绍了Python的Web框架,如Django和Flask,以及如何构建后端应用程序。您将学习处理HTTP请求、路由、视图函数和模板等...

    Python核心编程第二版

     第3章 Python基础   3.1 语句和语法   3.1.1 注释(#)   3.1.2 继续(\)   3.1.3 多个语句构成代码组(:)   3.1.4 代码组由不同的缩进分隔   3.1.5 同一行书写多个语句(;)   3.1.6 ...

    Python全套教程附赠全部源码解析资源免费提供

    这个资源包括了从Python基础到高级应用的全面教程,并且提供了每个示例代码的详细解析,能够帮助学习者更好地理解Python的各个方面。 1. 教程内容 该教程涵盖了Python语言的各个方面,包括但不限于: - **基础...

    课程源码《Django入门到进阶-适合Python小白的系统课程》

    这门课程适合Python初学者,通过Django框架学习Web开发的基础和进阶知识: 入门与环境配置:介绍Django框架及开发环境配置。 路由与视图:创建视图和路由,学习参数设置和扩展知识。 模板使用:详细讲解Django模板...

    基于Python实现的内网穿透工具+源代码+文档说明

    ## 特性 ...3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 --------

    毕设&课设&项目&实训-计算机基础知识:计算机网络、操作系统、数据库、常用工具运维.zip

    计算机基础知识:计算机网络、操作系统、数据库、数据结构与算法、分布式集群、大数据、计算机组成原理、软件工程、设计模式、代码规范、常用工具运维 【项目资源】: 包含前端、后端、移动开发、操作系统、人工智能...

    最新Python3.5零基础+高级+完整项目(28周全)培训视频学习资料

    最新Python3.5零基础+高级+完整项目(28周全)培训视频学习资料;本资料仅用于学习。 【课程内容】 第1周 开课介绍 python发展介绍 第一个python程序 变量 字符编码与二进制 字符编码的区别与介绍 用户交互程序 if ...

    python入门到高级全栈工程师培训 第3期 附课件代码

    04 Python 基础知识练习题试题 第12章 01 今日内容介绍以及基础测试题答案讲解 02 Python 列表的魔法 03 Python 元组的魔法 04 Python 字典的魔法 05 Python 错误更正:布尔值可以作为字典的key 06 Python 今日...

    Python核心编程第二版(ok)

     第3章 Python基础   3.1 语句和语法   3.1.1 注释(#)   3.1.2 继续()   3.1.3 多个语句构成代码组()   3.1.4 代码组由不同的缩进分隔   3.1.5 同一行书写多个语句(;)   3.1.6 模块...

    Python核心编程(第二版).pdf (压缩包分2部分,第二部分)

     第3章 python基础   3.1 语句和语法   3.1.1 注释(#)   3.1.2 继续(\)   3.1.3 多个语句构成代码组(:)   3.1.4 代码组由不同的缩进分隔   3.1.5 同一行书写多个语句(;)   3.1.6 ...

Global site tag (gtag.js) - Google Analytics