一、介绍

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. tomcat 安装配置部署到nginx+tomcat+https

    目录 1 Tomcat简介 2.下载并安装Tomcat服务 2.2 部署java环境 2.3 安装Tomcat 2.4 Tomcat目录介绍 (关注点 bin conf logs webapps) 2 ...

  2. VM虚拟机ubantu自适应屏幕大小

    1.菜单栏安装VMware-Tool sudo ./wmware-install.pl 2.sudo apt-get install open-vm-tools装完这两个就可以,有些人只安装了第一个, ...

  3. oracle(环境搭建二)

    Configuration oracle database Password file(非必要)        cd $ORACLE_HOME/dbs/ ls 查看是否有init.ora 创建密码文件 ...

  4. django如何语法高亮模块

    首先,django的语法高亮必须配合markdown模块使用. 注意事项: 确保在渲染文本时添加了 markdown.extensions.codehilite 拓展 确保安装了 Pygments. ...

  5. Linux并发与同步专题 (1)原子操作和内存屏障

    关键词:. <Linux并发与同步专题 (1)原子操作和内存屏障> <Linux并发与同步专题 (2)spinlock> <Linux并发与同步专题 (3) 信号量> ...

  6. C# 中使用log4.net的注意事项

    新建Log4Net.config文件,内容为 <?xml version="1.0" encoding="utf-8" ?> <configu ...

  7. LeetCode11:Container With Most Water

    public int MaxArea(int[] height) { ; ; ; while(start<end) { max=Math.Max(max,Math.Min(height[star ...

  8. 01-Jenkins-Master节点安装

    Jenkins安装前需要JDK8,下载最新版本的Jenkins LTS 2.150.防止下载缓慢可以通过清华源进行下载. [root@node1 ~]# wget https://mirrors.tu ...

  9. GC调优在Spark应用中的实践(转载)

    Spark是时下非常热门的大数据计算框架,以其卓越的性能优势.独特的架构.易用的用户接口和丰富的分析计算库,正在工业界获得越来越广泛的应用.与Hadoop.HBase生态圈的众多项目一样,Spark的 ...

  10. eclipse 常用配置

    一.内置tomcat配置 解决eclipse 内置tomcat 与本地tomcat 端口冲突 传送门:http://www.cnblogs.com/tweet/p/7568979.html 二.字体设 ...