saltstack

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] '' [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"
]
}
}

posted @ 2019-12-26 21:00  阿浪阿浪  阅读(234)  评论(0)    收藏  举报