saltstack运维软件
一、saltstack介绍
1、介绍
SaltStack管理工具允许管理员对多个操作系统创建一个一致的管理系统,包括VMware vSphere环境。
SaltStack是一个服务器基础架构集中化管理平台,具备配置管理、远程执行、监控等功能,基于Python语言实现,结合轻量级消息队列(ZeroMQ)与Python第三方模块(Pyzmq、PyCrypto、Pyjinjia2、python-msgpack和PyYAML等)构建。
通过部署SaltStack,我们可以在成千万台服务器上做到批量执行命令,根据不同业务进行配置集中化管理、分发文件、采集服务器数据、操作系统基础及软件包管理等,SaltStack是运维人员提高工作效率、规范业务配置与操作的利器。
简单的说,就是使用saltstack这个工具,会产生两个身份:
salt-master:它是大佬,管理所有人
salt-minion:它是小弟,被master管理的
当然如同salt的批量管理工具,其实还有很多,比如ansible、fabric、puppet、chef、ansible等等
2、salt部署基本架构
salt的架构主要是master和minion,master是中心控制系统,minion是被管理的客户端。
二、SaltStack的使用
1、saltstack安装步骤
# 我们这里只用两台机器进行测试
1.准备两台机器,一台作为master,一台作为minion
分别安装两个软件
在master机器安装
yum install salt-master 在minion机器安装
yum install salt-minion 2.两台机器的环境配置
1,确保机器通信,可以ping一下 2,修改两台机器的/etc/hosts强制解析(这样做只是为了在本地测试速度更快,一般企业会搭建一个私有dns服务器)
1,master机器 vim /etc/hosts
192.168.3.115 minion1 2,minion机器
192.168.3.16 master 3,关闭两台机器的防火墙策略 3.常用配置
# 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
1,salt-master
# 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
2,salt-minion
4.作为master机器的配置如下:
vim /etc/salt/master interface: 0.0.0.0 # 绑定到本地的0.0.0.0地址
publish_port: 4505 # 管理端口,命令发送(master端口)
user: root # 运行salt进程的用户
worker_threads: 2 # salt运行线程数,线程越多处理速度越快,但不要超过cpu个数
ret_port: 4506 # 执行结果返回端口(minion端口)
pidfile: /var/run/salt-master.pid # pid文件位置
log_file: /var/log/salt/master # 日志文件地址 # 自动接收minion的key
# auto_accept: False 5.作为minion机器的配置如下
vim /etc/salt/minion master: master
master_port: 4506
user: root
id: slave
acceptance_wait_time: 10
log_file: /var/log/salt/minion 6.分别启动和检查这两个服务端
# 启动
systemctl start salt-master
systemctl start salt-minion # 检查salt状态
systemctl status salt-master
systemctl status salt-minion
2、初次通信
在minion启动后会请求master为其签发证书,等待证书签发完成后,master可以信任minion,
并且minion和master之间的通信是加密的。
1.初次启动的时候,minion机器会给master机器发送一串秘钥,用于通信
分别检测master和minion的秘钥信息
master输入:
salt-key -f slave # 查看minion传过来的密匙
salt-key -L # 查看有谁请求连接 minion输入:
salt-call --local key.finger # 查看minion自己的密匙 以上命令可以确认密匙是否一致 2.初次通信,在master节点上,接受minion的秘钥
salt-key -a slave # 单独接受某个minion的秘钥 salt-key -A # 接受所有秘钥 salt-key -D # 删除所有key,如果儿子机器,修改了salt参数,必须重启 salt-key -L # 接收密匙后,再次查看状态
3、salt-key解析
只有Master接受了Minion Key后,才能进行管理。具体的认证命令为salt-key常用的有如下命令
再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自动接受请求
4、salt-key的使用
# 列出当前所有的key
salt-key # 添加指定minion的key
salt-key -a salt1-minion.example.com -y # 添加所有minion的key
salt-key -A -y # 删除指定的key
salt-key -d minion1 -y # 删除所有的key
salt-key -D -y
三、master和minion的配置解析
1、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命令
2、slave端
/etc/salt/minion # minion配置文件
/usr/bin/salt-call # 拉取命令
/usr/bin/salt-minion # minion服务命令
/usr/lib/systemd/system/salt-minion.service # minion启动脚本
四、salt常用命令
1、test
1. salt '*' test.ping
# salt 是一个命令
# * 表示目标主机, 在这里代表所有目标主机
# test.ping是salt远程执行的一个模块下面的方法 这条命令时探测minion主机是否还存活,也是远程执行命令,我们通过master发送消息给"*"所有的minion,并且告诉他们运行salt内置的命令(也是python模块中的一个函数),返回true表示slave机器监控存活 2. salt '*' test.echo 'heiheihei' 3. salt '*' test.fib 50
生成斐波那契数列
菲波那切数列定义是第0项是0,第1项是1,数列从第3项开始,每一项等于前两项之和
2、cmd(salt的万能模块)
cmd是超级模块,所有shell命令都能执行,远程执行命令模块
salt "slave" cmd.run "echo '好嗨呦,感觉人生到达了巅峰' > /tmp/haohai.txt "
salt "slave" cmd.run "rm -rf /tmp/*"
salt 'slave' cmd.run 'ps -ef|grep python' # 指定minion机器,让它执行我写的命令 # 控制输出结果的格式 --out=json指定输出json格式
salt "*" cmd.run "hostname -I" --out=json # 返回slave的IP地址
3、远程发送文件
# 发送master本地/etc/yum.repos.d/*文件到slave机器的/etc/yum.repos.d/下
salt-cp "slave" /etc/yum.repos.d/* /etc/yum.repos.d/
4、远程管理模块
1.pkg包管理工具
# 在minion上安装nginx
salt 'slave' pkg.install "nginx" # 卸载minion上的nginx
salt 'slave' pkg.remove "nginx" # 检查pkg包的版本
salt 'slave' pkg.version "nginx" 2.pkg的实质
上面的pkg命令相当于下面的命令,它实际上也是调用了yum进行包管理
# 在minion上安装nginx
salt "slave" cmd.run "yum install nginx" 3.service远程管理服务
管理服务是系统管理员的重要任务,通过salt管理minion服务会很简单,使用service模块
# 远程启动minion上的nginx
salt 'slave' service.start nginx # 远程停止minion上的nginx
salt 'slave' service.stop "nginx" # 远程查看minion上的nginx的状态
salt 'slave' service.status "nginx" 4.service的实质
上面的service命令实际上相当于下面的命令,也是调用了systemctl
# 远程启动,停止nginx
salt "slave" cmd.run "systemctl start nginx"
salt "slave" cmd.run "systemctl stop nginx" 5.注意
虽然用cmd.run可以实现以上的功能,
但是有官方提供的命令,尽量使用官方的命令。
5、模糊匹配
Linux通配符
* 代表任意字符,或空字符串
? 代表一个字符,不可以为空
[a-z] [0-9] 代表任何一个小写字母 [root@master 192.168.3.16 ~]$salt 'slav?' test.ping
slave:
True [root@master 192.168.3.16 ~]$salt '[a-z]lave' test.ping
slave:
True salt还支持python的re正则表达式
6、salt命令结果输出的格式
使用 --out 可以控制salt命令结果输出的格式 1.JSON格式
[root@master 192.168.3.16 ~]$salt --out=json '*' cmd.run_all 'hostname'
{
"slave": {
"pid": 3085,
"retcode": 0,
"stderr": "",
"stdout": "slave"
}
} 2.YAML格式
[root@master 192.168.3.16 ~]$salt --out=yaml '*' cmd.run_all 'hostname'
slave:
pid: 2289
retcode: 0
stderr: ''
stdout: slave
五、yaml语法
在学习saltstack、anible、k8s、etcd等工具的过程中,第一要点就是States编写技巧,简称SLS文件。这个文件遵循YAML语法。
1、yaml的介绍
1.格式
yaml跟json和xml类似,也是一种数据序列化格式,yaml的优点是容易被解析,应用于配置文件 salt的配置文件是yaml配置文件,不能用tab代表空格,saltstack,k8s,ansible都用的yaml格式配置文件 2.语法规则
大小写敏感
使用缩进表示层级关系
缩进时禁止tab键,只能空格
缩进的空格数不重要,相同层级的元素左侧对其即可
# 表示注释行 3.yaml支持的数据结构
对象: 键值对,也称作:映射mapping、哈希hashes、字典dict。格式是 key: value,注意key冒号后必须要有一个空格
数组: 一组按次序排列的值,又称为序列sequence、列表list。格式是 短横线 - list1,注意短横线-后必须要有一个空格
纯量: 单个不可再分的值 4.对象示例
对象:键值对
yaml格式的对象
first_key:
second_key:second_value python的字典
{
'first_key':{
'second_key':'second_value',
}
}
2、示例
YAML是YAML Ain't Markup Language的首字母缩写,YAML的语法简单,
结构体通过空格展示
项目使用 '-' 代表
键值对通过 ':' 分割
YAML语法遵循固定的缩进风格,表示数据层级结构关系,saltstack需要每个缩进级别由2个空格组成,禁止用tabs!!!
1.对象示例
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'
}
} 2.数组
YAML语法表示列表,使用一个横杠加一个空格
多个项使用同样的缩进级别作为同一个列表的部分
- list_value_one
- list_value_two
- list_value_three 列表可以作为一个键值对的value,例如一次性要安装多个软件
my_dict:
- l1
- l2
- l3 转化为python代码理解就是
{
'my_dict': ['l1','l2',;l3]
} 3.在线yaml语法调试
http://www.bejson.com/validators/yaml_editor/
可以到上面网址去测试你写的yaml语法对不对 yaml格式
学校:
清华:
- 美女
- 帅哥
北大:
- 教授
- 校长 转化为python格式
{
'学校': {
'清华': [ '美女', '帅哥' ],
'北大': [ '教授', '校长' ]
}
}
六、Salt采集静态信息之Grains
1、Grains介绍
Grains是saltstack组件中非常重要之一,在配置部署时候会经常使用,Grains记录minion的静态信息,
比如常用属性,CPU、内存、磁盘、网络信息等。
Minions的Grains信息是Minion启动时采集汇报给Master的,
Grains是以 key value形式存储的数据库,可以看做Host的元数据(metadata)
Grains保存着收集到的客户端的详细信息
如果slave机器数据变化,grains就过期了
如果在生产环境中需要自定义Grains,可以通过
Minion配置文件
Grains相关模块定义
Python脚本定义
2、Grains用法
Grains人为是描述minion本身固有的静态属性数据,列出主机所有Grains数据,
Grains是以 key value形式存储的数据库,因此跟python的字典是一样的用法(因为saltstack就是用python写的)
1. 查看grains的命令用法
salt 'slave' sys.doc grains # 可以查看到关于grains的所有命令和用法 2. 列出所有grains方法
salt 'slave' grains.ls 3. 列出主机所有Grains数据(Grains记录的是minion的静态信息)
salt 'slave' grains.items # 字典的items方法,以键值对形式查看 4. 检索某些数据
salt 'slave' grains.item os id host ipv4
# 查看slave机器的os(操作系统)、id(身份名)、 host(主机名)、ipv4地址
3、自定义Grains数据
1. 在master端为minion机器设置静态数据
salt 'slave' grains.setval IG NB # 通过setval设置键值对 2. 查看是否设置成功
在master机器上查看minion机器的静态数据
salt 'slave' grains.item IG 3. 把静态数据的某个值设置为空(None)
salt 'slave' grains.delval IG NB
# 此时再次查看salt 'slave' grains.item IG会发现值为None 4. 删除自动以的静态数据的值
在minion机器上修改配置文件
vim /etc/salt/grains # 手动删除记录,重启服务即可 5. 小结自定义grains数据
在master端设置Grains静态数据,原理会将此数据添加到minion服务器的配置文件的/etc/salt/grains里面,
若想把数据删了,直接修改minion机器的 /etc/salt/grains 文件即可。
saltstack运维软件的更多相关文章
- linux - 运维软件saltstack
目录 运维软件saltstack 安装使用流程 运维软件saltstack 早期运维人员会根据自己的生产环境来写特定脚本完成大量重复性工作,这些脚本复杂且难以维护.系统管理员面临的问题主要是1.系统配 ...
- IT运维软件免费送 智和信通战疫活动火热进行中
突如其来的“新型冠状病毒”疫情牵动了全国人民的心,这是一场与病毒抗争,为生命逆行与时间赛跑的战役.举国上下众志成城面对疫情,在线医疗.在线教学.在线办公.在线会议.电商销售成为热点.线上经济的火热给企 ...
- 【搭建Saltstack运维工具】
目录 所谓Salt 开始搭建 配置接受密钥 salt命令 YAML详解 目标定位字符串 state模块定义主机状态 Salt采集静态信息之GrainsSalt @(Saltstack) *** 所谓S ...
- saltstack运维工具
salt介绍 saltstack是由thomas Hatch于2011年创建的一个开源项目,设计初衷是为了实现一个快速的远程执行系统. salt强大吗 系统管理员日常会进行大量的重复性操作,例如安装软 ...
- Linux基础—saltstack运维工具学习
一.saltstack简介 1.saltstack是什么 系统管理员日常会进行大量的重复性操作,例如安装软件,修改配置文件,创建用户,批量执行命令等,如果主机数量庞大,单靠人工维护实在让人难以忍受. ...
- 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 ...
- 七天学会 SALT STACK 自动化运维 (1)
七天学会 SALT STACK 自动化运维 (1) 简单理解 SALTSTACK 安装与配置 基本的使用方法 结束语 引用资源 简单理解 SALT STACK 笔者是初次接触 自动化运维 这一技术领域 ...
- 《IT运维之道》
本书共分为5篇,机遇篇.做事篇.处事篇.技能篇和高级篇,从不同的层面阐述了IT运维人员 应掌握的方法及相关知识与技能.本书作者深入浅出.化繁为简,将信息化服务中晦涩的IT标准规范.流程体系用浅显易懂的 ...
- 从华为数字化转型看IT自动化运维重要性
关注嘉为科技,获取运维新知 8月有幸聆听了华为CIO陶总(陶景文)关于“华为数字化转型秘诀:坚定“以客户为中心”的思想”的演讲,获益良多.其中陶总也分享了IT运营平台的建设对于华为实现数字化转型的重要 ...
随机推荐
- WEB前端开发记录PS常见操作
1.相邻2个层合并的快捷键方法:先选择上面的一个层,再按ctrl+e. 2.合并一个组内的多个层或组:在该组单击右键,选择“转换为智能对象”,然后可对其进行其它操作,比如:截取该组的为一张图片:ctr ...
- MySQL 修改账号的IP限制条件
今天遇到一个需求:修改MySQL用户的权限,需要限制特定IP地址才能访问,第一次遇到这类需求,结果在测试过程,使用更新系统权限报发现出现了一些问题, 具体演示如下. 下面测试环境为MySQL 5.6. ...
- C# 反射的例子
通过字符串变量访问控件 string t = "textbox1"; TextBox tb = (TextBox)this.GetType().GetField(t, System ...
- Cs231n课堂内容记录-Lecture 8 深度学习框架
Lecture 8 Deep Learning Software 课堂笔记参见:https://blog.csdn.net/u012554092/article/details/78159316 今 ...
- Asp.Net Core 实现服务的批量注册注入
- python selenium2 中的显示等待WebDriverWait与条件判断expected_conditions举例
#coding=utf-8from selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium. ...
- 【Python 22】52周存钱挑战2.0(列表list和math函数)
1.案例描述 按照52周存钱法,存钱人必须在一年52周内,每周递存10元.例如,第一周存10元,第二周存20元,第三周存30元,直到第52周存520元. 记录52周后能存多少钱?即10+20+30+. ...
- Redis学习笔记(2)——Redis的下载安装部署
一.下载Redis Redis的官网下载页上有各种各样的版本,如图 但是官网下载的Redis项目不正式支持Windows.如果需要再windows系统上部署,要去GitHub上下载.我下载的是Redi ...
- JS中的闭包(closure)
JS中的闭包(closure) 闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现.下面就是我的学习笔记,对于Javascript初学者应该是很有用 ...
- Disruptor-架构思维的转变
相对于无锁技术,Disruptor对于架构思维的转变,才是其最大亮点. Pub Event 说到RingBuffer做的队列,通常都说的是“一读一写“,或者“多读一写“.而Disruptor天生是为“ ...