用salt管理成千上万的服务器

摘要

实在是厌倦了对大量服务器日复一日的重复操作。尤其是在虚拟化的时代,系统的每个组件都有很多个相同的节点在运行,更让重复的次数再乘以N。 当我发现Salt的时候,我的眼前一亮:这正是我所需要的东西。

引言:一个”非专职运维人员“的烦恼

加入到某证券公司的IT部门,尽管所在的部门挂了一个“研发部”的名字,但是我发现有大概40%的时间是在做运维工作。

这来自两种情况:

这种情况下只能自己做一个“非专职运维人员”,需要频繁的登录各种服务器,执行一些命令来查看状态或者更改配置(包括配置文件的变更和软件包的安装部署)。很多操作都是不断的重复,日复一日,让人厌烦。

”重复的工作应该交给程序去做“,所以我自己写过一些脚本。为了避免将脚本上传到几十台服务器并且不时进行更改,我使用Fabric来进行服务器的批量操作。

尽管避免了”批量的人工操作“,但我还是在进行”人工的批量操作“。远远没有实现自动管理。将有限的生命解放出来,投入到更有意义的编码工作是一个奔四程序员应有的追求,所以我又睁大红肿的眼睛,迷茫的搜索这个世界。

我发现了Puppet,Chef和CFEngine,但是并不满意。直到我发现了Salt,我的眼前一亮:这正是我所需要的东西。

如果说Salt有什么独特之处打动了我,那就是:

尽管twitter、豆瓣、oracle、等著名网站的运维团队都在使用puppet,但是我相信,他们切换到salt只是一个时间问题。毕竟不是所有的人都喜欢操纵傀儡(puppet),但是谁又能离开盐(salt)呢?

关于Salt和Puppet的对比,可以参考这里,或者看看中文版

Salt快速入门

Salt的体系结构中将节点区分为: master, minion, syndic。

在入门阶段,先不考虑syndic。

安装配置

如果将操作系统区分为:

理论上来说,Salt可以安装在任何*NIX系统上,包括master和minion。除了源代码之外, 还可以通过Salt提供的安装脚本,或者PyPI进行安装。

对于Linux,尤其是企业环境中常用的RHEL,CentOS,Ubuntu,可以通过包管理器非常容易的安装master 和/或 minion。 比如: yum(需要先配置EPEL), apt(需要增加http://debian.madduck.net/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。

安装管理端(master)

 # 安装EPEL,注意选择合适的版本
 rpm -ivh http://mirrors.sohu.com/fedora-epel/6/x86_64/epel-release-6-8.noarch.rpm
 yum update
 
 # 安装master
 yum install salt-master      
 
 # 修改配置
 vim /etc/salt/master
 
 # 最基本的设定服务端监听的IP(比如使用VIP做master的高可用时):
 # interface: 服务端监听IP
 # 其他配置参考[官方文档](http://docs.saltstack.com/ref/configuration/master.html)
 
 # 启动服务(以下命令等效)
 salt-master -d
 /etc/init.d/salt-master start
 service salt-master start

安装被管理端(minion)

# 安装EPEL,注意选择合适的版本
 rpm -ivh http://mirrors.sohu.com/fedora-epel/6/x86_64/epel-release-6-8.noarch.rpm
 yum update
 
 # 安装minion
 yum install salt-minion   
 
 # 修改配置
 vim /etc/salt/minion
 
 # 最基本的设定是指定master地址,以及本机标识符:
 # master: master的主机名或IP地址
 # id: 本机标识符
 # 其他配置参考[官方文档](http://docs.saltstack.com/ref/configuration/minion.html)
 
 
 # 启动服务(以下命令等效)
 salt-minion -d
 /etc/init.d/salt-minion start
 service salt-minion start

接受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 minion1

测试

安装配置好之后,首先要测试一下联通性: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 http://www.google.com/"

注意,默认情况下master和minion之间使用以下端口进行通信:

网络的设置需要保证这些端口可以访问。

Salt的强大功能

上面的例子都是用Salt进行批量操作。但是Salt的功能不仅如此。

认真分析一下我的“非专职运维工作”的内容,发现可以分为以下三个方面:

Salt对上述三个方面提供了完美的支持,事实上,Salt提供的功能比我需要的还要多。下图是Salt的主要功能:

salt functions

具体的功能使用在这篇文章中详细说明。

Salt的网络资源

网站

代码

::...
免责声明:
当前网页内容, 由 大妈 ZoomQuiet 使用工具: ScrapBook :: Firefox Extension 人工从互联网中收集并分享;
内容版权归原作者所有;
本人对内容的有效性/合法性不承担任何强制性责任.
若有不妥, 欢迎评注提醒:

或是邮件反馈可也:
askdama[AT]googlegroups.com


订阅 substack 体验古早写作:


点击注册~> 获得 100$ 体验券: DigitalOcean Referral Badge

关注公众号, 持续获得相关各种嗯哼:
zoomquiet


自怼圈/年度番新

DU22.4
关于 ~ DebugUself with DAMA ;-)
粤ICP备18025058号-1
公安备案号: 44049002000656 ...::