死磕salt系列-salt入门
saltstack简介
SaltStack是一种新型的基础设施管理软件,简单易部署,可伸缩的足以管理成千上万的服务器,和足够快的速度控制,与他们交流,以毫秒为单位。SaltStack提供了一个动态基础设施通信总线用于编排,远程执行、配置管理等等。SaltStack项目于2011年启动,年增长速度较快,五年期固定基础设施编制和配置管理的开源项目。SaltStack社区致力于保持slat项目集中、友好、健康、开放。
简单来说它的两大基础功能就是:配置管理、远程命令执行。剩下就是根据你的需求自由组合,实现更复杂的功能和系统管理。
saltstack运行的模式
- local
- master/minion
- salt SSH(可以不依赖客户端)
saltstack三大功能
- 远程执行
- 配置管理
- 云管理(不是特别成熟,不建议生产环境使用)
Salt即可以批量执行命令,也可以单机执行。通常单机执行用于测试:
- 单机(立即)执行。 使用salt-call命令单机执行操作。
- 批量(立即)执行。最常用的操作。使用salt命令,对匹配的minion节点执行操作。
salt 安装
salt解析基于DNS,如果做实验发现执行特别慢,可以尝试配置好域名解析。
vim /etc/hosts
192.168.56.11 linux-node1
192.168.56.12 linux-node2
master 安装
安装epel源
rpm -ivh http://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm
配置saltstack的官方yum源
vim /etc/yum.repo.d/saltstack-repo
####################
# Enable SaltStack's package repository
[saltstack-repo]
name=SaltStack repo for RHEL/CentOS 7
baseurl=https://repo.saltstack.com/yum/rhel7
enabled=1
gpgcheck=0
gpgkey=https://repo.saltstack.com/yum/rhel7/SALTSTACK-GPG-KEY.pub
服务端安装salt-master 软件
yum install salt-master -y
saltstack服务端配置文件
- 配置文件需要顶头写,不能有空格。
mkdir /srv/salt/{base,prod,test,pillar} -p
vim /etc/salt/master
default_include: master.d/*.conf
interface: 10.10.0.159
ipv6: False
timeout: 30
max_open_files: 65535
worker_threads: 5
state_verbose: False
file_roots:
base:
- /srv/salt/base/
prod:
- /srv/salt/prod/
test:
- /srv/salt/test/
pillar_roots:
base:
- /srv/salt/pillar
log_file: /var/log/salt/master
log_level: warning
### salt api 相关参数
rest_cherrypy:
port: 8000
disable_ssl: True
external_auth:
pam:
saltapi:
- .*
- '@runner'
- '@wheel'
修改完配置文件后,启动master服务
systemctl enable salt-master.service
systemctl start salt-master.service
注意:salt的书写一定要注意格式。基础环境(base),生产环境(prod),测试环境(test)分三个目录。通过不同的目录创建不同的内容。
关于salt-master配置文件更多的内容可以参考salt配置文件详解
客户端安装
安装salt-minion 软件
yum install salt-minion -y
配置并启动saltstack客户端。
vim /etc/salt/minion
master: 192.168.56.11
id: linux-node2
重启minion进程
systemctl enable salt-minion.service
systemctl start salt-minion.service
minion 向 master 端注册
master端操作
shell> salt-key -L
Accepted Keys:
linux-node1
Denied Keys:
Unaccepted Keys:
linux-node2
Rejected Keys:
shell> salt-key - A -y ## 同意所有的未注册主机
Accepted Keys:
linux-node1
Denied Keys:
Unaccepted Keys:
linux-node2
Rejected Keys:
master的key存放位置:
shell> cd /etc/salt/pki/master/
shell> tree
+-- master.pem
+-- master.pub
+-- minions
| +-- linux-node1 (minion的公钥)
| +-- linux-node2 (minion的公钥)
+-- minions_autosign
+-- minions_denied
+-- minions_pre
+-- minions_rejected
5 directories, 4 files
[root@linux-node1 master]#
salt-key命令补充
salt-key -L列出所有的key信息。salt-key -d www.etiantian.org删除一个key 。salt-key -A -y同意所有未注册的minion端。salt-key -a www.etiantian.org同意一个机器。
minion端 ID 存放在这个文件中
shell> ls /etc/salt/pki/minion
minion_master.pub minion.pem minion.pub
删除旧的key文件
cd /etc/salt/pki/minion && rm -f *
salt远程执行
命令格式:salt 'Traget' module
- 目标:Traget
- 模块:Module
- 返回:Returners
目标匹配方式
通配符使用:
salt '*' test.ping
salt '*.example.net' test.ping
salt '*.example.*' test.ping
salt 'web?.example.net' test.ping
salt 'web[1-5]' test.ping
salt 'web[1,3]' test.ping
salt 'web-[x-z]' test.ping
正则表达式使用:
salt -E 'web1-(prod|devel)' test.ping
也可以在top.sls中使用正则表示:
base:
'web1-(prod|devel)':
- match: pcre ## 指明匹配方式
- webserver
lists使用:
salt -L 'web1,web2,web3' test.ping
IP地址使用:
[root@centos6 ~]# salt -S '192.168.2.0/24' test.ping
minion.saltstack.com:
True
Grains使用:
salt -G 'os:centos' test.ping
也可以在top.sls中使用Grains表示:
base:
'os:centos':
- match: grain ## 指定匹配方式
- init.env_init
- zabbix-agent-linux.config
- salt.agent
Pillar使用:
salt -I 'master:True' test.ping
salt分组
在使用 SaltStack 对主机进行批量管理的时候,因为不同的服务器组所做的业务功能不同,因此为了更加方便的管理,需要对主机进行分组管理
一. 编辑配置文件
[root@salt-master ~]# vim /etc/salt/master
nodegroups:
group-1: G@os:Ubuntu
二. 分组方式
- G -- 针对 Grains 做单个匹配,例如:G@os:Ubuntu
- E -- 针对 minion 针对正则表达式做匹配,例如:E@web\d+.(dev|qa|prod).loc
- P -- 针对 Grains 做正则表达式匹配,例如:P@os:(RedHat|Fedora|CentOS)
- L -- 针对 minion 做列表匹配,例如:L@minion1.example.com,minion3.domain.com or bl*.domain.com
- I -- 针对 Pillar 做单个匹配,例如:I@pdata:foobar
- S -- 针对子网或是 IP 做匹配,例如:S@192.168.1.0/24 or S@192.168.1.100
- R -- 针对客户端范围做匹配,例如: R@%foo.bar
salt 异步执行方法
[root@xxx ~]# salt --async test01 cmd.run "echo 'test'"
Executed command with job ID: 20150915151813222323
[root@xxx ~]# salt-run jobs.lookup_jid 20150915151813222323
Fabric:
test
还有个-v参数在返回结果的同时,一同返回本次任务的jid,如果超时还是会返回jid的。
[root@test ~]# salt -v test01 test.ping
Executing job with jid 20150917172323566343
-------------------------------------------
test01:
True
如果是调用saltapi来实现异步执行语句和获取jid信息,参数可以这样:
params = {'client':'local_async', 'fun':'test.echo', 'tgt':'test01', 'arg1':'hello'}
params = {'client':'runner', 'fun':'jobs.lookup_jid', 'jid': '20150827163231404925'}
salt-stakck 状态查询
- 查看还在运行的程序:
salt-run jobs.active - 查看以前的操作历史记录来:
salt-run jobs.list_jobs - 查看minion支持的module列表的命令
salt '*' sys.list_modules - 查看CMD模块下的所有function。
salt '*' sys.list_functions cmd - 查看cmd 模块的详细用法。
salt '*' sys.doc cmd
参考
补充一个线上的配置文件
interface: 192.168.56.11
ipv6: False
max_open_files: 65535
worker_threads: 5
timeout: 30
state_verbose: False
file_roots:
base:
- /data/db/salt/base/
prod:
- /data/db/salt/prod/
test:
- /data/db/salt/test/
pillar_roots:
base:
- /data/db/salt/pillar
log_file: /var/log/salt/master
log_level: warning
mysql.host: '192.168.56.13'
mysql.user: 'salt'
mysql.pass: '123456'
mysql.db: 'salt'
mysql.port: 3306
external_auth:
pam:
saltapi:
- .*
- '@runner'
- '@jobs'
rest_cherrypy:
port: 8088
ssl_crt: /etc/pki/tls/certs/localhost.crt
ssl_key: /etc/pki/tls/private/localhost_nopass.key
支持文档
官方帮助文档
官方github
saltstack 中文用户组
Saltstack SLS文件解读
[官方的 salt-states 仓库地址] (https://github.com/saltstack/salt-states)
来自于社区的一些salt states例子:
https://github.com/blast-hardcheese/blast-salt-states
https://github.com/kevingranade/kevingranade-salt-state
https://github.com/uggedal/states
https://github.com/mattmcclean/salt-openstack/tree/master/salt
https://github.com/rentalita/ubuntu-setup/
https://github.com/brutasse/states
https://github.com/bclermont/states
https://github.com/pcrews/salt-data
文档: http://docs.saltstack.com/topics/tutorials/starting_states.html
文档: http://docs.saltstack.com/ref/states/writing.html
文档: http://docs.saltstack.com/ref/states/ordering.html
文档: http://www.ituring.com.cn/article/37783
文档: http://docs.saltstack.com/topics/tutorials/starting_states.html
死磕salt系列-salt入门的更多相关文章
- 死磕nginx系列--nginx入门
nginx 功能介绍 Nginx因为它的稳定性.丰富的模块库.灵活的配置和低系统资源的消耗而闻名.业界一致认为它是Apache2.2+mod_proxy_balancer的轻量级代替者,不仅是因为响应 ...
- 死磕nginx系列--nginx 目录
死磕nginx系列--nginx入门 死磕nginx系列--nginx配置文件 死磕nginx系统-nginx日志配置 死磕nginx系列--nginx服务器做web服务器 死磕nginx系列--使用 ...
- 死磕nginx系列
死磕nginx系列 死磕nginx系列--nginx入门 死磕nginx系列--nginx配置文件 死磕nginx系统--nginx日志配置 死磕nginx系列--nginx服务器做web服务器 死磕 ...
- 死磕salt系列-salt文章目录汇总
死磕salt系列-salt入门 死磕salt系列-salt配置文件 死磕salt系列-salt grains pillar 配置 死磕salt系列-salt 常用modules 死磕salt系列-sa ...
- 一生挚友redo log、binlog《死磕MySQL系列 二》
系列文章 原来一条select语句在MySQL是这样执行的<死磕MySQL系列 一> 一生挚友redo log.binlog<死磕MySQL系列 二> 前言 咔咔闲谈 上期根据 ...
- MySQL强人“锁”难《死磕MySQL系列 三》
系列文章 一.原来一条select语句在MySQL是这样执行的<死磕MySQL系列 一> 二.一生挚友redo log.binlog<死磕MySQL系列 二> 前言 最近数据库 ...
- S 锁与 X 锁的爱恨情仇《死磕MySQL系列 四》
系列文章 一.原来一条select语句在MySQL是这样执行的<死磕MySQL系列 一> 二.一生挚友redo log.binlog<死磕MySQL系列 二> 三.MySQL强 ...
- 如何选择普通索引和唯一索引《死磕MySQL系列 五》
系列文章 一.原来一条select语句在MySQL是这样执行的<死磕MySQL系列 一> 二.一生挚友redo log.binlog<死磕MySQL系列 二> 三.MySQL强 ...
- 五分钟,让你明白MySQL是怎么选择索引《死磕MySQL系列 六》
系列文章 二.一生挚友redo log.binlog<死磕MySQL系列 二> 三.MySQL强人"锁"难<死磕MySQL系列 三> 四.S 锁与 X 锁的 ...
- 字符串可以这样加索引,你知吗?《死磕MySQL系列 七》
系列文章 三.MySQL强人"锁"难<死磕MySQL系列 三> 四.S 锁与 X 锁的爱恨情仇<死磕MySQL系列 四> 五.如何选择普通索引和唯一索引&l ...
随机推荐
- as3中xml文件的加载和读取
---恢复内容开始--- as代码如下: xml如下: 总结: 用URLReuqest对象加载xml的url 创建一个URLLoader对象,将1中的URLRequest指定给他 给URLLoader ...
- <深入理解JavaScript>学习笔记(4)_立即调用的函数表达式
前言 大家学JavaScript的时候,经常遇到自执行匿名函数的代码,今天我们主要就来想想说一下自执行.(小菜理解:的确看到好多,之前都不知道这是自执行匿名函数) 在详细了解这个之前,我们来谈了解一下 ...
- [PHP] 从PHP 5.6.x 移植到 PHP 7.0.x新特性
从PHP 5.6.x 移植到 PHP 7.0.x 新特性: 1.标量类型声明 字符串(string), 整数 (int), 浮点数 (float), 布尔值 (bool),callable,array ...
- [C#]跨模块的可选参数与常量注意事项
假设某个DLL里有这么一个类: // Lib.dll public class Lib { public const string VERSION = "1.0"; public ...
- SpringJunit4 进行单元测试(实例篇--紧接上一章)
前言: 在做WEB项目时,我们写好了一个Dao和Service后,接下来就是要进行单元测试,测试的时候还要等到Spring容器全部加载完毕后才能进行,然后通过拿到ApplicationContext对 ...
- zoj 1037 最短路
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=37 找规律,水题 #include<iostream> #inclu ...
- K:栈相关的算法
本博文总结了常见的应用栈来进行实现的相关算法 ps:点击相关问题的标题,即可进入相关的博文进行查看其算法的思想及其实现,这篇博文更多的是作为目录使用 大数加法:在java中,整数是有最大上限的.所谓大 ...
- ARP原理和欺骗
ARP--在TCP/IP协议栈中,最不安全的协议莫过于ARP了,我们经常听到的网络扫描,内网***,流量欺骗等等,他们基本上都与ARP有关系,甚至可以说,他们的底层都是基于ARP实现的.但是ARP的是 ...
- js中获取css样式的两种方式
1. 对象.style.样式名 弊端就是只能获取行内样式 2.window.getComputedStyle(对象,null); 最好用第二种方式 <!DOCTYPE html> < ...
- Django最佳实践(中文版)
这是一份关于开发和部署 Django Web 框架 的动态文档 (会随时更新). 这些准则不应该被认为是 绝对正确 或 唯一 使用 Django 的方法, 应该说这些最佳实践是我们使用框架多年来积累的 ...