系统管理¶

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
我们可以使用:
$ fab deploy
其他特性包括并行执行、与远程程序的交互和主机分组。
Salt¶
Salt 是一个开源基础设施管理工具。它支持从一个中心点(主主机)到多个主机(小主机)的远程命令执行。它还支持使用简单模板文件配置多个服务器的系统状态。
Salt支持python版本2.6和2.7,可以通过pip安装:
$ pip install salt
在配置了主服务器和任意数量的小型主机之后,我们可以运行任意shell命令,或者在小型机上使用复杂命令的预构建模块。
以下命令列出了使用ping模块的所有可用的迷你主机。
$ salt '*' test.ping
主机过滤是通过匹配迷你ID或使用颗粒系统来完成的。这个 grains 系统使用静态主机信息(如操作系统版本或CPU体系结构)为salt模块提供主机分类。
以下命令列出了使用谷物系统运行CentOS的所有可用的仆人:
$ salt -G 'os:CentOS' test.ping
Salt还提供了一个状态系统。状态可用于配置迷你主机。
例如,当一个小型主机被命令读取以下状态文件时,它将安装并启动Apache服务器:
apache:
pkg:
- installed
service:
- running
- enable: True
- require:
- pkg: apache
状态文件可以使用YAML、 Jinja2模板系统或pure Python编写。
Psutil¶
Psutil 是不同系统信息(如CPU、内存、磁盘、网络、用户和进程)的接口。
下面是一个了解一些服务器过载的示例。如果任何测试(net,cpu)失败,它将发送一封电子邮件。
# Functions to get system values:
from psutil import cpu_percent, net_io_counters
# Functions to take a break:
from time import sleep
# Package for email services:
import smtplib
import string
MAX_NET_USAGE = 400000 # bytes per seconds
MAX_ATTACKS = 4
attack = 0
while attack <= MAX_ATTACKS:
sleep(4)
# Check the net usage wit named tuples
neti1 = net_io_counters().bytes_recv
neto1 = net_io_counters().bytes_sent
sleep(1)
neti2 = net_io_counters().bytes_recv
neto2 = net_io_counters().bytes_sent
# Calculate the bytes per second
net = ((neti2+neto2) - (neti1+neto1))/2
# Check the net and cpu usage
if (net > MAX_NET_USAGE) or (cpu_percent(interval = 1) > 70):
attack+=1
elif attack > 1:
attack-=1
# Write a very important email if attack is higher than 4
TO = "you@your_email.com"
FROM = "webmaster@your_domain.com"
SUBJECT = "Your domain is out of system resources!"
text = "Go and fix your server!"
string="\r\n"
BODY = string.join(("From: %s" %FROM,"To: %s" %TO,
"Subject: %s" %SUBJECT, "",text))
server = smtplib.SMTP('127.0.0.1')
server.sendmail(FROM, [TO], BODY)
server.quit()
一个完整的终端应用程序,如广泛扩展的TOP是 Glance ,它基于psutil,具有客户端-服务器监控的能力。
Ansible¶
Ansible 是一个开源的系统自动化工具。与Puppet或Chef相比,它最大的优势是不需要客户端计算机上的代理。攻略是Ansible的配置、部署和编排语言,使用YAML和JJA2编写,用于模板化。
Ansible支持Python版本2.6和2.7,可以通过pip安装:
$ pip install ansible
Ansible需要一个清单文件来描述它可以访问的主机。下面是一个主机和Playbook的示例,它将ping清单文件中的所有主机。
以下是库存文件示例:hosts.yml
[server_name]
127.0.0.1
下面是一个示例剧本: ping.yml
---
- hosts: all
tasks:
- name: ping
action: ping
运行剧本:
$ ansible-playbook ping.yml -i hosts.yml --ask-pass
Ansible Playbook将ping中的所有服务器 hosts.yml
文件。您还可以使用ansible选择服务器组。有关Ansible的更多信息,请阅读 Ansible Docs。
An Ansible tutorial 也是一个很好的详细介绍开始与Ansible。
Chef¶
Chef 是一个系统和云基础设施自动化框架,使其易于将服务器和应用程序部署到任何物理、虚拟或云位置。如果这是您对配置管理的选择,那么您将主要使用Ruby编写基础结构代码。
Chef客户机在基础结构中的每台服务器上运行,这些服务器定期与Chef服务器进行检查,以确保系统始终保持一致并表示所需的状态。由于每个服务器都有自己独特的Chef客户机,所以每个服务器都配置自己,这种分布式方法使Chef成为一个可扩展的自动化平台。
Chef通过使用定制食谱(配置元素)工作,在食谱中实现。烹饪书,基本上是基础设施选择的包,通常存储在您的Chef服务器中。阅读 DigitalOcean tutorial series 在Chef上学习如何创建一个简单的Chef服务器。
创建一个简单的食谱 knife 使用命令:
knife cookbook create cookbook_name
Getting started with Chef 对于厨师初学者来说是一个很好的起点,许多社区维护的食谱可以作为一个很好的参考,也可以在 Chef Supermarket .
Puppet¶
Puppet Puppet实验室的IT自动化和配置管理软件是否允许系统管理员定义其IT基础设施的状态,从而提供一种优雅的方式来管理物理和虚拟机。
Puppet既可以作为开放源代码,也可以作为企业变体。模块是为自动化或定义系统状态而编写的小型、可共享的代码单元。 Puppet Forge 是由社区为开源和企业木偶编写的模块的存储库。
Puppet代理安装在需要监视或更改其状态的节点上。一个名为puppet master的指定服务器负责协调代理节点。
代理节点向Puppet Master发送有关系统的基本信息,如操作系统、内核、体系结构、IP地址、主机名等。然后,Puppet Master会编译一个目录,其中包含代理提供的有关如何配置每个节点的信息,并将其发送给代理。代理执行目录中规定的更改,并将报告发送回Puppet Master。
Factor是一个有趣的工具,它与Puppet一起提供关于系统的基本事实。这些事实可以在编写Puppet模块时作为变量引用。
$ facter kernel
Linux
$ facter operatingsystem
Ubuntu
在Puppet中编写模块非常直接。木偶显现一起形成木偶模块。木偶宣言以扩展 .pp
。下面是木偶中“你好世界”的一个例子。
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有几种资源类型,但是包文件服务范式是您进行大多数配置管理所需要的。下面的Puppet代码确保OpenSSH-服务器包安装在系统中,并在每次更改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 Documentation
蓝图¶
待处理
写蓝图
Buildout¶
Buildout 是一个开源软件构建工具。构建是使用Python编程语言创建的。它实现了配置与执行设置的脚本分离的原则。buildout主要用于下载和设置 Python eggs 正在开发或部署的软件的格式。在任何环境中都可以创建构建任务的配方,其中许多已经可用。
Shinken¶
Shinken 是一个用python编写的、与nagios兼容的现代监控框架。其主要目标是为用户的监控系统提供一个灵活的体系结构,该体系结构旨在扩展到大型环境中。
Shinken向后兼容Nagios配置标准和插件。它适用于任何支持python的操作系统和体系结构,包括windows、linux和freebsd。