轻松使用SaltStack管理成千上万台服务器(入门教程)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录树引言:一个”非专职运维人员“的烦恼
Salt快速入门
1. 安装配置
2. 安装管理端(master)
3. 安装被管理端(minion)
4. 接受minion的托管请求
5. 测试
Salt的强大功能
1. 批量操作(targeting)
2. 节点分组(nodegroups)
3. 命令执行(execution)
4. 节点信息(grains)
5. 配置管理(state)
6. 小结
Salt state实例解析
1. 目录结构
2. apache/init.sls
3. ssh/init.sls
4. ssh/server.sls
5. ssh/custom-server.sls
引言:一个”非专职运维人员“的烦恼加入到某证券公司的IT部门,尽管所在的部门挂了一个“研发部”的名字,但是我发现有大概40%的时间是在做运维工作。
这来自两种情况:
1. 自主开发的应用,需要持续的改进,不断的更新、发布、部署、调整配置,这不是运维部门喜欢的状态。
2. 软件商提供的“产品”无法满足运维部门的要求:无法通过简单的 Q&A 文档保证系统的正常运行,经常需要有一定技术能力的人员解决系统运行过程中各种稀奇古怪的问题。
这种情况下只能自己做一个“非专职运维人员”,需要频繁的登录各种服务器,执行一些命令来查看状态或者更改配置(包括配置文件的变更和软件包的安装部署)。很多操作都是不断的重复,日复一日,让人厌烦。
”重复的工作应该交给程序去做“,所以我自己写过一些脚本。为了避免将脚本上传到几十台服务器并且不时进行更改,我使用Fabric来进行服务器的批量操作。
尽管避免了”批量的人工操作“,但我还是在进行”人工的批量操作“。远远没有实现自动管理。将有限的生命解放出来,投入到更有意义的编码工作是一个奔四程序员应有的追求,所以我又睁大红肿的眼睛,迷茫的搜索这个世界。
我发现了Puppet,Chef和CFEngine,但是并不满意。直到我发现了Salt,我的眼前一亮:这正是我所需要的东西。
如果说Salt有什么独特之处打动了我,那就是:
简单:可能是源于python的简约精神,Salt的安装配置和使用简单到了令人发
指的地步。任何稍有经验的linux使用者可以在10分钟之内搭建一个测试环境并跑通一个例子(相比之下,puppet可能需要30--60分钟)。
高性能:Salt使用大名鼎鼎的ZeroMQ作为通讯协议,性能极高。可以在数秒钟之内完成数据的传递
可伸缩:基于ZeroMQ通信,具备很强的扩展性;可以进行分级管理,能够管理分布在广域网的上万台服务器。
尽管twitter、豆瓣、oracle、等著名网站的运维团队都在使用puppet,但是我相信,他们切换到salt只是一个时间问题。毕竟不是所有的人都喜欢操纵傀儡(puppet),但是谁又能离开盐(salt)呢?
关于Salt和Puppet的对比,可以参考这里,或者看看中文版。
Salt快速入门Salt的体系结构中将节点区分为: master, minion, syndic。
1. master: 老大,管理端
2. minion: 马仔,被管理端
3. syndic: 头目,对于老大来说是马仔,对于马仔来说是老大
在入门阶段,先不考虑syndic。
1. 安装配置如果将操作系统区分为:
*NIX
Linux
Solaris
HP Unix
FreeBSD
OS X
windows
理论上来说,Salt可以安装在任何*NIX系统上,包括master和minion。除了源代码之外,还可以通过Salt提供的安装脚本,或者PyPI进行安装。
对于Linux,尤其是企业环境中常用的RHEL,CentOS,Ubuntu,可以通过包管理器非常容易的安装master 和/或 minion。比如: yum(需要先配置EPEL), apt(需要增加/repo/库),yaourt,ports。
Mac OS X 先使用HomeBrew解决依赖包:brew install swig zmq,然后用PyPI 安装:pip install salt。
对于windows,只能安装minion(windows只适合做马仔)。从官方网站下载合适
的安装包。安装过程中可以指定master地址和本机名称。安装后需要自己启动Salt服务。配置文件在C:\salt\conf\minion。
具体的各操作系统下的安装可以参考官方文档。这里为了简单,只考虑常用的
RHEL/CentOS 和 windows。在下面的例子中,使用一台RHEL/CentOS作为master,另外一台RHEL/CentOS和一台windows 2003 Server作为 minion。
2. 安装管理端(master)# 安装EPEL,注意选择合适的版本rpm -ivh
/fedora-e ... ease-6-8.noarch.rpm yum update # 安装
master yum install salt-master # 修改配置 vim /etc/salt/master # 最基本的设定服务端监听的IP(比如使用VIP做master的高可用时): # interface: 服务端监听IP # 其他配置参考[官方文
档](/ref/configuration/master.html) # 启动服务(以下命令等效) salt-master -d /etc/init.d/salt-master start service salt-master start3. 安装被管理端(minion)# 安装EPEL,注意选择合适的版本rpm -ivh /fedora-e ... ease-6-8.noarch.rpm yum update #
安装minion yum install salt-minion # 修改配置 vim /etc/salt/minion # 最基本的设定是指定master地址,以及本机标识符: # master: master的主机名或IP地址# id: 本机标识符# 其他配置参考[官方文
档](/ref/configuration/minion.html) # 启动服务(以下命令等效) salt-minion -d /etc/init.d/salt-minion start service salt-minion start4. 接受minion的托管请求minion向master投诚后,还需要master接受才行。这个过程叫做“授信”。
Salt底层使用公钥-私钥证书来保证通信信道的安全。具体的机制可以参考ZeroMQ的相关内容。Salt已经屏蔽了底层的细节,只需要使用封装好的命令:
# 在master上运行 # 查看所有minion salt-key -L Accepted Keys: windows bond_app_server_main mac_os_vm salt-master Unaccepted Keys: minion1 minion2 Rejected Keys: #其中Unaccepted Keys是未许可的minion。可以使
用下面的命令通过认证: salt-key -a minion15. 测试安装配置好之后,首先要
测试一下联通性:salt '*' test.ping。salt会列出每个认证过的minion的联通状态(true 或 false)。
再举一些例子:
# 查询主机运行了多长时间 sudo salt '*' cmd.run "uptime" # 批量重启服务 salt '*' cmd.run "service httpd restart" # 让多台机器一起,使用Apache Bench进行压力测试salt '*' cmd.run "ab -n 10 -c 2
/"注意,默认情况下master和minion之间使用以下端口
进行通信:
1. 4505(publish_port): salt的消息发布系统
2. 4506(ret_port):salt客户端与服务端通信的端口