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] '<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"
		]
	}
}
posted @ 2019-12-26 21:00  阿浪阿浪  阅读(204)  评论(0编辑  收藏  举报