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实现蓝桥杯七对数字

    今有7对数字:两个1,两个2,两个3,-两个7,把它们排成一行. 要求,两个1间有1个其它数字,两个2间有2个其它数字,以此类推,两个7之间有7个其它数字.如下就是一个符合要求的排列: 1712642 ...

  2. PAT 跟奥巴马一起编程

    美国总统奥巴马不仅呼吁所有人都学习编程,甚至以身作则编写代码,成为美国历史上首位编写计算机代码的总统.2014 年底,为庆祝“计算机科学教育周”正式启动,奥巴马编写了很简单的计算机代码:在屏幕上画一个 ...

  3. python—列表,元组,字典

    ——列表:(中括号括起来:逗号分隔每个元素:列表中的元素可以是数字,字符串,列表,布尔值等等) (列表元素可以被修改)  list(类)    (有序的) [1]索引取值:切片取值:for循环:whi ...

  4. PHP上传进度支持(Upload progress in sessions)

    文件上传进度反馈, 这个需求在当前是越来越普遍, 比如大附件邮件. 在PHP5.4以前, 我们可以通过APC提供的功能来实现. 或者使用PECL扩展uploadprogress来实现. 从PHP的角度 ...

  5. Floating-Point Hazard【求导公式】

    Floating-Point Hazard 题目链接(点击) 题目描述 Given the value of low, high you will have to find the value of ...

  6. cc21a -c++重载成员操作符*,->,代码示范

    cc21a重载成员操作符*,->, *,解引用操作符 ->箭头操作符,用于智能指针类 #include "pointer.h" //pointer.cpp #inclu ...

  7. Python学习日志-03

    (3)如何运行程序 交互提示模式下编写代码: 最简单的运行Python程序的办法就是在Python交互命令行中输入这些程序.在cmd中输入python,不需要任何参数就可以进入Python交互命令行 ...

  8. 【K8s学习笔记】K8s是如何部署应用的?

    本文内容 本文致力于介绍K8s一些基础概念与串联部署应用的主体流程,使用Minikube实操 基础架构概念回顾 温故而知新,上一节[K8S学习笔记]初识K8S 及架构组件 我们学习了K8s的发展历史. ...

  9. v-model指令的学习(双向绑定)

    v-bind 只能实现数据的单项绑定,从data到view,无法实现双向绑定 v-model可以实现表单元素和model中数据的双向绑定 注意:model只能运用到表单元素中 如:input sele ...

  10. java8 探讨与分析匿名内部类、lambda表达式、方法引用的底层实现

    问题解决思路:查看编译生成的字节码文件 目录 测试匿名内部类的实现 小结 测试lambda表达式 小结 测试方法引用 小结 三种实现方式的总结 对于lambda表达式,为什么java8要这样做? 理论 ...