初识 SaltStack
什么是 SaltStack
SaltStack 是继 Puppet、Chef 之后新出现的配置管理及远程执行工具。SaltStack 是基于 Python 开发的一套 C/S 架构配置关机工具,底层使用 ZeroMQ 消息队列 pub/sub 方式通信,使用 SSL 证书剪发的方式进行认证管理。与 Puppet 相比,SaltStack 没有那么笨重,较为轻量,不想 Puppet 有一套自己的 DSL 用来编写配置。SaltStack 使用 YAML 作为配置文件格式,这样写起来既简单有容易,同时也便于动态生成;此外 SaltStack 在远程执行命令时的速度也非常快,并包含丰富的模块,SaltStack 很好的包含了状态管理的优点,大大提好运维人员的工作效率。简单总结有两大用处:
- 配置管理系统,能够维护预定义状态的远程节点(比如,确保指定的软件包被安装和特定的服务在运行)
- 一个分布式远程执行系统,用来在远程节点上执行命令和查询数据,可以单个节点,也可以是选定规则
SaltStack 特点
简单:
兼顾大规模部署和小规模系统环境,Salt 非常简单配置和维护,不管是本地网络系统,还是跨数据中心。salt 采用 C/S 架构,需要的功能内建到一组 daemon 中,只需要简单的配置就可以工作,也可以调整来满足自己特定需求。
并行执行:
- 通过并行方式让远程节点执行命令
- 采用安全的加密协议
- 最小、最快使用网络和负责
- 提供简单的编程接口
- 提供更细粒度的控制,使系统不止按照主机名,还允许按照系统属性来分类
成熟技术之上构建:
- 网络层采用优秀的 ZeroM Q库,salt的守护进程包含可行和透明的AMQ代理
- 使用公钥和 Master 端通信,使用更快的AES加密协议,集成认证和加密在Salt中
- 使用 msgpack 通讯,所以更快速和更轻量网络交换
Python 客户端接口:
- 允许简单的拓展,Salt 程序可以写成 Python 模块,Client 收集数据发送回 Master 或者其他程序
- 可以从简单的 Python API 调用或者从命令行调用,因此可以执行一次命令或者大型应用程序的一部分
快速、灵活、可扩展:
- 高速在一台或者一组服务器执行命令
- 速度快、配置简单、扩展性好,提供远程执行架构,可以管理任意数量的多样化需求的服务器
- 集成最好的远程执行工具,增强处理能力、拓展使用范围,可以使用多样化复杂的网络
开源:
Salt 是在 Apache 2.0 Licence 下开发,可以用在开源或者私有项目
支持的系统
常见的发行版都已被支持:
- Arch Linux
- Debian
- Fedora
- FreeBSD
- Gentoo
- OS X
- RHEL / CentOS / Scientific Linux / Amazon Linux / Oracle Linux(EPEL5、EPEL6、EPEL7)
- Sloaris
- Ubuntu
- Windows
- SUSE
安装 SaltStack
SaltStack 软件依赖
由于 SaltStack 是基于 Python 开发,对 Python 版本和 python 模块有一定要求。
- Python:版本大于2.6、小于3.0
- msgpack-python :高性能消息交换格式
- YAML:SaltStack 配置解析定义语法
- Jinja2:SaltStac k配置模版
- MarkupSafe:Python unicode 转换库
- apache-libcloud:SaltStack 对云架构编排库
- Requests:HTTP Python 库
- ZeroMQ:SaltStack 消息系统
- pyzmq:ZeroMQ Python 库
- PyCrypto:Python 密码库
- M2Crypto:Openssl Python 包装库
安装 SaltStack
SaltStack提供了四种安装方式(yum、pip、源码、salt-bootstrap),部署环境为 CentOS Linux release 7.1.1503 (Core)
- Master(172.16.11.210)
|
|
- Minion(172.16.11.211)12345rpm -ivh http://mirrors.yun-idc.com/epel/7/x86_64/e/epel-release-7-5.noarch.rpmyum install salt-minion -ysed -i 's/#master: salt/master: 172.16.11.210/g' /etc/salt/minion // 这里为 Master 的 ip 地址echo "172.16.11.211" > /etc/salt/minion_id // 在 Master 认证是显示的 minion idsystemctl start salt-minion
SaltStack 证书管理
Salt 在 master 和 minion 通信使用AES加密,保证发给 minion 的指令安全,Master和minion之间认证采用信任接受的 Key,在发送命令到 minion 之前,minon 的 key 需要先被 master 所接受,运行 salt-key 可以列出当前 key 状态。
|
|
更多的证书管理通过salt-key -h
查看。
配置SaltStack
Master端
master端的配置文件是/etc/salt/master
,其中的配置选项较多,在日常使用中,需要经常修改Master的配置文件。SaltStack的大部分配置都可以保持默认,只需根据自己的实际需求更改配置即可。其中下面几个在平时使用过程中,会经常能改。
- max_open_files : 根据Master将Minin数量进行适当的调整
- timeout : 可以根据Master 和Minion的网络状况调整
- auto_accept和autosign_file: 在大规模部署Minion的时候可以设置为自动签证
- master_tops和所有以external开头的参数: 这些参数是SaltStack与外部系统进行整合的相关配置参数
详细配置信息可以参考:http://arlen.blog.51cto.com/7175583/1423997
Minion
master端的配置文件是/etc/salt/minion
,大部分情况保持默认即可
详细配置信息可以参考:http://arlen.blog.51cto.com/7175583/1424008
SaltStack常用命令操作
Master端
- salt // salt master核心操作命令
|
|
- salt-cp // 文件传输命令 ,不支持目录分发
|
|
- salt-key // 证书管理
|
|
- salt-master // 服务命令
|
|
- salt-run // 执行 runner
|
|
- salt-unity
Minion端
- salt-call // 拉取命令
|
|
- salt-minion // 服务命令
|
|
SaltStack常用模块
Saltstack通过模块来实现管理,具备丰富的模块功能,命令形式也较为自由。
- sys.doc:类似Linux的man命令,可以显示minion支持的模块的详细操作说明
|
|
- status :status模块是系统状态的常用信息模块,可以利用status模块查看系统信息
|
|
- test: 更多使用方法使用访问官方网站或者
salt '*' sys.doc test
|
|
- state:是salt state的管理模块,可以通过state模块简单的对minin操作sls状态
|
|
- saltutil : SaltStack的一些辅助操作命令模块
|
|