系统自动化配置和管理工具 SaltStack

我们的服务器由 Puppet 配置管理工具来管理,服务器上线后由 puppet 完成初始化和配置等一系列工作(比如,静态 IP 配置,DNS 设置,NFS/SAN 挂载,LDAP/Kerberos 登录,安全加固配置,内核参数优化,防火墙规则配置等等),等初始化完成后开始运行,运行一段时间后有一些需要自动和手动操作的任务(比如升级、重启、备份等),这时候我们使用 Fabric 来批量执行这些临时任务。
所以从这里可以看到 Puppet 和 Fabric 其实是两个不同性质的工具,看下面的归类可能会更清楚一些。Puppet 和 Fabric 两个的工作其实可以由一个工具 SaltStack(或 AnsibleWorks)完成,减少一个工具的使用会减轻一点负担(学习工具的人力成本、安装和配置工具的时间成本等等)。
操作系统和软件的安装、配置、初始化等;
(Puppet, Chef, CFEngine, AnsibleWorks, SaltStack, …)
自动执行任务,比如定期备份、清除日志等;
(Fabric, AnsibleWorks, SaltStack, …)
手动执行任务,比如部署应用、升级、重启、检查和校验文件系统、增加用户等。
(Fabric, Rake, Func, Rundeck, AnsibleWorks, SaltStack, …)
SaltStack 采用 zeromq 消息队列进行通信,和 Puppet/Chef 比起来,SaltStack 速度快得多。还有一点我们喜欢 SaltStack 的地方是它是 Python 写的,比 Puppet/Chef 这些 Ruby 工具更接近我们的能力圈。
安装主控服务器(salt master)
和大多数类似工具一样,SaltStack 需要在一台机器(主控)上安装服务器端软件(SaltStack 称之为 salt master),在多台机器(受控)上安装客户端软件(SaltStack 称之为 salt minion)。在主控机器上给下属(受控)发命令,在受控机器上接受和执行上级(主控)的命令。
在 Ubuntu 上安装 salt master:
$ sudo add-apt-repository ppa:saltstack/salt $ sudo apt-get update $ sudo apt-get install salt-master
在 CentOS 6.x 上安装 salt master:
# rpm -Uvh http://ftp.linux.ncsu.edu/pub/epel/6/i386/epel-release-6-8.noarch.rpm # yum update # yum install salt-master
安装受控客户端(salt minion)
在 Ubuntu 上安装 salt minion:
$ sudo add-apt-repository ppa:saltstack/salt $ sudo apt-get update $ sudo apt-get install salt-minion
在 CentOS 6.x 上安装 salt minion:
# rpm -Uvh http://ftp.linux.ncsu.edu/pub/epel/6/i386/epel-release-6-8.noarch.rpm # yum update # yum install salt-minion
安装完 salt minion 后记得修改配置文件,让 salt minion 指向 salt master 服务器地址:
$ sudo vi /etc/salt/minion ... # Set the location of the salt master server, if the master server cannot be # resolved, then the minion will fail to start. master: saltmaster.vpsee.com ... $ sudo restart salt-minion
在 master 上执行 salt-key list 就会看到有个 minion1.vpsee.com 请求加入受控,执行 -a 接受请求后,主控和受控之间的信任关系就建立起来了,主控就可以任意 “摆布” 受控了:
# salt-key list Accepted Keys: Unaccepted Keys: minion1.vpsee.com Rejected Keys: # salt-key -a minion1.vpsee.com The following keys are going to be accepted: Unaccepted Keys: minion1.vpsee.com Proceed? [n/Y]
执行命令的例子
在主控机器上执行一个命令,让所有受控机器执行 hostname 命令:
# salt '*' cmd.run "hostname"
minion1.vpsee.com:
minion1.vpsee.com
在主控机器上执行一个命令,让所有受控机器上执行内建 test.ping 命令:
# salt '*' test.ping
minion1.vpsee.com:
True
还有一些内建命令可以尝试:
# salt '*' disk.usage # salt '*' network.interfaces
执行状态的例子
开头的时候我们说了 SaltStack = Fabric + Puppet,上面 “执行命令的例子” 演示了 Fabric 类似的功能,这里要演示的是 Puppet 类似的功能,在主控上定义好系统配置应该有的状态,然后受控自动完成相应的操作和配置。
首先确定状态定义的文件应该放在什么地方,以下操作都在主控(salt master)上执行。检查 /etc/salt/master 文件的 file_roots 条目,默认是在 /srv/salt 下,如果没有这个目录还需要手动创建一个:
# vi /etc/salt/master ... #file_roots: # base: # - /srv/salt ... # mkdir /srv/salt
比如我们想在所有受控机器上安装 vim 软件包,并使用自己定义的 vimrc 文件:
# vi /srv/salt/vim.sls
vim:
pkg.installed
/etc/vimrc:
file.managed:
- source: salt://vimrc
- mode: 644
- user: root
- group: root
# vi /srv/salt/vimrc
syntax enable
set textwidth=79
set shiftwidth=4
set tabstop=4
set expandtab
set softtabstop=4
set shiftround
set fileencodings=utf-8
set encoding=utf8
set tenc=utf8
强制执行这个状态:
# salt '*' state.sls vim
再来一个例子,参考 “安装和使用系统监控工具 Glances” 一文,我们想在所有受控机器上安装 Glances,如何实现呢?
# vi /srv/salt/glances.sls
python-pip:
pkg.installed
build-essential:
pkg.installed
python-dev:
pkg.installed
glances:
pip.installed:
- require:
- pkg: python-pip
强制执行这个状态:
# salt '*' state.sls glances
...
minion1.vpsee.com:
----------
State: - pip
Name: glances
Function: installed
Result: True
Comment: Package was successfully installed
Changes: Glances==1.7.1: Installed
...
建议继续学习:
- 自动化测试中Python与C/C++的混合使用 (阅读:4671)
- 自动化运维之企业实际案例分析 (阅读:4326)
- Linux大棚版gtest官网教程译文 (阅读:3168)
- linux下搭建pxe自动化安装环境 (阅读:3187)
- 自动化测试之惑 (阅读:3180)
- 让前端工作更快、更智能:利用StaticPage自动化工作流 (阅读:3102)
- Perl 自动化之网页处理 WordPress 自动登陆查看 (阅读:2803)
- 如何设计软件模块的自动化测试? (阅读:2492)
- CC-lib无线跨平台web页面自动化生成技术的设计实现 (阅读:2120)
- 环境为王-论贴吧环境解决方案 (阅读:2077)
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:vpsee 来源: vpsee.com
- 标签: SaltStack 自动化
- 发布时间:2013-10-08 12:26:34
-
[927] WordPress插件开发 -- 在插件使用 -
[133] 解决 nginx 反向代理网页首尾出现神秘字 -
[52] 如何保证一个程序在单台服务器上只有唯一实例( -
[52] 整理了一份招PHP高级工程师的面试题 -
[50] 全站换域名时利用nginx和javascri -
[50] 海量小文件存储 -
[50] 用 Jquery 模拟 select -
[49] CloudSMS:免费匿名的云短信 -
[48] Innodb分表太多或者表分区太多,会导致内 -
[47] jQuery性能优化指南
