概念:
1>基于 C/S 架构的服务器基础架构集中化管理平台,通过管理端下发指令,客户端接受指令的方式进行操作,管理端称为 Master,客户端称为 Minion。
2>具备配置管理、远程执行、监控等功能
3>基于 Python 语言开发实现,结合了轻量级的消息队列软件 ZeroMQ【master和slave通过秘钥建立安全连接,通过zeromq消息队列软件建立消息发布连接】
4>服务占用端口 4505、4506 , 4505位master和minion认证通信端口,4506为master发送命令、minion执行命令返回信息
工作流程:
1.Master 与 Minion 之间通过 ZeroMq 进行消息传递,使用了 ZeroMq 的发布订阅模式,连接方式包括 TCP 和 IPC。
2.Salt 命令,将 cmd.run ls 命令从 salt.client.LocalClient.cmd_cli 发布到 master,获取一个 jodid,根据 jobid 获取命令执行结果。
3.master 接收到命令后,将要执行的命令发送给客户端 minion。
4.minion 从消息总线上接收到要处理的命令,交给 minion._handle_aes 处理。
5.minion._handle_aes 发起一个本地线程调用 cmdmod 执行 ls 命令。线程执行完 ls 后,调用 Minion._return_pub 方法,将执行结果通过消息总线返回给 master。
6.master 接收到客户端返回的结果,调用 master.handle_aes 方法将结果写的文件中。
7.salt.client.LocalClient.cmd_cli 通过轮询获取 Job 执行结果,将结果输出到终端。
转自博文:https://blog.csdn.net/SS_CC_Go/article/details/99635873
使用:
目的:通过sls文件,实现文件的传输、文件内容的修改、容器以及其他应用的搭建、java应用的发布
主机规划:
(主)master:192.168.25.130
(从)minion:192.168.25.131 192.168.25.132
1.yum安装:
服务端:安装master
[root@hdoop1 ~]# yum -y install epel-release #安装第三方epel的yum源,有许多的跟新包
[root@hdoop1 ~]# yum -y install salt-master salt-minion #安装saltstack的master跟minion
客户端:安装minion
[root@hdoop2 ~]# yum -y install salt-minion
[root@hdoop3 ~]# yum -y install salt-minion
2.配置:主从都需要配置
三台服务器分别: vim /etc/salt/minion 【指定master】
master: 192.168.18.86 #16行内容,去注释,指定主机的IP 建议用IP 避免日后有业务需求将主机名修改后相互通信出现问题
3.启动:
主:
[root@hdoop1~]# systemctl start salt-master
从:2台机器
[root@hadoop2~]# systemctl start salt-minion
[root@hadoop3~]# systemctl start salt-minion
salt-key的基本命令:
salt-key -L #检测当前server端所有minion端key的情况,三种:接收、等待接收和拒绝
salt-key -a hostname #指定接收某台minion的key
salt-key -A #接收Unaccepted Keys下所有的minion
salt-key -d hostname #删除已经接收的机器中指定机器minion key (Accepted Keys:)
salt-key -D #删除已经接收的所有机器(Accepted Keys:),删除后想重新连接minion,需重启一下对应机器的minion
接收后查看状态:
[root@hdoop1 erp]# salt-key
Accepted Keys:
hdoop2
hdoop3
Denied Keys:
Unaccepted Keys:
Rejected Keys:
通过sls文件自定义需求,安装服务或者采集信息: 【eg:sls文件是通过saltstate模块调用函数执行的,以yaml语言描述,层级之间要用2个空格隔开】
sls文件高级方法,通过编写一个top.sls文件,指定minion去执行sls文件
[root@hdoop1 pki]# vim /etc/salt/master
搜索file_roots base、dev、prod是你所能指定的执行环境,对应的目录是你sls文件放置目录
修改你想指定的目录跟环境(ps:base是必须有的),重启salt-master服务
到/srv/salt 目录下创建一个apache.sls文件,内容如下: 【ps:$符号是在编辑文本后显示所有字符,避免有多余空格导致格式不对运行不成功 :set list 命令显示】
apache-install:$
pkg.installed:$ #pkg是一个内置模块,installd是一个方法,方法调用会根据你服务器系统来决定。eg: linux 会用yum ubuntu 会用 apt-get
- names:$
- httpd$
- httpd-devel$
$
apache-service:$ #这个名字是自己定义的,便于自己识别要用到什么功能
service.running:$ #service 内置模块,running模块下的方法
- name: httpd$ #注意:启动服务必须是可以通过systemctl启动的服务,如果是二进制包安装的话,需要换一种方式启动
- enabled: True$ #enabled参数表示开机自启
- reload: True$ #reload参数表示可以重载
远程执行:
包含三大模块 目标 、 模块 、 返回 (返回可以输出到数据库)
salt '*' cmd.run 'w' # *:指定的主机,*表示minion的标识id,也可以使用通配符去匹配 cmd.run 模块+方法 w:linux命令行命令
salt -E 'node(1|2)' test.ping # -E 正则表达式,表示或
top.sls中用:
base:
'hdoop(1|2)':
- match: pcre
##########数据系统#############
grains:只存在minion中,minion启动时收集的系统信息,当minion所在服务器增配、或者减配,需要重启minion 否则收集到的信息还是老数据
应用场景:minion端指定roles(指定后需重启minion),通过 grains + sls的高级形式 指定不同的roles去匹配对应的minion,minion分别执行不同的sls文件
pillar: 主要用于 定义变量、参数
二者差别:
出于对数据、服务安全性的问题,salt内部继承了一个控制权限模块,指定某些用户只可以执行某些命令,在master上开启: 【配置文件修改后要重启】
client_acl:
xiaohong: #这个是指定的用户
- test.ping #授权命令
- nework.* #也可以通过通配符给与模块下的多个权限
chmod 755 /var/cache/salt /var/cache/salt/master /var/cache/salt/master/jobs /var/run/salt /var/run/salt/master ##【没有授权755会报错没有权限执行acl授予的命令】