1.安装saltstack
master上安装salt-master:
yum install salt-master -y
minion 上安装 salt-minion:
1 yum install salt-minion -y
2、 配置saltstack
2.1 master端:
1 vi /etc/salt/master
2.2 修改interface监听地址为本机ip:
修改auto_accept 自动接收minion的key:
auto_accept: True
2.3 修改minion文件中的的id为自己的主机名
[root@client1 ~]# vi /etc/salt/minion #修改78行
id: client1
[root@client2 ~]# vi /etc/salt/minion #修改78行
id: client2
也可以修改
[root@94 ~]# cat /etc/salt/minion_id
94.191.91.151
本文件只有启动minion后才会生成
2.4 minion端:修改master的服务器ip:
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: 45.63.88.217
3 启动saltstack
3.1 master端:
/etc/init.d/salt-master restart Stopping salt-master daemon: [ OK ] Starting salt-master daemon: [ OK ]
chkconfig salt-master #开启自启
3.2 minion端:
/etc/init.d/salt-minion restart Stopping salt-minion daemon: [ OK ] Starting salt-minion daemon: [ OK ]
chkconfig salt-master #开机自启
centos 7启动命令:
[root@saltstack ~]# systemctl enable salt-master #加入开机启动
[root@saltstack ~]# systemctl enable salt-minion #加入开机启动
[root@saltstack ~]# systemctl start salt-master #启动服务
[root@saltstack ~]# systemctl start salt-minion #启动服务
4 测试saltstack
在master端执行:
[root@vultr ~]# salt-key -L
Accepted Keys:
iZ25fb5wrepZ #客户端主机名
Denied Keys:
Unaccepted Keys:
Rejected Keys:
cat /etc/salt/minion_id 可以修改客服端主机名
此时可以看到minion的ip已经获取到了,说明安装成功。
如果在/etc/salt/master的配置文件中没有配置自动接收key,可以使用以下命令:
[root@master ~]# salt-key -A The key glob '*' does not match any unaccepted keys.
测试:
salt 命令:
#所有监控用户执行命令: salt '*' cmd.run "df -h " #指定一个用户执行命令: salt '用户名或ip' cmd.run "命令"
cmd是模块,run是cmd模块的方法
cmd命令很好用,但是同时也很危险,因为能直接执行命令意味着就可以删除。后面会说到ACL允许特定的人才能执行
测试
salt "zabbix-agent" test.ping
test.ping,其中test是一个模块,而ping是test模块中的一个方法
这条命令的意思是检测minion是否在干活,这个ping和ICMP的ping不一样,不要搞混了。
salt-key 命令参数:
-l 显示指定状态的key,支持正则表达式 -L,--list-all 显示所有公钥 -a,ACCEPT 接受指定等待认证的key,支持正则 -A,--accept-all 接受所有等待认证的key -r REJECT 拒绝等待认证的key,支持正则 -R REJECT-all 拒绝所有等待认证的key --include-all 显示所有状态的key,包括non-pending状态 -p PRINT 打印指定的公钥,-P打印所有的公钥 -d DELETE 删除指定的key -D --delete-all 删除所有的key -f FINGER 显示指定key的指纹信息 -F --finger-all 显示所有key的指定信息
salt-cp 命令参数:
salt-cp '*' /var/local/text.txt /tmp/ #拷贝/var/local/text.txt 到所有服务器上的/tmp目录下
Salt 文件服务器:
由于文件服务器是为Salt state system工作的,所以文件服务器也是支持环境的概念的。
Salt文件服务器/etc/salt/master配置文件中的flie_roots选项管理。
Salt文件服务器的默认环境为为base环境,base环境必须定义,因为当环境没有明确指定时,文件下载就是从base环境中去找的。其配置如下:
file_roots: base: - /srv/salt/base - /srv/salt/failover
/srv/salt/base和/srv/salt/failover这些目录是不存在,需要手动创建。这里还需要说明的是下载文件时的搜索顺序。
文件服务器在给minions传输文件时,是有搜索顺序的。这里用上述配置说明:
如果文件URL为:salt://httpd/httpd.conf。那么传输文件时,
首先搜索/srv/salt/base/httpd/httpd.conf,如果找到了,则下载;否则就使用/srv/salt/failover/httpd/httpd.conf
2. 文件服务器多环境配置
多环境配置也是更改master配置达成,如下:
file_roots: base: - /srv/salt/base dev: - /srv/salt/dev - /srv/salt/base prod: - /srv/salt/prod - /srv/salt/base
在这个配置中,处了base环境外。还有dev环境和prod环境。配置文件修改后,需要重启master才能生效。
3. cp模块
cp模块被用于用于Salt state system、salt-cp命令(如上所述)以及可用于Salt文件服务器。
3.1 cp.get_fle
cp.get_file用于minion从master下载一个文件,语法:
文件在base环境下:
salt '*' cp.get_file salt://testfile /root/testfile
该命令表示minion从master端下载文件并拷贝到到/root/testfile文件中。注意:salt://表示的base环境。因此,testfille是位于base环境下——即/srv/salt/base目录中。
文件在base环境的多级目录下:
salt '*' cp.get_file salt://httpd/httpd.conf /root/httpd.conf salt://httpd/httpd.conf 表示 /srv/salt/base/httpd/httpf.conf**
cp模块目标路径必须是一个文件,而不是目录。这点有区别去salt-cp命令。
cp.get_file gzip格式
对于大文件传输,cp.get_file支持gzip压缩格式。因为gzip是CPU密集型的工具,因此cp.get_file开启gzip是适用于高压缩率的情况下,如JSON或者YAML文件。
语法:
salt '*' cp.get_file salt://httpd/httpd.conf /root/httpd.conf gzip=5
gzip后的数字表示压缩比,范围在1-9之间,1表示最小压缩比,9为最大压缩比。换句话说,gzip=1情况下, 消耗的CPU小;gzip=9时,消耗的CPU则更多。
cp.get_file makedirs=True
注意,也就是时候,cp.get_file过程中,如果目录不存在,cp.get_file是不会主动创建目录的,如果要做到这点,可以使用makedirs=True 参数。测试如下:
[root@master httpd]# salt '*' cp.get_file salt://httpd/httpd.conf /root/test/httpd.conf 192.168.1.223: False [root@master httpd]# salt '*' cp.get_file salt://httpd/httpd.conf /root/test/httpd.conf makedirs=True 192.168.1.223: /root/test/httpd.conf
cp.get_dir
顾名思义,cp.get_dir就是下载目录,用法基本同cp.get_file一直。直接举个例子吧
将master端的httpd目录下载到minion端的/root目录下
[root@master ~]# salt '*' cp.get_dir salt://httpd /root 192.168.1.223: - /root/httpd/httpd.conf
cp.push
cp.push 模块允许minion上传文件到master端。注意事项:
cp.push功能默认不开启,需要修改配置文件中的file_recv 环境,默认为False
上传的文件存放在master端的 /var/cache/salt/master/minions/<minion_id>/files/ 目录下
修改master配置文件并重启。
file_recv: True
更改minion_id步骤
1.停止salt-minion 如果不停止会一直给master发消息 2.master上面salt-key 删除老的id salt-key -d minionid 3.mininon上删除/etc/salt/minion_id rm -f /etc/salt/minion_id 4.删除minion端/etc/salt/pki rm -rf /etc/salt/pki 5.minion上配置文件修改id 6.启动minion 7.master重新salt-key加入