salt介绍

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

salt强大吗

系统管理员日常会进行大量的重复性操作,例如安装软件,修改配置文件,创建用户,批量执行命令等

等。如果主机数量庞大,单靠人工维护实在让人难以忍受。

  早期运维人员会根据自己的生产环境来写特定脚本完成大量重复性工作,这些脚本复杂且难以维护。系统管理员面临的问题主要是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。

在远程执行系统中,salt用python通过函数调用完成任务。

运行salt依赖包

python
zeromq
pyzmp
pycrypto
msgpack-python
yaml
jinja2

服务器环境准备

关闭服务器安全策略

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

安装saltstack

1、环境准备

准备3台机器,配置好ip地址,互相可以通信,即可
互ping一下看看通没通 ping192.168.61.138
一个master 一个minion 一个minion

2、配置hosts解析文件

配置hosts解析文件,强制进行主机名解析,加速salt的minion查找,分别在三台机器上,写入解析

vim /etc/hosts   

192.168.16.142  s20

192.168.16.7 docker01

192.168.16.47  bogon

3、下载saltstack软件包

配置阿里云的源,下载saltstack软件包,  注意区分 服务端和客户端
1.在master上安装
yum install salt-master -y 2.在minion1上安装
yum install salt-minion -y 3.在minion2上安装
yum install salt-minion -y

4、配置文件

【salt-master配置文件】

配置文件在/etc/salt/master

vim master  # 打开配置文件,填入如下内容

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-minion1配置文件】

vim /etc/salt/minion  # 打开配置文件,填入如下内容

master: s20     #指定mastet的通信地址
master_port: 4506
user: root
id: s20minion1 #id用于指定minion的身份信息 ,待会可以在master上查看到的
acceptance_wait_time: 10
log_file: /var/log/salt/minion

【salt-minion2配置文件】

vim /etc/salt/minion  # 打开配置文件,填入如下内容

master: s20
master_port: 4506
user: root
id: s20minion2
acceptance_wait_time: 10
log_file: /var/log/salt/minion

5、重启master和minion,检查密钥是否匹配

重启

salt通信是在minion初次启动时候,建立新的连接的

systemctl restart salt-master
systemctl restart salt-minion

检查master和minion的秘钥匹配

【在master上执行】

【在minion上获取minion的秘钥】

确认密钥匹配进行下一步

6、查看minion的密钥信息

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

在salt-master执行

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

在master机器上,查看minion的密钥信息

salt-key -L  #查看所有密钥

salt-key -a  s20minion1  #-a参数 单独接受一个密钥信息

salt-key -A    #-A  接受所有的key信息

#常用参数
-L #查看KEY状态
-A #允许所有
-D #删除所有
-a #认证指定的key
-d #删除指定的key
-r #注销掉指定key(该状态为未被认证) #在master端/etc/salt/master配置
auto_accept: True #如果对Minion信任,可以配置master自动接受请求
[root@szx ~]# salt-key -L
Accepted Keys: #已经接受的key
Denied Keys: #拒绝的key
Unaccepted Keys:#未加入的key
Rejected Keys:#吊销的key

7、验证salt minion信息是否存活

salt  "*" test.ping

转化为json信息

将输出的结果,转化为json信息,可以序列化后,丢给前端渲染

salt  "*" test.ping --out=json

salt的命令学习

上面我们已经配置完master和minion的通信,接下来我们就可以通过salt命令来批量管理minion机器了

【验证salt minion信息是否存活】
salt "*" test.ping
【转化为json信息】
salt "*" test.ping --out=json
【让机器远程返回主机名给我】
salt --summary '*' cmd.run 'hostname'
【远程安装软件】
salt "*" cmd.run "yum install nginx -y"
【salt安装软件的接口】
远程安装nginx:salt '*' pkg.install 'nginx'
远程卸载nginx:salt '*' pkg.remove "nginx"
检查pkg包的版本:salt '*' pkg.version "nginx"
【远程管理服务模块】
# 管理服务是系统管理员的重要任务,通过salt管理minion服务会很简单,使用service模块
salt '*' service.start "nginx"
salt '*' service.stop "nginx"
salt '*' service.restart "nginx"

查看master和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命令

【minion端】

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

【test模块】

[root@master ~]# salt '*' test.ping
slave:
True # salt 是一个命令
# * 表示目标主机, 在这里代表所有目标主机
# test.ping是salt远程执行的一个模块下面的方法。

这是条很简单的探测minion主机存活命令,也是远程执行命令,我们通过master发送消息给"*"所有的minion,并且告诉他们运行salt内置的命令(也是python模块中的一个函数),返回true表示slave机器监控存活。

test模块实际上还有许多其他的函数

[root@master 192.168.199.155 ~]$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其他函数

测试下test.echo

[root@master 192.168.199.155 ~]$salt '*' test.echo 'henry nb666'
slave:
henry nb666

test.fib生成斐波那契数列

菲波那切数列定义是第0项是0,第1项是1,数列从第3项开始,每一项等于前两项之和。

[root@master 192.168.199.155 ~]$salt '*' test.fib 50
slave:
|_
- 0
- 1
- 1
- 2
- 3
- 5
- 8
- 13
- 21
- 34
- 1.09672546387e-05

salt命令的两种输出格式

【 json】

salt  "*" test.ping --out=json

【yaml】

salt  "*" test.ping --out=yaml

【yaml语法学习】

在学习saltstack过程中,第一要点就是States编写技巧,简称SLS文件。这个文件遵循YAML语法。初学者看这玩意很容易懵逼,来,超哥拯救你学习YAML语法
json xml yaml 数据序列化格式
yaml容易被解析,应用于配置文件 salt的配置文件是yaml配置文件,不能用tab
saltstack,k8s,ansible都用的yaml格式配置文件 语法规则
大小写敏感
使用缩进表示层级关系
缩进时禁止tab键,只能空格
缩进的空格数不重要,相同层级的元素左侧对其即可
# 表示注释行
yaml支持的数据结构
对象: 键值对,也称作映射 mapping 哈希hashes 字典 dict 冒号表示 key: value key冒号后必须有
数组: 一组按次序排列的值,又称为序列sequence 列表list 短横线 - list1
纯量: 单个不可再分的值 对象:键值对
yaml
first_key:
second_key:second_value python
{
'first_key':{
'second_key':'second_value',
}
}
YAML是YAML Ain't Markup Language的首字母缩写,YAML的语法简单,
结构体通过空格展示
项目使用 '-' 代表
键值对通过 ':' 分割
YAML语法遵循固定的缩进风格,表示数据层级结构关系,saltstack需要每个缩进级别由2个空格组成,禁止用tabs!!!
Python中的字典是简单的键值对,go语言中称作哈希表map
字典的key通过冒号分割 key在YAML中表现形式是一个冒号结果的字符串
my_key: my_value
转化到python语法中,上述命令为
{'my_key':'my_value'} value还可以通过缩进和key关联,四个空格!!
my_key:
my_value
转化为python语法同样的
{'my_key':'my_value'} YAML语法中字典是可以嵌套的
one_dict_key:
two_dict_key:value_dict
转化为python语法
{
  'one_dict_key':{
    'two_dict_key':'value_dict'
  }
}
短横杠
YAML语法表示列表,使用一个横杠加一个空格
多个项使用同样的缩进级别作为同一个列表的部分
- list_value_one
- list_value_two
- list_value_three
列表可以作为一个键值对的value,例如一次性要安装多个软件
my_dict:
- l1
- l2
- l3
转化为python代码理解就是
{
  'my_dict':['l1','l2',;l3]
}

saltstack运维工具的更多相关文章

  1. 【搭建Saltstack运维工具】

    目录 所谓Salt 开始搭建 配置接受密钥 salt命令 YAML详解 目标定位字符串 state模块定义主机状态 Salt采集静态信息之GrainsSalt @(Saltstack) *** 所谓S ...

  2. Linux基础—saltstack运维工具学习

    一.saltstack简介 1.saltstack是什么 系统管理员日常会进行大量的重复性操作,例如安装软件,修改配置文件,创建用户,批量执行命令等,如果主机数量庞大,单靠人工维护实在让人难以忍受. ...

  3. saltStack运维工具的部署及master迁移实现的过程详解

    服务器端:192.168.3.87 客户端:192.168.3.86.192.168.3.108 1.salt服务器端安装 192.168.3.87 rpm -Uvh http://mirrors.y ...

  4. 自动化运维工具 SaltStack 搭建

    原文地址:https://www.ibm.com/developerworks/cn/opensource/os-devops-saltstack-in-cloud/index.html#N10072 ...

  5. 自动化运维工具SaltStack详细部署

    ==========================================================================================一.基础介绍==== ...

  6. 自动化运维工具SaltStack详细部署【转】

    ==========================================================================================一.基础介绍==== ...

  7. linux自动化运维工具Ansible saltstack Puppet、Chef、Fabric之间的对比

    发现分布式是一个发展的趋势,无论是大型网站的负载均衡架构还是大数据框架部署,以及云存储计算系统搭建都离不开多台服务器的连续部署和环境搭建. 当我们的基础架构是分散式或者基于云的,并且我们经常需要处理在 ...

  8. CheungSSH国产自动化运维工具开源Web界面

    CheungSSH web2.0 发布文档 CheungSSH 简介 CheungSSH是一款国人自主研发的Linux运维自动化管理服务器软件,秉着为企业降低运营成本,解放管理员双手和自动化生产的理念 ...

  9. 自动化运维工具Ansible详细部署 (转载)

    自动化运维工具Ansible详细部署 标签:ansible 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://sofar.blog. ...

随机推荐

  1. SQL Server 2017命令创建新账户(test-user),并分配数据库权限

    -- 1. 创建登录账号USE [master];GOCREATE LOGIN [test-user] WITH PASSWORD = 'xysu7SZ193SNX6E{{HxubPE3}vr',DE ...

  2. angular 源码 <一> rotuerLinkActive

    这几篇,查看angular 源码. rotuerLinkActive 是路由的样式设置. 它的值是 css 的一个类.或者几个类. 主要代码如下 @Input() set routerLinkActi ...

  3. Project Oberon

    Project Oberon Project Oberon  http://www.projectoberon.com/ Project Oberon 28.11.2018 / 11.12.2018 ...

  4. 11. Java方法的定义与使用

    1.1方法的定义 方法是一段可以被重复调用的代码块. 方法的声明: public static 方法返回值 方法名称 ([参数类型 变量...]) 方法体代码: [return 返回值]: 当方法以v ...

  5. SQL递归查询(with as)

    SQL递归查询(with cte as) with cte as(    select Id,Pid,DeptName,0 as lvl from Department    where Id = 2 ...

  6. XCode下在不同位置声明变量的用法(转)

    XCode下在不同位置声明变量的用法 方式一:直接在.h文件@interface中的大括号中声明. @interface Test : NSObject { NSString *str; // 私有变 ...

  7. Java 面向对象(二)封装

    一.封装(Encapsulation) 1.概述 封装是面向对象编程的核心思想.把对象的属性和行为封装起来,其载体就是类. 面向对象编程语言是对客观世界的模拟,客观世界里成员变量都是隐藏在对象内部的, ...

  8. iOS-OC中常见的一些宏

    /* 1. 颜色 */ #define PCBRGBColorA(r, g, b, a) [UIColor colorWithRed:(r)/255.0 green:(g)/255.0 blue:(b ...

  9. linux物理地址和虚拟地址定义

    线性地址(Linear Address) 是逻辑地址到物理地址变换之间的中间层 如果启用了分页机制,那么线性地址可以再经过变换以产生一个物理地址:如果没有启用分页机制,那么线性地址直接就是物理地址 分 ...

  10. swoole httpserver学习

    文件 HttpServer.php <?php /** * Created by PhpStorm. * User: mac * Date: 2019/9/13 * Time: 21:00 */ ...