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

运维 系统运维 自动化
系统自动化配置和管理工具 SaltStack 采用 zeromq 消息队列进行通信,和 Puppet/Chef 比起来,SaltStack 速度快得多。还有一点我们喜欢 SaltStack 的地方是它是 Python 写的,比 Puppet/Chef 这些 Ruby 工具更接近我们的能力圈。

我们的服务器由 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, 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 
  • 1.
  • 2.
  • 3.

在 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 
  • 1.
  • 2.
  • 3.

安装受控客户端(salt minion)

在 Ubuntu 上安装 salt minion:

$ sudo add-apt-repository ppa:saltstack/salt 
$ sudo apt-get update 
$ sudo apt-get install salt-minion 
  • 1.
  • 2.
  • 3.

在 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 
  • 1.
  • 2.
  • 3.

安装完 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 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.

在 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] 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.

执行命令的例子

在主控机器上执行一个命令,让所有受控机器执行 hostname 命令:

# salt '*' cmd.run "hostname" 
minion1.vpsee.com: 
minion1.vpsee.com 
  • 1.
  • 2.
  • 3.

在主控机器上执行一个命令,让所有受控机器上执行内建 test.ping 命令:

# salt '*' test.ping 
minion1.vpsee.com: 
True 
  • 1.
  • 2.
  • 3.

还有一些内建命令可以尝试:

# salt '*' disk.usage 
# salt '*' network.interfaces 
  • 1.
  • 2.

执行状态的例子

开头的时候我们说了 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 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.

比如我们想在所有受控机器上安装 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 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.

强制执行这个状态:

# salt '*' state.sls vim 
  • 1.

再来一个例子,参考 “安装和使用系统监控工具 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 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.

强制执行这个状态:

# 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 
... 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
责任编辑:黄丹 来源: vpsee.com
相关推荐

2010-11-08 09:15:46

Puppet入门教程自动化

2021-11-10 09:00:00

工具Chef开发

2009-04-24 21:13:45

服务器虚拟化Vmware

2024-05-08 11:33:24

自动化工作管理工具

2011-10-09 13:49:51

2022-05-06 12:04:24

Ansible管理工具

2019-10-30 14:47:05

工具代码开发

2025-01-02 08:00:39

2012-02-22 13:36:43

云计算

2010-10-12 09:19:29

Navicat

2012-03-01 10:04:02

虚拟化云计算混合云

2012-02-23 09:39:33

虚拟化桌面虚拟化V-Commander

2009-11-09 16:21:36

RedHathypervisor管理工具

2011-08-12 10:38:09

MongoDB

2010-05-25 08:56:41

ubuntu Grub

2023-03-05 16:23:15

MySQL工具

2009-09-24 14:30:04

DotProject

2011-07-20 10:01:01

虚拟化管理工具

2011-07-18 09:55:40

虚拟化管理工具数据中心

2010-10-11 11:03:01

MySQL管理工具
点赞
收藏

51CTO技术栈公众号