saltstack 服务器批量管理
1.环境准备
# 两台服务器
192.168.16.134 master
192.168.16.133 minion
修改2台机器的主机名,用于主机名通信,加速salt的命令执行
hostnamectl set-hostname master
# 执行 su 命令
hostnamectl set-hostname minion
# 执行 su 命令
关闭2台机器的iptables防火墙策略,防止端口拒绝
#清空防火墙规则
iptables -F
#关闭防火强服务
systemctl stop firewalld
#禁止防火墙开机自启
systemctl disable firewalld
分别安装2个软件,还是配置好阿里的yum源
# 192.168.16.134 master
yum install salt-master -y
# 192.168.16.133 minion
yum install salt-minion -y
2.配置文件
1. /etc/hosts
2. /etc/salt/master
3. /etc/salt/minion
master常用配置解析
# salt运行的用户,影响到salt的执行权限
user: root
#s alt的运行线程,开的线程越多一般处理的速度越快,但一般不要超过CPU的个数
worker_threads: 10
# master的管理端口
publish_port : 4505
# master跟minion的通讯端口,用于文件服务,认证,接受返回结果等
ret_port : 4506
# 如果这个master运行的salt-syndic连接到了一个更高层级的master,那么这个参数需要配置成连接到的这个高层级master的监听端口
syndic_master_port : 4506
# 指定pid文件位置
pidfile: /var/run/salt-master.pid
#示例
[root@master ~]# grep -v ^# /etc/salt/master|grep -v ^$
interface: 0.0.0.0 #绑定到本地的0.0.0.0地址
publish_port: 4505 #管理端口,命令发送
user: root #运行salt进程的用户
worker_threads: 5 #salt运行线程数,线程越多处理速度越快,不要超过cpu个数
ret_port: 4506 #执行结果返回端口
pidfile: /var/run/salt-master.pid #pid文件位置
log_file: /var/log/salt/master #日志文件地址
auto_accept: False #自动接收minion的key
auto_accept: True #如果对Minion信任,可以配置master自动接受请求
minion常用配置解析
# minion的识别ID,可以是IP,域名,或是可以通过DNS解析的字符串
id: minion1
# salt运行的用户权限
user: root
# master的识别ID,可以是IP,域名,或是可以通过DNS解析的字符串
master : master
# master通信端口
master_port: 4506
# 备份模式,minion是本地备份,当进行文件管理时的文件备份模式
backup_mode: minion
# 执行salt-call时候的输出方式
output: nested
# minion等待master接受认证的时间
acceptance_wait_time: 10
# 失败重连次数,0表示无限次,非零会不断尝试到设置值后停止尝试
acceptance_wait_time_max: 0
# 重新认证延迟时间,可以避免因为master的key改变导致minion需要重新认证的syn风暴
random_reauth_delay: 60
# 日志文件位置
log_file: /var/logs/salt_minion.log
# 示例
[root@minion ~]# grep -v ^# /etc/salt/minion|grep -v ^$
master: master
master_port: 4506
user: root
id: minion1
acceptance_wait_time: 10
log_file: /var/log/salt/minion
配置/etc/hosts文件,用于主机名通信
# 全部需要hosts文件
192.168.16.133 minion
192.168.16.134 master
修改salt的master和minion的配置文件
在master机器上修改 /etc/salt/master文件改为如下
[root@master ~]# grep -vE "^$|#" /etc/salt/master
interface: 0.0.0.0
publish_port: 4505
user: root
worker_threads: 5
ret_port: 4506
修改minion的配置如下
[root@minion yum.repos.d]# grep -vE "^$|#" /etc/salt/minion
master: master
master_port: 4506
user: root
id: minion1
3.启动salt-master和salt-minion
[root@master ~]# systemctl start salt-master
[root@minion ~]# systemctl start salt-minion
# 重启服务
systemctl restart salt-master
systemctl restart salt-minion
#检查salt状态
systemctl status salt-minion
systemctl status salt-master
4.查看密钥
在master上输入salt-key -L ,查看是否读取到了minion的信息
[root@master ~]# salt-key L
Accepted Keys:
Denied Keys:
Unaccepted Keys:
minion1
Rejected Keys:
分别检查2台机器的密钥信息,是否一致
在master机器上输入 salt-key -f minion1
[root@master ~]# salt-key -f minion1
Unaccepted Keys:
minion1: eb:b8:a1:c3:6a:29:6b:45:8a:50:16:26:2d:e9:f4:7c
在minion机器上输入 salt-call --local key.finger
[root@minion ~]# salt-call --local key.finger
local:
eb:b8:a1:c3:6a:29:6b:45:8a:50:16:26:2d:e9:f4:7c
接收minion1的密钥,管理秘钥
[root@master ~]# salt-key -a minion1
The following keys are going to be accepted:
Unaccepted Keys:
minion1
Proceed? [n/Y] y
Key for minion minion1 accepted.
[root@master ~]# salt-key L
Accepted Keys:
minion1
Denied Keys:
Unaccepted Keys:
Rejected Keys:
对于密钥管理的命令如下
# 只有Master接受了Minion Key后,才能进行管理
salt-key 参数如下
-L #查看KEY状态
-A #允许所有
-D #删除所有
-a #认证指定的key
-d #删除指定的key
-r #注销掉指定key(该状态为未被认证)
salt-key -d 密钥名 #删除密钥
5. rmp命令
#master端
[root@master ~]$rpm -ql salt-master
/etc/salt/master # salt master主配置文件
/usr/bin/salt #salt master 核心操作命令
/usr/bin/salt-cp #salt 文件传输命令
/usr/bin/salt-key #salt证书管理
/usr/bin/salt-master #salt master 服务命令
/usr/bin/salt-run #salt master runner命令
#slave端
[root@minion ~]$rpm -ql salt-minion
/etc/salt/minion #minion配置文件
/usr/bin/salt-call #拉取命令
/usr/bin/salt-minion #minion服务命令
/usr/lib/systemd/system/salt-minion.service #minion启动脚本
6.salt:核心管理命令
# salt --help #即可查看salt帮助
[root@master ~]$salt --help
Usage: salt [options] '<target>' <function> [arguments]
salt命令 参数 目标 salt模块的函数 远程执行的参数
# 使用salt的第一个命令,测试服务器是否存活
salt '*' test.ping #发送命令接口,ping一下被管理的机器,是否存货,返回true活着,负责挂掉了,或者salt-minion服务器宕机了
"*" 目标匹配
test.ping 是test模块下的一个功能函数
test模块
[root@master ~]# salt '*' sys.list_functions test
minion1:
- test.arg
- test.arg_repr
- test.arg_type
- test.assertion
- test.attr_call
- test.collatz
- test.conf_test
- test.cross_test
- test.echo
- test.exception
- test.fib
- test.get_opts
- test.kwarg
- test.module_report
- test.not_loaded
- test.opts_pkg
- test.outputter
- test.ping
- test.provider
- test.providers
- test.rand_sleep
- test.rand_str
- test.retcode
- test.sleep
- test.stack
- test.try_
- test.tty
- test.version
- test.versions_information
- test.versions_report
cmd.run命令
# 远程安装nginx,以及启动nginx
salt '*' cmd.run "systemctl status nginx"
salt 'minion1' cmd.run "yum install nginx -y"
salt '*' cmd.run "systemctl status nginx"
salt '*' cmd.run "netstat -tunlp|grep 80"
salt '*' cmd.run "yum install net-tools -y"
salt '*' cmd.run "netstat -tunlp|grep 80"
salt '*' cmd.run "netstat -tunlp|grep 80"
salt '*' cmd.run "systemctl stop nginx"
pkg命令
#salt提供的软件安装模块,其实页是在远程调用yum命令而已
[root@master ~]$salt '*' pkg.install "nginx"
#卸载minion上的nginx
[root@master ~]$salt '*' pkg.remove "nginx"
#检查pkg包的版本
[root@master ~]$salt '*' pkg.version "nginx"
service命令
# salt提供的服务信息模块其实调用的是 systemctl 命令
[root@master ~]# salt '*' service.start "redis"
minion1:
True
[root@master ~]# salt '*' service.status "redis"
minion1:
True
7.yaml
# 输出json格式的数据,以及yaml格式的数据
[root@master ~]# salt '*' service.status "redis" --out=json
{
"minion1": false
}
[root@master ~]# salt '*' service.start "redis" --out=json
{
"minion1": true
}
# 在线yaml网站http://www.bejson.com/validators/yaml_editor/
# 输出yaml格式的数据
[root@master ~]# salt --out=yaml '*' cmd.run_all 'hostname'
minion1:
pid: 3649
retcode: 0
stderr: ''
stdout: minion
8.salt采集服务器静态信息之grains模块,其实就是用python写的一个超大的字典
[root@master ~]# salt '*' grains.item fqdn_ip4 --out=json
{
"minion1": {
"fqdn_ip4": [
"192.168.16.133"
]
}
}