SaltStack简介

SaltStack
  • saltstack是一个新的基础平台管理工具,只需要花费数分钟即可运行起来,可以支撑管理上万台服务器的规模,数秒钟即可完成数据传递。
  • saltstack是使用Python语言开发的,同时也支持restAPI方便二次开发以及和它平台集成,同时官方也发布了一个Web管理界面halite。
  • Salt是python编写的,支持用户通过python自定义功能模块,也提供了大量的python API接口,用户可以根据需要进行简单快速的扩展。
优点
  • 首先,他速度快,基于消息队列+线程,跑完多台设备,都是毫秒级别的
  • 其次,非常灵活,源码是python,方便理解和自定义模块(python 语言相对于其他的perl、ruby等还是很好理解的)
  • 命令简单,功能强大
saltstack运行方式
  • Local
  • Master/Minion
  • Salt SSH

saltstack三大功能
  • 远程执行
  • 配置管理
  • 云管理
saltstack数据系统
  • Grains (静态数据)
  • pillar (动态数据)
saltstack配置管理
  • SLS(YAML、Jinja)
  • Highstate
  • States Module

部署配置SaltStack

准备两台机器,这两台机器都关闭 selinux,清空防火墙规则。

List
    CentOS7.3
epel-7.repo
salt-master
salt-minion
# 依赖包
python
zeromq
pyzmp
pycrypto
msgpack-python
yaml
jinja2
节点名 IP 软件版本 硬件 网络 说明
Master 192.168.43.132 list 里面都有 2C4G Nat,内网 测试环境
192.168.43.234 list 里面都有 2C4G Nat,内网 测试环境
安装saltstack

salt软件包需要epel源的支持,那么下载

EPEL的全称叫 Extra Packages for Enterprise Linux 。EPEL是由 Fedora 社区打造,为 RHEL 及衍生发行版如 CentOS、Scientific Linux 等提供高质量软件包的项目。装上了 EPEL之后,就相当于添加了一个第三方源。

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum clean all #清空缓存
yum makecache #生成yum缓存 # master 安装salt-master
yum install salt-master -y # slave 安装salt-minion
yum install salt-minion -y
配置Saltstack
# salt-master的配置文件是/etc/salt/master
# salt-minion的配置文件是/etc/salt/minion
# 配置文件中包含了大量可调整的参数,这些参数控制master和minion各个方面

salt-master

[root@master ~]# grep -v ^# /etc/salt/master|grep -v ^$
interface: 0.0.0.0 #绑定到本地的0.0.0.0地址
publish_port: 4505  #管理端口,命令发送
user: root      #运行salt进程的用户
worker_threads: 5  #salt运行线程数,线程越多处理速度越快,不要超过cpu个数
ret_port: 4506  #执行结果返回端口
pidfile: /var/run/salt-master.pid #pid文件位置
log_file: /var/log/salt/master  #日志文件地址
#自动接收minion的key
auto_accept: False

salt-minion

[root@slave ~]# grep -v ^# /etc/salt/minion|grep -v ^$
master: master
master_port: 4506
user: root
id: slave
acceptance_wait_time: 10
log_file: /var/log/salt/minion
启动验证服务
systemctl start salt-minion
systemctl start salt-master #检查salt状态
systemctl status salt-minion
systemctl status salt-master # 验证端口
[root@master ~]# ss -atnlp
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:22 *:* users:(("sshd",pid=883,fd=3))
LISTEN 0 100 *:4505 *:* users:(("salt-master",pid=1232,fd=13))
LISTEN 0 100 *:4506 *:* users:(("salt-master",pid=1244,fd=21)) # salt-master默认监听两个端口
4505 # publish_port 提供远程命令发送功能
4506 # ret_port 提供认证,文件服务,结果收集等功能
# 确保客户端可以通信服务器的此2个端口,保证防火墙允许端口通过。因此在测试环境直接关闭防火墙
配置master认证minion

master上接受minion密钥

在minion启动后连接master会请求master为其签发证书,等待证书签发完成后,master可以信任minion,并且minion和master之间的通信是加密的。

salt-master执行

[root@master ~]# salt-key -L
Accepted Keys:
Denied Keys:
Unaccepted Keys:
slave # 此时已出现slave
Rejected Keys: # 此时slave已经出现在unaccepted keys中,说明minion已经和master联系,
# 并且master已经获取了minion的公钥,等待下一步指令。

检查master和minion的密钥匹配

[root@master ~]# salt-key -f slave
Unaccepted Keys:
slave: d4:97:1a:81:4d:88:d2:9b:0b:73:e3:66:07:7e:20:6c # 因此可确认密钥匹配,在master上接受密钥
[root@master ~]# salt-key -a slave
The following keys are going to be accepted:
Unaccepted Keys:
slave
Proceed? [n/Y] y
Key for minion slave accepted. # 确认接收秘钥后,检验minion秘钥是否被接收
[root@master ~]# salt-key -L
Accepted Keys:
slave
Denied Keys:
Unaccepted Keys:
Rejected Keys:
salt-key常用命令
[root@linux-node1 ~]# 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端/etc/salt/master配置
auto_accept: True #如果对Minion信任,可以配置master自动接受请求
salt-key的使用
# 列出当前所有的key
[root@master ~]# salt-key
Accepted Keys:
slave
Denied Keys:
Unaccepted Keys:
Rejected Keys: # 添加指定minion的key
[root@master ~]# salt-key -a salt -y # 添加所有minion的key
[root@master ~]# salt-key -A -y # 删除指定的key
[root@master ~]# salt-key -d slave -y # 删除所有的key
[root@master ~]# salt-key -D -y
日常命令参数

首先知道master和minion都安装了什么文件,然后才知道怎么操作

# master端
[root@master ~]# rpm -ql salt-master
/etc/salt/master # salt master主配置文件
/usr/bin/salt # salt master核心操作命令
/usr/bin/salt-cp # salt 文件传输命令
/usr/bin/salt-key # salt证书管理
/usr/bin/salt-master # salt master服务命令
/usr/bin/salt-run # salt master runner命令
/usr/bin/salt-unity
/usr/lib/systemd/system/salt-master.service
/usr/share/man/man1/salt-cp.1.gz
/usr/share/man/man1/salt-key.1.gz
/usr/share/man/man1/salt-master.1.gz
/usr/share/man/man1/salt-run.1.gz
/usr/share/man/man1/salt-unity.1.gz
/usr/share/man/man7/salt.7.gz # slave端
[root@slave ~]# rpm -ql salt-minion
/etc/salt/minion # minion配置文件
/usr/bin/salt-call # 拉取命令
/usr/bin/salt-minion # minion服务命令
/usr/lib/systemd/system/salt-minion.service # minion启动脚本
/usr/share/man/man1/salt-call.1.gz
/usr/share/man/man1/salt-minion.1.gz

第一条SaltStack命令

第一条salt命令
[root@master ~]# salt '*' test.ping
slave:
True [root@master ~]# salt '*' test.echo 'zhou'
slave:
zhou
# salt是一个命令
# * 表示目标主机, 在这里代表所有目标主机
# test.ping是salt远程执行的一个模块下面的方法。 # 这是条很简单的探测minion主机存活命令,也是远程执行命令,我们通过master发送消息给"*"所有的minion,
# 并且告诉他们运行salt内置的命令(也是python模块中的一个函数),返回true表示slave机器监控存活。 [root@master ~]# salt '*' test.fib 50
slave:
|_
- 0
- 1
- 1
- 2
- 3
- 5
- 8
- 13
- 21
- 34
- 5.00679016113e-06
# test.fib生成斐波那契数列 # 菲波那切数列定义是第0项是0,第1项是1,数列从第3项开始,每一项等于前两项之和。

Salt命令组成结构

完整的一个命令
# 在命令行输入的命令都是     执行模块
# 等到命令写入到文件中, 就叫做状态模块 salt --help # 即可查看salt帮助
[root@master 192.168.199.155 ~]$salt --help
Usage: salt [options] '<target>' <function> [arguments] # salt命令 参数 目标 salt模块的函数 远程执行的参数 # 完整的五部分命令
# summary参数显示salt命令的概要
[root@master ~]# salt --summary '*' cmd.run 'hostname'
slave:
slave -------------------------------------------
Summary
-------------------------------------------
# of Minions Targeted: 1
# of Minions Returned: 1
# of Minions Did Not Return: 0
------------------------------------------- # 列出salt的sys模块
[root@master ~]# salt 'slave' sys.list_modules
slave:
- acl
- aliases
- alternatives
- archive
- artifactory
- blockdev
- btrfs
- buildout
- cloud
- cmd
远程执行命令模块
[root@master ~]# salt 'slave' sys.list_modules

# cmd是超级模块,所有shell命令都能执行
[root@master ~]# salt 'slave' cmd.run 'ps -ef |grep python'
slave:
root 882 1 0 14:57 ? 00:00:00 /usr/bin/python -Es /usr/sbin/tuned -l -P
root 1220 1 0 15:13 ? 00:00:00 /usr/bin/python /usr/bin/salt-minion
root 1223 1220 0 15:13 ? 00:00:00 /usr/bin/python /usr/bin/salt-minion
root 13564 1 0 15:31 ? 00:00:00 /usr/bin/python /usr/bin/salt-minion
root 13565 13564 0 15:31 ? 00:00:00 /bin/sh -c ps -ef |grep python
root 13567 13565 0 15:31 ? 00:00:00 grep python
远程安装nginx
#在minion上安装nginx
[root@master~]$salt 'slave' pkg.install "nginx"
#卸载minion上的nginx
[root@master~]$salt 'slave' pkg.remove "nginx"
#检查pkg包的版本
[root@master~]$salt 'slave' pkg.version "nginx"
远程管理服务模块
# 管理服务是系统管理员的重要任务,通过salt管理minion服务会很简单,使用service模块

[root@master ~]# salt 'slave' service.start "nginx"
slave:
True
[root@master ~]# salt 'slave' service.status "nginx"
slave:
True
[root@master ~]# salt 'slave' service.stop "nginx"
slave:
True

--out控制salt命令结果输出格式

JSON

[root@master ~]# salt --out=json '*' cmd.run_all 'hostname'
{
"slave": {
"pid": 13780,
"retcode": 0,
"stderr": "",
"stdout": "slave"
}
}

YAML

[root@master ~]# salt --out=yaml '*' cmd.run_all 'hostname'
slave:
pid: 13786
retcode: 0
stderr: ''
stdout: slave

01 . SaltStack部署配置及简单应用的更多相关文章

  1. saltstack部署配置

    共计使用三台虚拟机进行部署实验,系统环境:centos7.3 在master上进行部署配置: 配置主机名 [root@localhost ~]# hostname salt-master [root@ ...

  2. SaltStack部署配置Tomcat-第三篇

    实验目标 简单部署tomcat及安装java环境 实现步骤 编写salt的状态模块 [root@linux-node1 web]# pwd /srv/salt/base/web [root@linux ...

  3. OpenStack Swift集群部署流程与简单使用

    之前介绍了<OpenStack Swift All In One安装部署流程与简单使用>,那么接下来就说一说Swift集群部署吧. 1. 简介 本文档详细描述了使用两台PC部署一个小型Sw ...

  4. 7、Web应用程序中的安全向量 -- 使用Retail部署配置

    该方法不需要胡乱地编辑各个配置设置,而是利用了ASP.NET特性:Retail部署配置. 部署配置是服务器的machine.config文件(在%windir%\Microsoft.NET\Frame ...

  5. salt-stack部署

    saltstack部署   环境准备 [root@server elasticsearch]# cat /etc/redhat-release CentOS release 6.6 (Final)[r ...

  6. asp.Net Core免费开源分布式异常日志收集框架Exceptionless安装配置以及简单使用图文教程

    最近在学习张善友老师的NanoFabric 框架的时了解到Exceptionless : https://exceptionless.com/ !因此学习了一下这个开源框架!下面对Exceptionl ...

  7. ssdb主从及双主模型配置和简单管理

    ssdb主从及双主模型配置和简单管理 levelDB是一个key->value 的数据存储库,其只能在本地保存数据,支持持久化,并且支持保存非常大的数据,单机redis在保存较大数据的时候数十G ...

  8. Eclipse中Tomcat的配置及简单例子

    Eclipse中Tomcat的配置及简单例子 Eclipse中Tomcat的配置是很简单的一个工作 一. 工具下载 Eclipse,最新版的eclipse为Mars版本.下载地址为: http://w ...

  9. SaltStack部署服务及配置管理apache+php-第二篇

    实验目标 1.使用SaltStack部署apache和php, 2.使用salt管理httpd.conf配置文件配置访问info.php使用账户密码 3.在salt里面增加对conf.d目录进行配置管 ...

随机推荐

  1. Java实现微生物增殖

    微生物增殖 假设有两种微生物 X 和 Y X出生后每隔3分钟分裂一次(数目加倍),Y出生后每隔2分钟分裂一次(数目加倍). 一个新出生的X,半分钟之后吃掉1个Y,并且,从此开始,每隔1分钟吃1个Y. ...

  2. Java实现第十届蓝桥杯最大降雨量

    试题 E: 最大降雨量 本题总分:15 分 [问题描述] 由于沙之国长年干旱,法师小明准备施展自己的一个神秘法术来求雨. 这个法术需要用到他手中的 49 张法术符,上面分别写着 1 至 49 这 49 ...

  3. 关于Synchronized的偏向锁,轻量级锁,重量级锁,锁升级过程,自旋优化,你该了解这些

    前言 相信大部分开发人员,或多或少都看过或写过并发编程的代码.并发关键字除了Synchronized(如有不懂请移至传送门,关于Synchronized的偏向锁,轻量级锁,重量级锁,锁升级过程,自旋优 ...

  4. 【扯皮系列】一篇与众不同的 String、StringBuilder 和 StringBuffer 详解

    碎碎念 这是一道老生常谈的问题了,字符串是不仅是 Java 中非常重要的一个对象,它在其他语言中也存在.比如 C++.Visual Basic.C# 等.字符串使用 String 来表示,字符串一旦被 ...

  5. 诸葛亮vs司马懿,排序算法大战谁能笑到最后?

    阵前对峙 公元234年,蜀汉丞相诸葛孔明再次北伐. 一日,与司马仲达所率魏军两军相峙,二人阵前舌战. 司马曰:"诸葛村夫,吾与汝相斗数年,斗兵斗阵斗谋略,均已疲乏.今日,何不一改陈规,斗点新 ...

  6. 【快手初面】要求3个线程按顺序循环执行,如循环打印A,B,C

    [背景]这个题目是当时远程面试时,手写的题目.自己比较惭愧,当时写的并不好,面试完就又好好的完善了下. 一.题意分析 3个线程要按顺序执行,就要通过线程通信去控制这3个线程的执行顺序. 而线程通信的方 ...

  7. 从linux源码看socket(tcp)的timeout

    从linux源码看socket(tcp)的timeout 前言 网络编程中超时时间是一个重要但又容易被忽略的问题,对其的设置需要仔细斟酌.在经历了数次物理机宕机之后,笔者详细的考察了在网络编程(tcp ...

  8. 深入理解JVM(③)各种垃圾收集算法

    前言 从如何判定对象消亡的角度出发,垃圾收集算法可以划分为"引用计数式垃圾收集"(Reference Counting GC)和"追踪式垃圾收集"(Tracin ...

  9. CSS学习:overflow:hidden解决溢出,坍塌,清除浮动

    overflow:hidden是overflow属性的一个神奇用法,它可以帮助我们隐藏溢出的元素,清除浮动和解除坍塌. CSS样式: .container{ background-color: bla ...

  10. phpstorm里面无法配置deployment?

    我的preference里面找不到deployment是什么回事啊? 解决方案: 导致这个问题的原因是PHPStorm的plugins里面没有Remote Hosts Access这个插件,安装一下这 ...