引入

简介

  saltstack是由thomas Hatch于2011年创建的一个开源项目,设计初衷是为了实现一个快速的远程执行系统。

  早期运维人员会根据自己的生产环境来写特定脚本完成大量重复性工作,这些脚本复杂且难以维护。系统管理员面临的问题主要是1、系统配置管理,2、远程执行命令,因此诞生了很多开源软件,系统维护方面有fabric、puppet、chef、ansible、saltstack等,这些软件擅长维护系统状态或方便的对大量主机进行批量的命令执行。

  salt灵活性强大,可以进行大规模部署,也能进行小规模的系统部署。salt的设计架构适用于任意数量的服务器,从少量本地网络系统到跨越数个数据中心,拓扑架构都是c/s模型,配置简单。

  不管是几台、几百台、几千台服务器,都可以使用salt在一个中心节点上进行管控,灵活定位任意服务器子集来运行命令。 

  Salt是python编写的,支持用户通过python自定义功能模块,也提供了大量的python API接口,用户可以根据需要进行简单快速的扩展。

saltstack的运维方式

  • Local  本地运行,交付管理
  • Master/Minion (常用方式 )
  • Salt SSH   不需要客户端

salt基本架构

  在安装salt之前,先理解salt架构中各个角色,主要区分是salt-master和salt-minion,顾名思义master是中心控制系统,minion是被管理的客户端。

  salt架构中的一种就是master > minion。

服务器环境准备

服务器环境 centos7(master) centos7(master)

ip地址

192.168.178.131 192.168.178.132

身份

master slave

软件包

salt-master salt-minion

关闭服务器安全策略

# 关闭firewalld
systemctl disable firewalld
systemctl stop firewalld # 关闭iptables
iptables -F # 关闭selinux

安装saltstack

注意:salt软件包需要epel源的支持, 如果没有安装epel源 <点这里>有教程

在 192.168.178.131 中安装salt-master

yum install salt-master -y

另一台安装salt-minion

yum install salt-minion -y

salt端口

安装好salt之后开始配置,salt-master默认监听两个端口:

4505   publish_port # 提供远程命令发送功能
4506 ret_port # 提供认证,文件服务,结果收集等功能
# 确保客户端可以通信服务器的此2个端口,保证防火墙允许端口通过。因此在测试环境直接关闭防火墙。

配置文件

salt-master的配置文件是/etc/salt/master  # 主机 192.168.178.131
salt-minion的配置文件是/etc/salt/minion # 主机 192.168.178.132
# 配置文件中包含了大量可调整的参数,这些参数控制master和minion各个方面

写入salt-master配置文件如下:

interface: 0.0.0.0  # 绑定到本地的0.0.0.0地址
publish_port: 4505
user: root
worker_threads: 5
ret_port: 4506
pidfile: /var/run/salt-master.pid
log_file: /var/log/salt/master # 自动接收minion的key
# auto_accept: False
# salt运行的用户,影响到salt的执行权限
user: root #s alt的运行线程,开的线程越多一般处理的速度越快,但一般不要超过CPU的个数
worker_threads: 10 # master的管理端口
publish_port : 4505 # master跟minion的通讯端口,用于文件服务,认证,接受返回结果等
ret_port : 4506 # 如果这个master运行的salt-syndic连接到了一个更高层级的master,那么这个参数需要配置成连接到的这个高层级master的监听端口
syndic_master_port : 4506 # 指定pid文件位置
pidfile: /var/run/salt-master.pid

salt-master配置参数详解

写入sale-master配置文件如下:

master: 192.168.178.132  # 填自己的端口或者域名
master_port: 4506
user: root
id: slave # id自定义
acceptance_wait_time: 10
log_file: /var/log/salt/minion
# minion的识别ID,可以是IP,域名,或是可以通过DNS解析的字符串
id: slave # salt运行的用户权限
user: root # master的识别ID,可以是IP,域名,或是可以通过DNS解析的字符串
master : master # master通信端口
master_port: 4506 # 备份模式,minion是本地备份,当进行文件管理时的文件备份模式
backup_mode: minion # 执行salt-call时候的输出方式
output: nested # minion等待master接受认证的时间
acceptance_wait_time: 10 # 失败重连次数,0表示无限次,非零会不断尝试到设置值后停止尝试
acceptance_wait_time_max: 0 # 重新认证延迟时间,可以避免因为master的key改变导致minion需要重新认证的syn风暴
random_reauth_delay: 60 # 日志文件位置
log_file: /var/logs/salt_minion.log

salt-minion配置参数详解

启动

# 192.168.178.131中:
systemctl start salt-master # 启动master
systemctl status salt-master # 检查start状态 ==================================== # 192.168.178.132
systemctl start salt-minion # 启动minion
systemctl status salt-minion # 检查状态

注意:如果启动报错,查看是否有 /var/log/salt/ 这个文件

在master上接收minion密钥

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

在salt-master执行

salt-key命令用于管理mionion秘钥

[root@master ~]# salt-key -L
# 输出结果:
Accepted Keys:
Denied Keys:
Unaccepted Keys:
slave    # 此时已经出现slave
Rejected Keys:

此时slave已经出现在unaccepted keys中,说明minion已经和master联系,并且master已经获取了minion的公钥,等待下一步指令。

密钥匹配

在master上执行:

[root@master ~]# salt-key -f 192.162.178.132
Unaccepted Keys:
slave: 0a:b9:97:b5:9a:65:b8:49:a1:50:a5:6a:66:ce:33:ea

然后在minion上获取密钥:

[root@slave ~]# salt-call --local key.finger
local:
0a:b9:97:b5:9a:65:b8:49:a1:50:a5:6a:66:ce:33:ea

此时可确认密钥匹配,在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

只有master接收了minion key后才能进行管理。

[root@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端/etc/salt/master配置
auto_accept: True # 如果对Minion信任,可以配置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命令

master端

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启动脚本

slave端

salt命令:

[root@master ~]# salt '*' test.ping  # 检测所有minion主机是否存活
slave:
True # salt 是一个命令
# * 表示目标主机, 在这里代表所有目标主机
# test.ping是salt远程执行的一个模块下面的方法。 [root@master ~]$salt '*' test.fib 50 # 生成斐波那契数列
[root@master ~]$salt 'slave' sys.list_modules # 列出所有salt的sys模块
[root@master ~]$salt '*' sys.list_functions test
slave:
- test.arg
- test.arg_repr
- test.arg_type
- test.assertion
- test.attr_call
- test.collatz
- test.conf_test
- test.cross_test
- test.echo
- test.exception
- test.fib
- test.get_opts
- test.kwarg
- test.module_report
- test.not_loaded
- test.opts_pkg
- test.outputter
- test.ping
- test.provider
- test.providers
- test.rand_sleep
- test.rand_str
- test.retcode
- test.sleep
- test.stack
- test.try_
- test.tty
- test.version
- test.versions_information
- test.versions_report

test其他函数

cmd运行命令:

# cmd是超级模块,所有shell命令都能执行
[root@master ~]$salt 'slave' cmd.run 'ps -ef|grep python'

pkg安装命令:

#在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"

service管理服务模块:

[root@master ~]$salt 'slave' service.start "nginx"  # 启动nginx
[root@master ~]$salt 'slave' service.status "nginx" # 重启nginx
[root@master ~]$salt 'slave' service.stop "nginx" # 停止nginx

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

# JSON
[root@master ~]$salt --out=json '*' cmd.run_all 'hostname' # 返回json格式
# YAML
[root@master ~]$salt --out=yaml '*' cmd.run_all 'hostname' # 返回YAML格式

saltstack之自动化运维的更多相关文章

  1. 自动化运维:网站svn代码上线更新(flask+saltstack)

    阶段性总结:      跌跌撞撞的用了一周左右的时间做完了网站自动升级功能,中间遇到了很多的问题,也学到了很多,在此做一个总结.   1.整体架构: 后台:nginx+uwsgi  #nginx提供w ...

  2. 七天学会SALTSTACK自动化运维 (3)

    七天学会SALTSTACK自动化运维 (3) 导读 SLS TOP.SLS MINION选择器 SLS文件的编译 总结 参考链接 导读 SLS SLS (aka SaLt State file) 是 ...

  3. 七天学会SALTSTACK自动化运维 (2)

    七天学会SALTSTACK自动化运维 (2) 导读 Grains Pillar 总结 参考链接 导读 上一篇主要介绍了安装和基本的使用方法,但是我认为如果理解了相关概念的话,使用会更加顺手,因为毕竟每 ...

  4. 1、自动化运维之SaltStack实践

    自动化运维之SaltStack实践 1.1.环境 linux-node1(master服务端) 192.168.0.15 linux-node2(minion客户端) 192.168.0.16 1.2 ...

  5. 自动化运维之Saltstack

    第三十八课 自动化运维之Saltstack 目录 一.自动化运维介绍 二. saltstack安装 三. 启动saltstack服务 四. saltstack配置认证 五. saltstack远程执行 ...

  6. saltstack自动化运维系列11基于etcd的saltstack的自动化扩容

    saltstack自动化运维系列11基于etcd的saltstack的自动化扩容 自动化运维-基于etcd加saltstack的自动化扩容# tar -xf etcd-v2.2.1-linux-amd ...

  7. saltstack自动化运维系列⑩SaltStack二次开发初探

    saltstack自动化运维系列⑩SaltStack二次开发初探 1.当salt运行在公网或者网络环境较差的条件下,需要配置timeout时间vim /etc/salt/master timeout: ...

  8. saltstack自动化运维系列⑧SaltStack实践配置管理安装nginx-1.10.3

    saltstack自动化运维系列⑧SaltStack实践配置管理安装nginx-1.10.3 安装nginx-1.10.3.tar.gz # mkdir -p /srv/salt/prod/pkg / ...

  9. saltstack自动化运维系列⑦SaltStack实践配置管理安装zabbix

    saltstack自动化运维系列⑥SaltStack实践配置管理安装zabbix 1.添加管理zabbix的sls文件# vim /srv/salt/base/init/zabbix_agent.sl ...

随机推荐

  1. SpringBoot 配置定时任务

    SpringBoot启用定时任务,其内部集成了成熟的框架,因此我们可以很简单的使用它. 开启定时任务 @SpringBootApplication //设置扫描的组件的包 @ComponentScan ...

  2. Android如何实现超级棒的沉浸式体验

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由brzhang发表于云+社区专栏 做APP开发的过程中,有很多时候,我们需要实现类似于下面这种沉浸式的体验. 沉浸式体验 一开始接触的 ...

  3. SQL Server 迁移至MySQL 关键步骤的梳理总结

    迁移主要是通过Navicat工具来实现的.迁移工具的选定在此不讨论. 迁移前准备 1.提前通知DBA\SA\BI等,并确认发布计划及数据库迁移方案. 2.梳理出SQL  Server DB 中影响业务 ...

  4. Linux LVM学习总结——Insufficient Free Extents for a Logical Volume

    如下所示,在创建LV的时候,偶尔会遇到"Volume group "xxxx" has insufficient free space (xxxx extents): x ...

  5. hive笔记:复杂数据类型-map结构

    map 结构 1. 语法:map(k1,v1,k2,v2,…)   操作类型:map ,map类型的数据可以通过'列名['key']的方式访问 案例: select deductions['Feder ...

  6. 【iOS开发】Alamofire框架的使用一基本用法

    Alamofire框架的使用一 —— 基本用法 对于使用Objective-C的开发者,一定非常熟悉AFNetworking这个网络框架.在苹果推出的Swift之后,AFNetworking的作者专门 ...

  7. 网络流 之 dinic算法

    我觉得这个dinic的算法和之前的增广路法差不多 .使用BFS对残余网络进行分层,在分层时,只要进行到汇点的层次数被算出即可停止, 因为按照该DFS的规则,和汇点同层或更下一层的节点,是不可能走到汇点 ...

  8. ESP8266天线问题

    http://www.icxbk.com/ask/detail/28832.html 目前市面上常见的外接天线包括 1.FPC天线,就是一小块柔性PCB,上面走一个铜线,下方不覆铜,然后一般带一个贴纸 ...

  9. Exp6 信息搜集与漏洞扫描 20165110

    Exp6 信息搜集与漏洞扫描 20165110 一.实践目标 掌握信息搜集的最基础技能与常用工具的使用方法. 二.实践内容 (1)各种搜索技巧的应用 (2)DNS IP注册信息的查询 (3)基本的扫描 ...

  10. Error:Execution failed for task ':app:processDebugManifest'. Manifest merger failed with multiple errors, see logs

    这个异常在网上一搜会出现很多答案,也可能都对. 我都尝试过但是不符合我这边的要求,问题得不到解决.网上的说法是对的,jar包冲突.不过究竟是哪里冲突没办法判断. 最后尝试了一下在module的中没用的 ...