SaltStack--快速入门
saltstack快速入门
saltstack介绍
Salt,一种全新的基础设施管理方式,部署轻松,在几分钟内可运行起来,扩展性好,很容易管理上万台服务器,速度够快,服务器之间秒级通讯
主要功能
远程执行
配置管理
Stalstack官方文档
Saltstack原理
Salt
使用server-agent
通信模型,服务端组件被称为Salt master
,agent
被称为Salt minion
Salt master
主要负责向Salt minions
发送命令,然后聚合并显示这些命令的结果。一个Salt master
可以管理多个minion
系统Salt server
与Salt minion
通信的连接由Salt minion
发起,这也意味着Salt minion
上不需要打开任何传入端口(从而减少攻击)。Salt server
使用端口4505
和4506
,必须打开端口才能接收到访问连接
- Publisher (端口4505)所有
Salt minions
都需要建立一个持续连接到他们收听消息的发布者端口。命令是通过此端口异步发送给所有连接,这使命令可以在大量系统上同时执行。
- Request Server (端口4506)
Salt minios
根据需要连接到请求服务器,将结果发送给Salt master
,并安全地获取请求的文件或特定minion
相关的数据值(称为Salt pillar
)。连接到这个端口的连接在Salt master
和Salt minion
之间是1:1(不是异步)。
[root@salt-master ~]# lsof -i:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
salt-mast root 16u IPv4 0t0 TCP *: (LISTEN)
salt-mast root 18u IPv4 0t0 TCP salt-master:->salt-minion03: (ESTABLISHED)
salt-mast root 19u IPv4 0t0 TCP salt-master:->salt-minion01: (ESTABLISHED)
salt-mast root 20u IPv4 0t0 TCP salt-master:->salt-minion02: (ESTABLISHED)
快速安装
1.1 配置 yum 仓库
# 使用官方自带yum
[root@salt-master ~]# yum install https://repo.saltstack.com/yum/redhat/salt-repo-latest.el7.noarch.rpm
# 或者使用阿里云的yum(建议使用阿里云的,速度快一点)
[root@salt-master ~]# yum -y install https://mirrors.aliyun.com/saltstack/yum/redhat/salt-repo-latest-2.el7.noarch.rpm
[root@salt-master ~]# sed -i "s/repo.saltstack.com/mirrors.aliyun.com\/saltstack/g" /etc/yum.repos.d/salt-latest.repo
[root@salt-master ~]# yum clean all
[root@salt-master ~]# yum makecache
1.2 安装Master,并启动服务
[root@salt-master ~]# yum -y install salt-master
[root@salt-master ~]# systemctl enable salt-master
[root@salt-master ~]# systemctl start salt-master
1.3 安装 Salt-Minion 指向 Salt-Master 网络地址
[root@salt-minion01 ~]# yum -y install salt-minion
# 可以使用主机名,也可以使用IP地址
[root@salt-minion01 ~]# cp /etc/salt/minion{,.back}
[root@salt-minion01 ~]# sed -i '/#master: /c\master: salt-master' /etc/salt/minion
[root@salt-minion01 ~]# systemctl enable salt-minion
[root@salt-minion01 ~]# systemctl start salt-minion
SaltStack认证方式
Salt
的数据传输是通过 AES
加密,Master
和 Minion
之前在通信之前,需要进行认证。Salt
通过认证的方式保证安全性,完成一次认证后,Master 就可以控制 Minion 来完成各项工作了。
1. minion
在第一次启动时候,会在 /etc/salt/pki/minion/
下自动生成 minion.pem(private key)
和 minion.pub(public key)
, 然后将 minion.pub
发送给 master
2. master
在第一次启动时,会在 /etc/salt/pki/master/
下自动生成 master.pem
和 master.pub
;并且会接收到 minion
的 public key
, 通过 salt-key
命令接收 minion public key
, 会在 master
的 /etc/salt/pki/master/minions
目录下存放以 minion id
命令的 public key
;验证成功后同时 minion
会保存一份 master public key
在 minion 的 /etc/salt/pki/minion/minion_master.pub
里。
Salt认证原理总结
minion将自己的公钥发送给master
master认证后再将自己的公钥也发送给minion端
Master端认证示例
1)根据上面提到的认证原理,先看下未认证前的master
和minion
的pki
目录
# master上查看
[root@salt-master ~]# tree /etc/salt/pki/
/etc/salt/pki/
├── master
│ ├── master.pem
│ ├── master.pub
│ ├── minions
│ ├── minions_autosign
│ ├── minions_denied
│ ├── minions_pre
│ │ └── salt-minion01
│ └── minions_rejected
└── minion # minion上查看
[root@salt-minion01 ~]# tree /etc/salt/pki/
/etc/salt/pki/
├── master
└── minion
├── minion.pem
└── minion.pub
2)salt-key
命令解释:
[root@salt-master ~]# salt-key -L
Accepted Keys: #已经接受的key
Denied Keys: #拒绝的key
Unaccepted Keys: #未加入的key
Rejected Keys: #吊销的key #常用参数
-L #查看KEY状态
-A #允许所有
-D #删除所有
-a #认证指定的key
-d #删除指定的key
-r #注销掉指定key(该状态为未被认证) #配置master自动接受请求认证(master上配置 /etc/salt/master)
auto_accept: True
3)salt-key
认证
#列出当前所有的key
[root@salt-master ~]# salt-key -L
Accepted Keys:
Denied Keys:
Unaccepted Keys:
salt-minion01
Rejected Keys: #添加指定minion的key
[root@salt-master ~]# salt-key -a salt-minion01 -y
The following keys are going to be accepted:
Unaccepted Keys:
salt-minion01
Key for minion salt-minion01 accepted.
#添加所有minion的key
[root@salt-master ~]# salt-key -A -y [root@salt-master ~]# salt-key -L
Accepted Keys:
salt-minion01
Denied Keys:
Unaccepted Keys:
Rejected Keys:
4)上面认证完成后再次查看master
和minion
的pki
目录
# master上
[root@salt-master ~]# tree /etc/salt/pki/
/etc/salt/pki/
├── master
│ ├── master.pem
│ ├── master.pub
│ ├── minions
│ │ └── salt-minion01
│ ├── minions_autosign
│ ├── minions_denied
│ ├── minions_pre
│ └── minions_rejected
└── minion # minion上
[root@salt-minion01 ~]# tree /etc/salt/pki/
/etc/salt/pki/
├── master
└── minion
├── minion_master.pub
├── minion.pem
└── minion.pub
Saltstack远程执行
远程执行是 Saltstack
的核心功能之一。主要使用 salt
模块批量给选定的 minion
端执行相应的命令,并获得返回结果。
1、判断 salt
的 minion
主机是否存活
[root@salt-master ~]# salt '*' test.ping
salt-minion02:
True
salt-minion03:
True
salt-minion01:
True # salt saltstack自带的一个命令
# * 表示目标主机,这里表示所有目标主机
# test.ping test是saltstack中的一个模块,ping则是这个模块下面的一个方法
2、saltstack
使用 cmd.run
模块远程执行shell命令
#在指定目标minion节点运行uptime命令
[root@salt-master ~]# salt 'salt-minion02' cmd.run 'uptime'
salt-minion02:
:: up min, users, load average: 0.00, 0.04, 0.13
Saltstack配置管理
Salt
通过State
模块来进行文件的管理;通过YAML
语法来描述,后缀是.sls
的文件
1、了解 YAML
参考:http://docs.saltstack.cn/topics/yaml/index.html
remove vim:
pkg.removed:
- name: vim
- 带有ID和每个函数调用的行都以冒号(:)结束。
- 每个函数调用在ID下面缩进两个空格。
- 参数作为列表传递给每个函数。
- 每行包含函数参数的行都以两个空格缩进开头,然后是连字符,然后是一个额外的空格。
- 如果参数采用单个值,则名称和值位于由冒号和空格分隔的同一行中。
- 如果一个参数需要一个列表,则列表从下一行开始,并缩进两个空格
2、配置sals
,定义环境 参考文档
# 定义环境目录
[root@salt-master ~]# vim /etc/salt/master
file_roots:
base:
- /srv/salt/base
dev:
- /srv/salt/dev
prod:
- /srv/salt/prod
# 创建上面定义的目录
[root@salt-master ~]# mkdir -p /srv/salt/{base,dev,prod}
# 重启服务
[root@salt-master ~]# systemctl restart salt-master
3、编写第一个sls
文件
# 在base环境下编写第一个安装apache的sls文件
[root@salt-master ~]# cd /srv/salt/base/
[root@salt-master base]# cat apache.sls
apache-install:
pkg.installed:
- name: httpd apache-service:
service.running:
- name: httpd
- enable: True # 在dev环境下编写一个安装ftp的sls文件
[root@salt-master base]# cd /srv/salt/dev/
[root@salt-master dev]# cat vsftpd.sls
vsftpd-install:
pkg.installed:
- name: vsftpd vsftpd-service:
service.running:
- name: vsftpd
- enable: True
4、使用salt
命令的state
状态模块让minion
应用配置
# 让所有的minion都安装apache(由于salt默认的环境就是base,所以可以直接在后面指定调用的apache.sls文件,不要后缀sls)
[root@salt-master ~]# salt '*' state.sls apache # 让所有的minion都安装vsftpd(saltenv指定环境)
[root@salt-master ~]# salt '*' state.sls vsftpd saltenv=dev
5、使用salt
的高级状态使不同主机应用不同的配置
# topfile入口文件只能放在base环境
[root@salt-master ~]# cat /srv/salt/base/top.sls
base:
'salt-minion01':
- apache
'salt-minion03':
- apache
dev:
'salt-minion02':
- vsftpd
'salt-minion03':
- vsftpd
6、使用salt
命令执行高级状态,会将top.sls
当做入口文件,进行调用
# 将高级状态应用到所有主机
[root@salt-master ~]# salt '*' state.highstate
Saltstack常用配置
1、Salt Master配置Salt Master
端的配置文件/etc/salt/master
,常用配置如下:
interface: //指定bind 的地址(默认为0.0.0.0)
publish_port: //指定发布端口(默认为4505)
ret_port: //指定结果返回端口, 与minion配置文件中的master_port对应(默认为4506)
user: //指定master进程的运行用户,如果调整, 则需要调整部分目录的权限(默认为root)
timeout: //指定timeout时间, 如果minion规模庞大或网络状况不好,建议增大该值(默认5s)
keep_jobs: //minion执行结果返回master, master会缓存到本地的cachedir目录,该参数指定缓存多长时间,可查看之间执行结果会占用磁盘空间(默认为24h)
job_cache: //master是否缓存执行结果,如果规模庞大(超过5000台),建议使用其他方式来存储jobs,关闭本选项(默认为True)
file_recv : //是否允许minion传送文件到master 上(默认是Flase)
file_roots: //指定file server目录, 默认为:
file_roots:
base:
- /srv/salt
pillar_roots : //指定pillar 目录, 默认为:
pillar_roots:
base:
- /srv/pillar
log_level: //日志级别
支持的日志级别有'garbage', 'trace', 'debug', info', 'warning', 'error', ‘critical ’ ( 默认为’warning’)
2、Salt Minion
端的配置文件/etc/salt/minion
,常用配置如下:
master: //指定master 主机(默认为salt)
master_port: //指定认证和执行结果发送到master的哪个端口, 与master配置文件中的ret_port对应(默认为4506)
id: //指定本minion的标识, salt内部使用id作为标识(默认为主机名)
user: //指定运行minion的用户.由于安装包,启动服务等操作需要特权用户, 推荐使用root( 默认为root)
cache_jobs : //minion是否缓存执行结果(默认为False)
backup_mode: //在文件操作(file.managed 或file.recurse) 时, 如果文件发送变更,指定备份目录.当前有效
providers : //指定模块对应的providers, 如在RHEL系列中, pkg对应的providers 是yumpkg5
renderer: //指定配置管理系统中的渲染器(默认值为:yaml_jinja )
file_client : //指定file clinet 默认去哪里(remote 或local) 寻找文件(默认值为remote)
loglevel: //指定日志级别(默认为warning)
tcp_keepalive : //minion 是否与master 保持keepalive 检查, zeromq3(默认为True)
SaltStack--快速入门的更多相关文章
- saltstack快速入门
SALTSTACK是什么? Salt是一种和以往不同的基础设施管理方法,它是建立在大规模系统高速通讯能力可以大幅提升的想法上.这种方法使得Salt成为一个强大的能够解决基础设施中许多特定问题的多任务系 ...
- SaltStack快速入门-配置管理
1:定义远程配置时描述位置,salt配置用的是一种yaml的描述语法,saltstack也是可以分环境的,比如测试环境.生产环境,默认是base,base也是必须存在的,修改内容如下: file_ro ...
- linux运维、架构之路-SaltStack快速入门
一.SaltStack介绍 SaltStack是一个服务器基础架构集中化管理平台,SaltStack基于Python语言实现,也是基于C/S架构,结合轻量级消息队列(ZeroMQ)与Py ...
- saltstack自动化运维快速入门
saltstack自动化运维快速入门 关于saltstack 这个软件是干啥的 我这里就不介绍了 只是简单的说下是干啥的 网上的说法是 它是func的强化版本+ puppet的精简版 关于puppet ...
- Web Api 入门实战 (快速入门+工具使用+不依赖IIS)
平台之大势何人能挡? 带着你的Net飞奔吧!:http://www.cnblogs.com/dunitian/p/4822808.html 屁话我也就不多说了,什么简介的也省了,直接简单概括+demo ...
- SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=》提升)
SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=>提升,5个Demo贯彻全篇,感兴趣的玩才是真的学) 官方demo:http://www.asp.net/si ...
- 前端开发小白必学技能—非关系数据库又像关系数据库的MongoDB快速入门命令(2)
今天给大家道个歉,没有及时更新MongoDB快速入门的下篇,最近有点小忙,在此向博友们致歉.下面我将简单地说一下mongdb的一些基本命令以及我们日常开发过程中的一些问题.mongodb可以为我们提供 ...
- 【第三篇】ASP.NET MVC快速入门之安全策略(MVC5+EF6)
目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...
- 【番外篇】ASP.NET MVC快速入门之免费jQuery控件库(MVC5+EF6)
目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...
- Mybatis框架 的快速入门
MyBatis 简介 什么是 MyBatis? MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架.MyBatis 消除 了几乎所有的 JDBC 代码和参数的手工设置以及结果 ...
随机推荐
- 安装kafka + zookeeper集群
系统:centos 7.4 要求:jdk :1.8.x kafka_2.11-1.1.0 1.绑定/etc/hosts 10.10.10.xxx online-ops-xxx-0110.10 ...
- Java正则表达式入门基础篇
正则表达式是一种可以用于模式匹配和替换的规范,一个正则表达式就是由普通的字符(例如字符a到z)以及特殊字符(元字符)组成的文字模式,它 用以描述在查找文字主体时待匹配的一个或多个字符串.正则表达式作为 ...
- Scala词法文法解析器 (一)解析SparkSQL的BNF文法
平台公式及翻译后的SparkSQL 平台公式的样子如下所示: if (XX1_m001[D003]="邢おb7肮α䵵薇" || XX1_m001[H003]<"2& ...
- Mysql变量、存储过程、函数、流程控制
一.系统变量 系统变量: 全局变量 会话变量 自定义变量: 用户变量 局部变量 说明:变量由系统定义,不是用户定义,属于服务器层面 注意:全局变量需要添加global关键字,会话变量需要添加sessi ...
- python文件打包发布(引用的包也可以加进来),打包出错解决了,运行出错解决了
一开始,我以为,打包本来就很容易,可是没有..... 没想到打包还能遇到坑 T.T 打包步骤: 1.安装 pyinstaller (cmd) pip install pyinstaller 2.进入目 ...
- Lab_1:练习4——分析bootloader加载ELF格式的OS的过程
一.实验内容 通过阅读bootmain.c,了解bootloader如何加载ELF文件.通过分析源代码和通过qemu来运行并调试bootloader&OS, bootloader如何读取硬盘扇 ...
- es6和es5函数参数和arguments的差别
注: 这里说的 es5 代表的都是非严格模式下. es6之前函数的参数不能传默认值: function fn(a, b){ console.log(a) console.log(b) } fn(2) ...
- Zookeeper的介绍与基本部署
目录 简介 架构 安装 StandAlone模式 1. 安装 2. 修改配置 3. 启动 4. 验证 5. 基本用法 Distributed模式 1. 配置hosts 2. 配置zoo.cfg 3. ...
- Remote System Explorer Operation总是运行后台服务,卡死eclipse解决办法
当你右键编辑控件的id或者其他属性时都会卡很久,发现原来是eclipse后台进程在远程操作,就是右下角显示的“Remote System Explorer Operation”.折腾了半天,在Stac ...
- 总结:WPF中MultiBinding多值绑定的方法
原文:总结:WPF中MultiBinding多值绑定的方法 一.Xaml中绑定代码: <TextBlock Grid.Row="5" Grid.Column="3 ...