SaltStack--快速入门_梅坞茶坊的博客-程序员秘密_saltstack

技术标签: 服务器  

SaltStack--快速入门

saltstack快速入门#

saltstack介绍#

Salt,一种全新的基础设施管理方式,部署轻松,在几分钟内可运行起来,扩展性好,很容易管理上万台服务器,速度够快,服务器之间秒级通讯

主要功能
远程执行
配置管理
Stalstack官方文档

Saltstack原理#

Salt使用server-agent通信模型,服务端组件被称为Salt masteragent被称为Salt minion
Salt master主要负责向Salt minions发送命令,然后聚合并显示这些命令的结果。一个Salt master可以管理多个minion系统
Salt serverSalt minion通信的连接由Salt minion发起,这也意味着Salt minion上不需要打开任何传入端口(从而减少攻击)。Salt server使用端口45054506,必须打开端口才能接收到访问连接

  • Publisher (端口4505)所有Salt minions都需要建立一个持续连接到他们收听消息的发布者端口。命令是通过此端口异步发送给所有连接,这使命令可以在大量系统上同时执行。
  • Request Server (端口4506)Salt minios根据需要连接到请求服务器,将结果发送给Salt master,并安全地获取请求的文件或特定minion相关的数据值(称为Salt pillar)。连接到这个端口的连接在Salt masterSalt minion之间是1:1(不是异步)。

复制代码

[[email protected] ~]# lsof -i:4505
COMMAND     PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
salt-mast 81121 root   16u  IPv4 304019      0t0  TCP *:4505 (LISTEN)
salt-mast 81121 root   18u  IPv4 304082      0t0  TCP salt-master:4505->salt-minion03:37240 (ESTABLISHED)
salt-mast 81121 root   19u  IPv4 307610      0t0  TCP salt-master:4505->salt-minion01:47804 (ESTABLISHED)
salt-mast 81121 root   20u  IPv4 307611      0t0  TCP salt-master:4505->salt-minion02:58594 (ESTABLISHED)

复制代码

快速安装#

1.1 配置 yum 仓库

复制代码

# 使用官方自带yum
[[email protected] ~]# yum install https://repo.saltstack.com/yum/redhat/salt-repo-latest.el7.noarch.rpm
# 或者使用阿里云的yum(建议使用阿里云的,速度快一点)
[[email protected] ~]# yum -y install https://mirrors.aliyun.com/saltstack/yum/redhat/salt-repo-latest-2.el7.noarch.rpm
[[email protected] ~]# sed -i "s/repo.saltstack.com/mirrors.aliyun.com\/saltstack/g" /etc/yum.repos.d/salt-latest.repo
[[email protected] ~]# yum clean all
[[email protected] ~]# yum makecache

复制代码

1.2 安装Master,并启动服务

[[email protected] ~]# yum -y install salt-master
[[email protected] ~]# systemctl enable salt-master
[[email protected] ~]# systemctl start salt-master

1.3 安装 Salt-Minion 指向 Salt-Master 网络地址

复制代码

[[email protected] ~]# yum -y install salt-minion
# 可以使用主机名,也可以使用IP地址
[[email protected] ~]# cp /etc/salt/minion{,.back}
[[email protected] ~]# sed -i '/#master: /c\master: salt-master' /etc/salt/minion
[[email protected] ~]# systemctl enable salt-minion
[[email protected] ~]# systemctl start salt-minion

复制代码

SaltStack认证方式#

Salt 的数据传输是通过 AES 加密,Master 和 Minion 之前在通信之前,需要进行认证。
Salt 通过认证的方式保证安全性,完成一次认证后,Master 就可以控制 Minion 来完成各项工作了。

1. minion 在第一次启动时候,会在 /etc/salt/pki/minion/ 下自动生成 minion.pem(private key) 和 minion.pub(public key), 然后将 minion.pub 发送给 master
2. master 在第一次启动时,会在 /etc/salt/pki/master/ 下自动生成 master.pem 和 master.pub ;并且会接收到 minion 的 public key , 通过 salt-key 命令接收 minion public key, 会在 master 的 /etc/salt/pki/master/minions目录下存放以 minion id 命令的 public key ;验证成功后同时 minion 会保存一份 master public key 在 minion 的 /etc/salt/pki/minion/minion_master.pub里。

Salt认证原理总结

minion将自己的公钥发送给master
master认证后再将自己的公钥也发送给minion端

Master端认证示例

1)根据上面提到的认证原理,先看下未认证前的masterminionpki目录

复制代码

# master上查看
[[email protected] ~]# tree /etc/salt/pki/
/etc/salt/pki/
├── master
│   ├── master.pem
│   ├── master.pub
│   ├── minions
│   ├── minions_autosign
│   ├── minions_denied
│   ├── minions_pre
│   │   └── salt-minion01
│   └── minions_rejected
└── minion

# minion上查看
[[email protected] ~]# tree /etc/salt/pki/
/etc/salt/pki/
├── master
└── minion
    ├── minion.pem
    └── minion.pub

复制代码

2)salt-key命令解释:

复制代码

[[email protected] ~]# 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自动接受请求认证(master上配置 /etc/salt/master)
auto_accept: True

复制代码

3)salt-key认证

复制代码

#列出当前所有的key
[[email protected] ~]# salt-key -L 
Accepted Keys:
Denied Keys:
Unaccepted Keys:
salt-minion01
Rejected Keys:

#添加指定minion的key
[[email protected] ~]# salt-key -a salt-minion01 -y
The following keys are going to be accepted:
Unaccepted Keys:
salt-minion01
Key for minion salt-minion01 accepted.
#添加所有minion的key
[[email protected] ~]# salt-key -A -y

[[email protected] ~]# salt-key -L 
Accepted Keys:
salt-minion01
Denied Keys:
Unaccepted Keys:
Rejected Keys:

复制代码

4)上面认证完成后再次查看masterminionpki目录

复制代码

# master上
[[email protected] ~]# tree /etc/salt/pki/
/etc/salt/pki/
├── master
│   ├── master.pem
│   ├── master.pub
│   ├── minions
│   │   └── salt-minion01
│   ├── minions_autosign
│   ├── minions_denied
│   ├── minions_pre
│   └── minions_rejected
└── minion

# minion上
[[email protected] ~]# tree /etc/salt/pki/
/etc/salt/pki/
├── master
└── minion
    ├── minion_master.pub
    ├── minion.pem
    └── minion.pub

复制代码

Saltstack远程执行#

远程执行是 Saltstack 的核心功能之一。主要使用 salt 模块批量给选定的 minion 端执行相应的命令,并获得返回结果。

1、判断 salt 的 minion 主机是否存活

复制代码

[[email protected] ~]# salt '*' test.ping
salt-minion02:
    True
salt-minion03:
    True
salt-minion01:
    True

# salt saltstack自带的一个命令
# * 表示目标主机,这里表示所有目标主机
# test.ping test是saltstack中的一个模块,ping则是这个模块下面的一个方法

复制代码

2、saltstack使用 cmd.run模块远程执行shell命令

#在指定目标minion节点运行uptime命令
[[email protected] ~]# salt 'salt-minion02' cmd.run 'uptime'
salt-minion02:
     18:13:08 up 28 min,  2 users,  load average: 0.00, 0.04, 0.13

Saltstack配置管理#

Salt 通过State模块来进行文件的管理;通过YAML语法来描述,后缀是.sls的文件

1、了解 YAML 参考:http://docs.saltstack.cn/topics/yaml/index.html

remove vim:
  pkg.removed:
    - name: vim
  • 带有ID和每个函数调用的行都以冒号(:)结束。
  • 每个函数调用在ID下面缩进两个空格。
  • 参数作为列表传递给每个函数。
  • 每行包含函数参数的行都以两个空格缩进开头,然后是连字符,然后是一个额外的空格。
  • 如果参数采用单个值,则名称和值位于由冒号和空格分隔的同一行中。
  • 如果一个参数需要一个列表,则列表从下一行开始,并缩进两个空格

 2、配置sals ,定义环境 参考文档

复制代码

# 定义环境目录
[[email protected] ~]# vim /etc/salt/master
file_roots:
  base:
    - /srv/salt/base
  dev:
    - /srv/salt/dev
  prod:
    - /srv/salt/prod
# 创建上面定义的目录
[[email protected] ~]# mkdir -p /srv/salt/{base,dev,prod}
# 重启服务
[[email protected] ~]# systemctl restart salt-master

复制代码

3、编写第一个sls文件

复制代码

# 在base环境下编写第一个安装apache的sls文件
[[email protected] ~]# cd /srv/salt/base/
[[email protected] base]# cat apache.sls 
apache-install:
  pkg.installed:
    - name: httpd

apache-service:
  service.running:
    - name: httpd
    - enable: True

# 在dev环境下编写一个安装ftp的sls文件
[[email protected] base]# cd /srv/salt/dev/
[[email protected] dev]# cat vsftpd.sls 
vsftpd-install:
  pkg.installed:
    - name: vsftpd

vsftpd-service:
  service.running:
    - name: vsftpd
    - enable: True

复制代码

4、使用salt命令的state状态模块让minion应用配置

复制代码

# 让所有的minion都安装apache(由于salt默认的环境就是base,所以可以直接在后面指定调用的apache.sls文件,不要后缀sls)
[[email protected] ~]# salt '*' state.sls apache

# 让所有的minion都安装vsftpd(saltenv指定环境)
[[email protected] ~]# salt '*' state.sls vsftpd saltenv=dev

复制代码

5、使用salt的高级状态使不同主机应用不同的配置

复制代码

# topfile入口文件只能放在base环境
[[email protected] ~]# cat /srv/salt/base/top.sls 
base:
  'salt-minion01':
    - apache
  'salt-minion03':
    - apache
dev:
  'salt-minion02':
    - vsftpd
  'salt-minion03':
    - vsftpd

复制代码

6、使用salt命令执行高级状态,会将top.sls当做入口文件,进行调用

# 将高级状态应用到所有主机
[[email protected] ~]# salt '*' state.highstate

Saltstack常用配置#

1、Salt Master配置
Salt Master端的配置文件/etc/salt/master,常用配置如下:

复制代码

interface:     //指定bind 的地址(默认为0.0.0.0)
publish_port: //指定发布端口(默认为4505)
ret_port: //指定结果返回端口,  与minion配置文件中的master_port对应(默认为4506)
user: //指定master进程的运行用户,如果调整, 则需要调整部分目录的权限(默认为root)
timeout: //指定timeout时间,  如果minion规模庞大或网络状况不好,建议增大该值(默认5s)
keep_jobs: //minion执行结果返回master, master会缓存到本地的cachedir目录,该参数指定缓存多长时间,可查看之间执行结果会占用磁盘空间(默认为24h)
job_cache: //master是否缓存执行结果,如果规模庞大(超过5000台),建议使用其他方式来存储jobs,关闭本选项(默认为True)
file_recv : //是否允许minion传送文件到master 上(默认是Flase)
file_roots: //指定file server目录,  默认为:
    file_roots:    
       base:    
        - /srv/salt     
pillar_roots : //指定pillar 目录,  默认为:
    pillar_roots:     
      base:     
        - /srv/pillar     
log_level: //日志级别
支持的日志级别有'garbage', 'trace', 'debug', info', 'warning', 'error', ‘critical ’ ( 默认为’warning’)

复制代码

2、Salt Minion端的配置文件/etc/salt/minion,常用配置如下:

复制代码

master: //指定master 主机(默认为salt)
master_port: //指定认证和执行结果发送到master的哪个端口,  与master配置文件中的ret_port对应(默认为4506)
id: //指定本minion的标识, salt内部使用id作为标识(默认为主机名)
user: //指定运行minion的用户.由于安装包,启动服务等操作需要特权用户, 推荐使用root( 默认为root)
cache_jobs : //minion是否缓存执行结果(默认为False)
backup_mode: //在文件操作(file.managed 或file.recurse) 时,  如果文件发送变更,指定备份目录.当前有效
providers : //指定模块对应的providers, 如在RHEL系列中, pkg对应的providers 是yumpkg5
renderer: //指定配置管理系统中的渲染器(默认值为:yaml_jinja )
file_client : //指定file clinet 默认去哪里(remote 或local) 寻找文件(默认值为remote)
loglevel: //指定日志级别(默认为warning)
tcp_keepalive : //minion 是否与master 保持keepalive 检查, zeromq3(默认为True)

复制代码

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_32421489/article/details/110927945

智能推荐

UML图(一)_朗福德_豪的博客-程序员秘密

前言进入UML图的学习阶段,通过视频教程和UML相关书籍对UML有了一个初步的了解总结了一个思维导图第一版。正文第一遍的导图画的就是一个整体的认识,后期用图来图例来具体说明各部分的关系和意义。UML 途中的4种关系表示方法,途中四种不同的联接线表示四种关系结束由于只是看了理论来总结出来可能存在一些偏颇的地方,下来就是要画图了,画图过程种会不断的进行改进的。...

c语言 八字排盘_八字排盘的c语言算法_段small誉的博客-程序员秘密

#include<stdio.h>#include<math.h>int main(){ int runnian(int y); int tianshu(int y, int m, int d); int wnl(int y, int m, int d); int year, month, date, hour, minute,shichen; float x, r=0; long long int Days,F1,F; int Bazi[2][4]; scan

Windows 安全模型_逆枫゛的博客-程序员秘密

简介Windows 安全模型安全场景:创建一个文件驱动程序安全责任行动指南和资源本文提供关于为 Microsoft Windows 家族操作系统编写安全的内核模式驱动程序的信息。其中描述了如何将 Windows 安全模型应用于驱动程序,并解释驱动程序作者必须采取哪些措施来确保其设备的安全性。简介Windows 安全模型基于安全对象。操

tomcat使用指南_cataalina_pid 获取不对_chy1984的博客-程序员秘密

目录tomcat简介windows下使用tomcatlinux下使用tomcat常见问题tomcat启动失败win tomcat 窗口中文乱码linux tomcat 时区不对tomcat启动时报错 too low setting for -Xss tomcat简介tomcat是一个开源、免费、轻量级的web服务器,只支持部分JavaEE规范(Servlet、JSP),适合部署中小型java web项目。tomcat、nginx、apache都具有处理静态资源的能力,但tomcat处理静态

C语言中,if语句后面加return 的用法的疑问_c# if 如何,然后?最后return_劝君更尽一杯酒的博客-程序员秘密

有这么一段代码:void xxx(){    if(rs_buf[0]=='$')    {        for(i=0;i        {            j=getuartdat();            if(j            {                rs_buf=(alt_u16)j;                

随便推点

张华130702010005第二次作业_weixin_34186128的博客-程序员秘密

2.9、设有如下语句,请用相应的谓词公式分别把它们表示出来:(1)有的人喜欢梅花,有的人喜欢菊花,有的人既喜欢梅花又喜欢菊花。解:定义谓词P(x):x 是人L(x,y):x 喜欢y( x )(P(x)→L(x, 梅花)∨L(x, 菊花)∨L(x, 梅花)∧L(x, 菊花))(2)有的人每天下午都去打篮球。解:定义谓词P(x):x 是人B(x):x 打篮球A(y):y 是下午...

Matlab GUI,activex控件,播放视频,菜单,打开文件对话框_matlab gui activex_houyanhua1的博客-程序员秘密

guide  (代码: 2\playMTV.m)% 窗体打开前,执行该函数----------------------------------------------------function playMTV_OpeningFcn(hObject, eventdata, handles, varargin)handles.output = hObject;pos=[0 0 0 0

Ubuntu中修改输入法的快捷键_ubuntu更改输入法快捷键_秘密果酱的博客-程序员秘密

最初在首选项里修改改了过后还是不对后来在设置-设备-键盘里找到设置切换输入法的快捷键在这里就可以修改啦

vue json-viewer codemirror-json格式化_心向阳光,便是晴天的博客-程序员秘密

1.安装codemirrorhttps://www.npmjs.com/package/vue-codemirror2.下面是自己写的例子main.js里面引入// 代码输入框import VueCodemirror from 'vue-codemirror'import 'codemirror/lib/codemirror.css'Vue.use(VueCodemir...

matlab 粘连分割代码,【求助】图像中粘连字符切分代码,求注释!!!_岁月静好夏雨嫣然的博客-程序员秘密

该楼层疑似违规已被系统折叠隐藏此楼查看此楼%=== 依然是切分 ===%Mark=Mark+abs(I(j+1,i)-I(j,i)); % 检测是否通过笔划j=j+1;endSegY=[SegY j-1]; % 第一次切分截止处if (j==38)PXR1=[PXR1 i];PXR2=[PXR2 i];else...

ruoyi 页面跳转_前端手册_weixin_39574050的博客-程序员秘密

# 前端手册# 前端组件若依封装了一些常用的JS组件方法。 名称 代码 介绍 表格 $.table 表格封装处理表格树 $.treeTable 表格树封装处理表单 $.form 表单封装处理弹出层 $.modal 弹出层封装处理操作 $.operate 操作封装处理校验 $.validate 校验封装处理树插件 $.tree 树插件封装处理通用方法 $.common 通用方法封装处理# 通用方法支...

推荐文章

热门文章

相关标签