一、介绍

saltstack是基于C/S服务模式,在该架构中,服务器端叫做Master,客户端叫做Minion。传统的C/S模式我们这样理解,客户端发送请求给服务器端,服务器端接受到来自客户端的请求并处理完成后再返回客户端。 在saltstack架构中,不仅有传统的C/S服务模式,而且有消息队列中的发布与订阅(pub/sub)服务模式。目前我们一般用其C/S架构做批量管理。

1、Master:控制中心,salt命令运行和资源状态管理
2、Minion : 需要管理的客户端机器,会主动去连接Mater端,并从Master端得到资源状态
3、信息,同步资源管理信息
4、States:配置管理的指令集
5、Modules:在命令行中和配置文件中使用的指令模块,可以在命令行中运行
6、Grains:minion端的变量,静态的
7、Pillar:minion端的变量,动态的比较私密的变量,可以通过配置文件实现同步minions定义
8、highstate:为minion端下发永久添加状态,从sls配置文件读取.即同步状态配置
9、salt_schedule:会自动保持客户端配置

二、安装

#、在master上安装master端
yum -y install salt-master
#配置salt-master
[root@master ~]# egrep -v "^$|^#" /etc/salt/master
publish_port: #master的管理端口
user: root # salt运行的用户,影响到salt的执行权限
worker_threads: #salt的运行线程,开的线程越多一般处理的速度越快,但一般不要超过CPU的个数
ret_port: # master跟minion的通讯端口,用于文件服务,认证,接受返回结果等
root_dir: / # saltstack 可以控制的文件系统的开始位置
file_roots: # salt state执行时候的根目录
base:
- /etc/salt/file
pillar_roots: # 设置pillar 的根目录
base:
- /etc/salt/pillar
syndic_master_port: # 如果这个master运行的salt-syndic连接到了一个更高层级的master,那么这个参数需要配置成连接到的这个高层级master的监听端口
syndic_pidfile: /var/run/salt-syndic.pid # 指定pid文件位置
syndic_log_file: /var/log/salt_master.log # 日志文件地址
nodegroups:
group_all: '*' # 分组设置 #创建file和pillar目录
[root@master ~]# mkdir /etc/salt/pillar
[root@master ~]# mkdir /etc/salt/file
#启动
systemctl start salt-master.service 、在node上安装salt-minion
yum -y install salt-minion
#配置salt-minion
[root@node ~]# egrep -v "^$|^#" /etc/salt/minion
master: 172.31.17.148
master_port: # master通讯端口
user: root # salt运行的用户权限
id: 172.31.17.149 # minion的识别ID,可以是IP,域名,或是可以通过DNS解析的字符串
output: nested # 执行salt-call时候的输出方式
backup_mode: minion # 备份模式,minion是本地备份,当进行文件管理时的文件备份模式
acceptance_wait_time: # minion等待master接受认证的时间
acceptance_wait_time_max: # 失败重连次数,0表示无限次,非零会不断尝试到设置值后停止尝试
random_reauth_delay: # 重新认证延迟时间,可以避免因为master的key改变导致minion需要重新认证的syn风暴
file_roots: # 文件路径基本位置
base:
- /etc/salt/min/file
pillar_roots: # pillar基本位置
base:
- /etc/salt/min/pillar
log_file: /var/log/salt_minion.log # 日志文件位置 #创建目录
[root@node ~]# mkdir -p /etc/salt/min/file
[root@node ~]# mkdir -p /etc/salt/min/pillar #启动
systemctl start salt-minion.service 、认证
#查看认证信息
[root@master ~]# salt-key
Accepted Keys:
Denied Keys:
Unaccepted Keys:
172.31.17.149
Rejected Keys: #接受172.31.17.149的认证
[root@master ~]# salt-key -y -a 172.31.17.149
The following keys are going to be accepted:
Unaccepted Keys:
172.31.17.149
Key for minion 172.31.17.149 accepted. #查看
[root@master ~]# salt-key
Accepted Keys:
172.31.17.149
Denied Keys:
Unaccepted Keys:
Rejected Keys: #删除认证的客户端
[root@master ~]# salt-key -y -d 172.31.17.149
Deleting the following keys:
Accepted Keys:
172.31.17.149
Key for minion 172.31.17.149 deleted.
#查看
[root@master ~]# salt-key
Accepted Keys:
Denied Keys:
Unaccepted Keys:
Rejected Keys: 、测试salt-minion是否连接
#如果返回true则成功,如果无结果,则说明连接为失败,可以检查防火墙是否开放了4506,4505端口,或是重启salt-minion再试试,有时候master跟minion版本不同的问题,也会导致连接失败
[root@master ~]# salt '*' test.ping
172.31.17.149:
True
172.31.17.148:
True

三、salt常用命令

#salt常用命令
salt '*' test.ping #测试salt-minion是否连接
salt-run manage.status ##查看所有minion状态(up或者down)
salt-run manage.down ##查看所有没在线minion
salt-run manged.up ##查看所有在线minion
#认证
salt-key 参数
-a 接受指定minion
-A 接受所有minion
-r 拒绝指定minion
-R 拒绝所有minion
-d 删除指定minion
-D 删除所有minion
-y 默认yes #salt-cp 分发文件到minion上,不支持目录分发,通常在master运行
例如:将master上/etc/hosts文件复制到所有节点的/tmp下
[root@master file]# salt-cp '*' /etc/hosts /tmp/
{'192.168.1.144': {'/tmp/hosts': True}, '192.168.1.145': {'/tmp/hosts': True}}
##复制过去并改名改成lala的文件名
[root@master file]# salt-cp '*' /etc/hosts /tmp/lala
{'192.168.1.144': {'/tmp/lala': True}, '192.168.1.145': {'/tmp/lala': True}}

四、slatstack  选择器

1、通配符选择

1、选择所有
salt '*' test.ping
2、选择某一台
salt '10.0.0.141' test.ping
3、选择以10开头的所有
salt "10*" test.ping
5、选择以141结尾的所有
salt "*141" test.ping
6、其它通过通配符选择
salt "10.0.[0|1|2]*" test.ping

2、列表匹配方式

#选择多台
salt -L "10.0.0.141,10.0.0.140" test.ping

3、正则表达式

#匹配以10、20、30开头的
salt -E '(1|2|3)0*' test.ping

4、IP匹配方式

#匹配ip为10.0.0.0/24以内的
salt -S '10.0.0.0/24' test.ping
#单个ip匹配
salt -S '10.0.0.141' test.ping

5、分组匹配方式

#在master配置文件中添加组
nodegroups:
web: '10.0.0.141,10.0.0.144'
test: '10*'
ip: 'S@10.0.0.0/24'
aaa: 'E@(1|2|3)0*'
#重启salt-master
systemctl restart salt-master.service #使用
salt -N ip test.ping

五、常用模块详解与使用

1、cmd 执行远程命令模块

1、cmd.run   #最常用的(批量执行shell命令)
#例如:
[root@master ~]# salt '*' cmd.run "ip a|awk NR==3|egrep -o [0-9\.]+ "
172.31.0.182:
127.0.0.1
8
2、retcode #在minion端执行一个shell命令并返回命令的返回码。0表示成功,0以外表示失败有问题(不能执行复杂一点的操作)
例如:
[root@master ~]# salt '*' cmd.retcode "ip a"
172.31.0.182:
0
[root@master ~]# salt '*' cmd.retcode "ip a|awk NR==3|egrep -o [0-9\.]+"
172.31.0.182:
1
ERROR: Minions returned with non-zero exit code 3、script (master上file_roots的目录) #从远程服务器下载脚本到并本地执行 #环境
[root@master ~]# chmod +x /etc/salt/file/test.sh
[root@master ~]# cat /etc/salt/file/test.sh
#!/bin/bash
date +%Y-%m-%d:%T >/tmp/test.txt 例如:
[root@master file]# salt '*' cmd.script salt://test.sh
192.168.1.144:
----------
pid:
8337
retcode:
0
stderr:
stdout:
192.168.1.145:
----------
pid:
3671
retcode:
0
stderr:
stdout:
[root@master file]# ll /tmp/test.txt
-rw-r--r-- 1 root root 20 Jan 17 15:05 /tmp/test.txt
[root@master file]# cat /tmp/test.txt
2019-01-17:15:05:02 4、 cmd.which(查看命令的位置)
测试:
[root@master ~]# salt '*' cmd.which 'cat'
172.31.0.182:
/usr/bin/cat
[root@master ~]# salt '*' cmd.which 'catd'
172.31.0.182:
None

2、cp 复制模块

#cp 模块是小型文件服务器操作的主页。 cp 模块由 Salt 状态系统 salt-cp 使用,可用于分发 Salt 文件服务器提供的文件。
1、get_file (master上file_roots的目录) #可以从一个URL地址下载文件,URL可以是msater上的路径(salt://),也可以是http网址
例如:
[root@master file]# seq 10 > /etc/salt/file/test.txt
[root@master file]# ll /etc/salt/file/test.txt
-rw-r--r-- 1 root root 21 Jan 17 15:00 /etc/salt/file/test.txt
[root@master file]# salt '*' cp.get_file salt://test.txt /tmp/test.txt
192.168.1.144:
/tmp/test.txt
192.168.1.145:
/tmp/test.txt
#查看
[root@master file]# ll /tmp/test.txt
-rw-r--r-- 1 root root 21 Jan 17 15:02 /tmp/test.txt 2、get_dir #复制目录(空目录不会被复制)
例如:
#创建目录与文件
[root@master aaa]# mkdir /etc/salt/file/aaa/{a,b,c} -p
[root@master aaa]# seq 100 >/etc/salt/file/aaa/b/a.txt
[root@master aaa]# salt '*' cp.get_dir salt://aaa /mnt/
192.168.1.144:
- /mnt//aaa/b/a.txt
192.168.1.145:
- /mnt//aaa/b/a.txt
#查看
[root@node ~]# ll /mnt/aaa/
total 4
drwxr-xr-x 2 root root 4096 Jan 17 15:33 b 3、get_url #用于从URL获取单个文件
例子:把baidu的index下载下来并放入/mnt目录下改成baidu.index的文件
[root@master aaa]# salt '*' cp.get_url https://www.baidu.com/ /mnt/baidu.index
192.168.1.144:
/mnt/baidu.index
192.168.1.145:
/mnt/baidu.index 4、cp.list_master和cp.list_master_dirs(查看salt master本地的file服务器有哪些文件或者目录)
例子:
[root@master aaa]# salt '192.168.1.145' cp.list_master
192.168.1.145:
- aaa/b/a.txt
- test.sh
- test.txt
[root@master aaa]# salt '192.168.1.145' cp.list_master_dirs
192.168.1.145:
- .
- aaa
- aaa/a
- aaa/b
- aaa/c
- b

3、cron 定时任务模块

1、cron.raw_cron #查看定时任务列表
例如:
[root@master file]# salt '*' cron.raw_cron root
192.168.1.144:
* * * * * date >/tmp/date.log
192.168.1.145:
* * * * * date >/tmp/date.log
cron.set_job #添加定时任务
例如:
[root@master file]# salt '*' cron.set_job root '*' '*' '*' '*' '*' 'cat /etc/hosts >/tmp/hosts.log' cat_hosts_cron
192.168.1.144:
new
192.168.1.145:
new
#查看
[root@node ~]# crontab -l
# cat_hosts_cron
* * * * * cat /etc/hosts >/tmp/hosts.log 2、cron.rm_job #删除定时任务
例如:删除刚才添加的定时任务
[root@master file]# salt '*' cron.rm_job root cat_hosts_cron
192.168.1.144:
absent
192.168.1.145:
absent

4、service 服务模块

1、available #查看某个服务是否存在
例子:
[root@master aaa]# salt '*' service.available sshd
192.168.1.144:
True
192.168.1.145:
True
2、disable #禁止某个服务开机自启
例子:
[root@master aaa]# salt '*' service.disable sshd
192.168.1.144:
True
192.168.1.145:
True
3、enable #设置某个服务开机自启
[root@master aaa]# salt '*' service.enable sshd
192.168.1.144:
True
192.168.1.145:
True
4、get_all #查看所有服务项
例子:
[root@master aaa]# salt '*' service.get_all |head
192.168.1.144:
- -.mount
- CmsGoAgent
- NetworkManager
- NetworkManager-dispatcher
- NetworkManager-wait-online
- README
- aegis
- agentwatch
- aliyun 5、get_enabled #查看所有开机启动的服务
例子:
[root@master aaa]# salt '*' service.get_enabled |head
192.168.1.144:
- CmsGoAgent
- atd
- auditd
- autovt@
- chronyd
- cloud-config
- cloud-final
- cloud-init
- cloud-init-local
6、start #启动某服务
7、stop #关闭某服务
8、restart #重启某服务
9、reload #重载某服务
10、status #查看某服务状态

5、Grains 资产管理模块

1、ls 列出所有可打印的状态模块
例如:
[root@localhostmnt]#salt '*' grains.ls|head -3
192.168.1.144:
- SSDs
- biosreleasedate
2、items 打印所有的状态信息 例如:
[root@localhostmnt]#salt '*' grains.items|head -5
10.0.0.141:
----------
SSDs:
biosreleasedate:
07/02/2015 3、item 打印单个的状态信息
例如:
[root@localhostmnt]#salt '*' grains.item ip4_gw
10.0.0.141:
----------
ip4_gw:
10.0.0.254

6、pkg 安装模块

1、install 安装
2、remove 卸载
3、latest_version 安装最新版本
例子:
[root@localhostmnt]#salt '*' pkg.install 'iperf'
10.0.0.141:
----------
iperf:
----------
new:
2.0.12-4.el7
old: [root@localhostmnt]#salt '*' pkg.remove 'iperf'
10.0.0.141:
----------
iperf:
----------
new:
old:
2.0.12-4.el7

7、file 文件操作模块

1、stats 查看文件状态信息(类似stat命令)
例:salt '*' file.stats /etc/passwd
2、touch 创建文件
例:salt '*' file.touch /mnt/aaaa
3、symlink 创建软连接
例:
[root@localhostmnt]#salt '*' file.symlink /etc/hosts /mnt/link_hosts
10.0.0.141:
True
[root@localhostmnt]#ls -l /mnt/link_hosts
lrwxrwxrwx 1 root root 10 1月 18 09:34 /mnt/link_hosts -> /etc/host
4、rename 改名
例:salt '*' file.rename /mnt/aaaa /mnt/aaaab
5、chown 修改所有者(如同linux的chown命令)
例:
[root@localhostmnt]ll /mnt/aaaab
-rw-r--r-- 1 root root 0 1月 18 09:33 /mnt/aaaab
[root@localhostmnt]#salt '*' file.chown /mnt/aaaab www www
10.0.0.141:
None
[root@localhostmnt]ll /mnt/aaaabw
-rw-r--r-- 1 www www 0 1月 18 09:33 /mnt/aaaab

Saltstack 安装与常用模块的更多相关文章

  1. ANSIBLE安装和常用模块模块使用详细教程

    目录 ANSIBLE安装和各种模块应用功能 安装配置ANSIBLE ANSIBLE使用 ansible-galaxy工具 ansible-pull工具 ansible-playbook ansible ...

  2. Ansible安装及常用模块

    配置文件:/etc/ansible/ansible.cfg 主机列表:/etc/ansible/hosts  安装anslibe  wget -O /etc/yum.repos.d/epel.repo ...

  3. 一次性安装python常用模块

    链接:https://pan.baidu.com/s/1fuIxRUnkJJfzgrbQ8kIgvw 提取码:d1r6 电脑必须是win64才可以安装 Anaconda3安装完成后,不需要自己添加环境 ...

  4. Nginx 最新版源码编译安装 包含常用模块作用及所需依赖

    第一部分 Nginx最新版源码编译安装 1. 使用的模块 模块1:http_rewrite_module 基于正则匹配来实现重定向.依赖PCRE库,见依赖1 模块2:http_gzip_module ...

  5. 【SaltStack】一些常用模块举例

    一.用户和用户组模块 说明:该sls文件用来在Minion端创建nginx用户和nginx用户组,当创建nginx用户时,对nginx用户组是否已存在做判断! (1)  /srv/salt/creat ...

  6. Saltstack常用模块及API

    Saltstack提供了非常丰富的功能模块,涉及操作系统的基础功能.常用工具支持等,更多模块信息可以查看官网模块介绍.也可以通过sys模块列出当前版本支持的模块. salt '*' sys.list_ ...

  7. Saltstack系列3:Saltstack常用模块及API

    说明 salt '*' sys.list_modules #列出当前版本支持的模块 API原理是通过调用master client模块,实例化一个LocalClient对象,再调用cmd()方法来实现 ...

  8. Ansible安装部署以及常用模块详解

    一.  Ansible 介绍Ansible是一个配置管理系统configuration management system, python 语言是运维人员必须会的语言, ansible 是一个基于py ...

  9. SaltStack系列(二)之常用模块

    一.saltstack的内置模块汇总 acl,    aliases,    alternatives,    apache,    archive,    artifactory,    block ...

随机推荐

  1. SSM框架整合(IntelliJ IDEA + maven + Spring + SpringMVC + MyBatis)

    本篇文章主要内容是介绍如何使用IntelliJ IDEA创建Spring + SpringMVC + MyBatis项目,下面会给出项目搭建的详细步骤以及相关的配置文件. 1. 创建maven项目   ...

  2. sql 查询所有子节点示例

    每天学习一点点 编程PDF电子书.视频教程免费下载:http://www.shitanlife.com/code <!-- 查询机构的所有子机构 --> <select id=&qu ...

  3. 路飞学城-Python开发集训-第2章

    学习心得: 这章对编码的讲解超级赞,现在对于编码终于有一点认知了,但还没有大彻大悟,还需要更加细心的琢磨一下Alex博客和视频,以前真的是被编码折磨死了,因为编码的问题而浪费的时间很多很多,现在终于感 ...

  4. CONTRO4 系列

    软件下载 https://getcomposer.org/download/ 0技术手册 https://wenku.baidu.com/view/4b511ead376baf1ffd4fad36.h ...

  5. day26 Python __getattribute__

    __getattr__#不存在的属性访问,触发__getattr__ class Foo: def __init__(self,x): self.x=x def __getattr__(self, i ...

  6. 5238-整数校验器-洛谷3月赛gg祭

    传送门 题目描述 有些时候需要解决这样一类问题:判断一个数 x是否合法. x合法当且仅当其满足如下条件: x格式合法,一个格式合法的整数要么是 0,要么由一个可加可不加的负号,一个 1到 9 之间的数 ...

  7. Java 执行远程主机shell命令代码

    pom文件: <dependency> <groupId>org.jvnet.hudson</groupId> <artifactId>ganymed- ...

  8. Ubuntu脚本修改IP信息

    #!/bin/bash cd /etc/network #清除4-9行 sed -i '4,9d' interfaces #在第3行添加网卡名称 sed -i "3a auto ${1}&q ...

  9. Eclipse MAT内存分析工具(Memory Analyzer Tool)

    MAT内存分析工具 MAT是Memory Analyzer的简称,它是一款功能强大的Java堆内存分析器.可以用于查找内存泄露以及查看内存消耗情况.MAT是基于Eclipse开发的,是一款免费的性能分 ...

  10. 写了个限制文本框输入最大长度的jquery插件 - jquery.restrictFieldLength.js

    做了个限制文本框最大输入长度的jquery插件,效果图(共2个文本框,限制最多10个字符): 功能:当超出设置的最大字符长度后,会截断字符串.更改当前元素的css(会在1秒后还原css).支持长度超出 ...