Salt
Salt是一个配置管理系统,能够根据定义的状态,配置远程节点,比如保证远程节点上指定的安装包安装,运行指定的服务。Salt也是一个分布式远程执行系统,用于在远程节点上执行命令和请求数据,不论是单个或者是任意的选择标准。
Salt是为了提供一个基于远程执行脚本,提供更好、更快和更加可扩展的解决方案二开发的,通过一个简单的可管理的借口,能够覆盖大量的信息,能快速的覆盖到大量的服务器上。
简单
在大规模部署环境和小规模环境中,提供了很多功能,salt搭建和维护都很简单,不用考虑项目大小。Salt的架构,可以应对与任意数量的服务器,从本地网络或者跨数据中心,salt的架构是一个简单的CS架构,将所需要的功能,编译经一个单独的守护进程集合中,使用默认的配置文件,就可以使用,不需要修改,salt也可以根据特殊的需求进行相关配置。
并行执行
Salt的核心功能是:
- 并行的在远程节点上执行命令,而不是串行
- 使用安全、加密的协议
- 使用更小的网络负载
- 提供一个简单的管理接口
Salt在远程执行命令上提供了更加精细化的控制,不仅可以通过主机名来访问目标主机,也可以通过系统属性来访问目标主机。
Salt使用了大量的技术,网络层使用了ZeroMQ网络库,所以salt守护进程提供了一个透明的可用的AMQ终端,对于master守护进程,salt使用公钥认证,对于传输数据,使用更快的AES加密算法,认证和加密,都已经集成在salt中。Salt使用了msgpack,保证更快和更轻量级的网络传输。
基于python的客户端接口
为了简单的扩展,salt的执行规则,可以使用python模块来编写,通过salt执行器收集的数据,会被返回给master 服务器,或者返回给任意的程序,salt可以被简单的python API调用,或者是通过命令行调用,所以salt可以是一个单独使用的命令,或者集成在一个大应用中使用。
快速、灵活、可扩展
使用salt的结果,就是一个系统能快速的在目标主机组上执行命令,salt能快速简单的部署,然后提供一个远程执行架构,可以管理任意数量的服务器。Salt基础架构将远程执行的优势结合在一起,扩大了功能,使得salt能够适应任何的网络。
开源
Salt是在Apache 2.0下开发的,可以应用于任何的开源或闭源的环境中。
Salt的安装
如果是第一次安装,需要在一个单独的管理服务器上,安装salt master,然后在每一个想管理的系统上,安装一个salt agent(minion)。不用担心现在的架构,如果需要增加组件和修改配置,不需要重新安装。
通用安装过程如下:
- 使用salt bootstrap脚本,安装salt master,一定要使用-M选项来安装;
- 保证所有agent机器,都能反问master
- 在这些机器上安装agent
- 在使用salt连接的时候,接受认证
这些操作完成后,可以执行一个简单的命令,然后会收到所有的返回值,命令格式如下:salt '*' test.ping
修改本地DNS
修改/etc/resolve.conf文件,设置dns,为192.168.64.2,网关也为该地址,然后修改/etc/nsswitch.conf文件,hosts后面增加dns,使得能够dns解析。
route add -net 0.0.0.0 gw 192.168.64.2
下载国内站点163的repo,然后复制到/etc/yum.repo.d/目录下,执行yun clean all和yum upgrade命令。
必须要使用epel.repo安装仓库,下载地址为https://mirrors.tuna.tsinghua.edu.cn/epel/6/x86_64/,安装仓库的命令为:
rpm -Uvh ~/epel-release-6-8.noarch.rpm
主要是要这个仓库
[epel]
name=Extra Packages for Enterprise Linux 6 - $basearch
#baseurl=http://download.fedoraproject.org/pub/epel/6/$basearch
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-6&arch=$basearch
failovermethod=priority
enabled=1
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
安装完成后,需要yum clean all 和yum upgrade all
开始安装salt,在master上要安装的组件如下:
yum install salt-master salt-minion salt-ssh salt-syndic salt-cloud
安装完成后,可以直接使用salt help命令了。
在需要被远程执行命令的主机上,安装salt-minion即可。
初始化配置
Salt的配置非常简单,在大多数的安装过程中,master默认的配置可以直接适用,只需要在minion也就是agent上,配置文件中指定master的位置即可。
配置文件存放在/etc/salt目录下,其中master文件是master的配置文件,minion文件是minion的配置文件。
默认情况下,master在所有的借口地址上,监听4505和4506两个端口,在配置文件中体现为0.0.0.0,如果需要修改默认的监听地址和端口,需要修改master文件,其中地址为,interface:*.*.*.*,如果修改了配置文件,需要重启salt master服务才能生效。
正常情况下,minion上的配置也是可以直接使用的,因为salt minion会去查找以salt开头的主机,如果解析正确,则不需要做任何配置。如果解析不到,则需要在配置文件中指定,具体为master:*.*.*.*。如果修改了,也是需要重启服务的。
重启服务可以使用/etc/init.d/salt-master和salt-minion命令。
Key认证
在初始key交换之前,salt提供了一个命令,用于在master和minion上激活key。激活key认证能够避免连接到错误的master上,并防止在初始连接时,潜在的MiTM攻击。
在master主机上,使用命令,打印master的finger print指纹:salt-key -F master.
然后在local keys上拷贝master.pub,在minion的master_finger上设置该值。保存minion的配置,然后重启minion服务。
然后通过salt-call –local key.finger来查看minion的key finger,将这个值和master上salt-key –finger 来进行对比,是否一致。
在minion 上查看,很慢。
在master和minion之间的通信,采用了AES加密方式,这保证了从master发送给minion的命令,不会被篡改,master和minion直接的通信,是基于受信任的密钥的认证方式。
在发送命令到minion之前,需要在master上受信任minion的key,在master上通过salt-key -L来显示当前master已知的key信息。
使用命令salt-key -A ,使得master会信任所有的key,也可以使用-a name来信人某一个节点的key。
受信任之后,可以查看当前master信任的key。
做完这一步之后,就可以通过master给minion发送命令了。比如test.ping命令。
出现这个,表示master现在是可以控制minion了。