SaltStack入门篇之远程执行和配置管理

一、SaltStack概述

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

salt底层采用动态的连接总线, 使其可以用于编配, 远程执行, 配置管理等等.

多种配置管理工具对比:
Puppet(rubby开发,现在很少使用)
ansible(python开发,轻量级,没有agent,大规模环境下使用ssh会很慢,串行传输)
Saltstack(python开发,远程执行、配置管理、事件驱动基础设施、使用saltcloud可以管理私有云和公有云)

官方文档:<https://docs.saltstack.com/en/getstarted/&gt;
官方提供官方yum源:repo.slatstack.com-->可以使用cobbler自定义yum仓库进行同步
官方安装源:<http://repo.saltstack.com/2016.11.html#rhel&gt;
Saltstack组件:
SaltMaster
SaltMinion
Execution Modules

环境说明:

主机名IP地址说明系统
linux-node1.example.com192.168.56.11模式:masterCentos 7.4
linux-node2.example.com192.168.56.12模式:minionCentos 7.4

二、SaltStack安装

1.安装指定的yum源

[root@linux-node1 ~]# yum install https://repo.saltstack.com/yum/redhat/salt-repo-2016.11-2.el7.noarch.rpm
[root@linux-node2 ~]# yum install https://repo.saltstack.com/yum/redhat/salt-repo-2016.11-2.el7.noarch.rpm 

2.安装salt-master和salt-minion

[root@linux-node1 ~]# yum install -y salt-master
[root@linux-node1 ~]# yum install -y salt-minion
[root@linux-node2 ~]# yum install -y salt-minion

3.修改minion配置并启动

[root@linux-node1 ~]# systemctl start salt-master    #启动salt-master
[root@linux-node1 ~]# vim /etc/salt/minion           #配置salt-minion
master: 192.168.56.11      #可以是主机名需要解析(指定服务端的IP地址),冒号有空格
id:   唯一标识符,可以不配,不配默认就是主机名
[root@linux-node1 ~]# systemctl start salt-minion    #启动salt-minion
[root@linux-node2 salt]# vim minion
master: 192.168.56.11      #可以是主机名需要解析(指定服务端的IP地址),冒号有空格
id:   唯一标识符,可以不配,不配默认就是主机名
[root@linux-node2 salt]# systemctl start salt-minionminion配置中有一个id配置,默认是hostname,如果id配置和hostname不一致会导致无法进行通信,那么当hostname做了修改,或者错误的时候该怎么配置呢?
①关闭salt-minion  
②salt-key -d id  在master上删除minion的id  
③minion上删除pki目录 
④minion上删除minion_id文件
⑤修改完成,启动minion
#此处必须先停掉minion修改,并删除相应的文件,否则会默认地去查找原先的配置,已踩坑#以下是刚装完查看minion_id变成了www.test123.com。进行修改成linux-node2.example.com
[root@linux-node2 salt]# cat minion_id 
www.test123.com
[root@linux-node2 salt]# systemctl stop salt-minion
[root@linux-node2 salt]# rm -rf pki
[root@linux-node2 salt]# rm -rf minion_id 
[root@linux-node2 salt]# systemctl start salt-minion
[root@linux-node2 salt]# cat minion_id 
linux-node2.example.com

4.配置说明

[root@linux-node2 salt]# ll
总用量 124
-rw-r----- 1 root root  2624 9月  15 23:19 cloud
drwxr-xr-x 2 root root     6 9月  16 00:41 cloud.conf.d
drwxr-xr-x 2 root root     6 9月  16 00:41 cloud.deploy.d
drwxr-xr-x 2 root root     6 9月  16 00:41 cloud.maps.d
drwxr-xr-x 2 root root     6 9月  16 00:41 cloud.profiles.d
drwxr-xr-x 2 root root     6 9月  16 00:41 cloud.providers.d
-rw-r----- 1 root root 46034 9月  15 23:19 master
drwxr-xr-x 2 root root     6 9月  16 00:41 master.d
-rw-r----- 1 root root 35101 1月  16 10:29 minion
drwxr-xr-x 2 root root    27 1月  16 11:47 minion.d
-rw-r--r-- 1 root root    23 1月  16 11:45 minion_id
drwxr-xr-x 3 root root    19 1月  16 11:45 pki
-rw-r----- 1 root root 26984 9月  15 23:19 proxy
drwxr-xr-x 2 root root     6 9月  16 00:41 proxy.d
-rw-r----- 1 root root   344 9月  15 23:19 roster说明:
(1)salt-minion首次启动会在/etc/salt/pki/minion目录下生成公钥和秘钥
[root@linux-node2 salt]# ll /etc/salt/pki/minion/
总用量 12
-rw-r--r-- 1 root root  450 1月  16 11:47 minion_master.pub
-r-------- 1 root root 1674 1月  16 11:45 minion.pem
-rw-r--r-- 1 root root  450 1月  16 11:45 minion.pub(2)并且在salt-master的/etc/salt/pki/master/minion_pre中存放了salt-minion的公钥。
[root@linux-node1 ~]# ll /etc/salt/pki/master/minions_pre/
linux-node1.example.com
linux-node2.example.com

5.配置salt-master和slat-minion通信

[root@linux-node1 salt]# salt-key
Accepted Keys:       同意的
Denied Keys:                拒绝的
Unaccepted Keys:            等待同意的
linux-node1.example.com
linux-node2.example.com
Rejected Keys:

同意认证的方法:
分为三种:

[root@linux-node1 salt]# salt-key -A
[root@linux-node1 salt]# salt-key -a 指定id
[root@linux-node1 salt]# salt-key -a 支持通配符
[root@linux-node1 master]# salt-key -a linux*
The following keys are going to be accepted:
Unaccepted Keys:
linux-node1.example.com
linux-node2.example.com
Proceed? [n/Y] Y
Key for minion linux-node1.example.com accepted.
Key for minion linux-node2.example.com accepted.salt-key 命令参数介绍
-L  列出所有
-d 删除指定的支持通配符
-D 删除所有
-A 添加所有
-a 指定添加同意之后生成的文件
pki/
├── master
│   ├── master.pem
│   ├── master.pub
│   ├── minions
│   │   ├── linux-node1.example.com
│   │   └── linux-node2.example.com
│   ├── minions_autosign
│   ├── minions_denied
│   ├── minions_pre
│   └── minions_rejected
└── minion├── minion_master.pub  同意之后master发送公钥├── minion.pem└── minion.pub

三、SaltStack远程执行和配置管理

1.远程执行

第一条命令:
[root@linux-node1 master]# salt '*' test.ping
linux-node2.example.com:True
linux-node1.example.com:True说明:
salt:命令
*:匹配目标,使用通配符
test.ping:模块.方法   
#此处的ping并非ICMP的ping命令,而是master向minion发送了一个包,minion收到了,返回一个True[root@linux-node1 ~]# salt '*' cmd.run 'uptime'
linux-node1.example.com:11:51:47 up 21 days,  5:57,  2 users,  load average: 0.04, 0.03, 0.05
linux-node2.example.com:11:51:47 up 12 days,  6:26,  2 users,  load average: 0.00, 0.03, 0.05
[root@linux-node1 ~]# salt '*' cmd.run 'w'
linux-node1.example.com:11:52:11 up 21 days,  5:58,  2 users,  load average: 0.03, 0.02, 0.05USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHATroot     pts/2    192.168.56.1     06Jan18  6:51   3.27s  3.27s -bashroot     pts/3    192.168.56.1     06Jan18  3.00s  6:17   0.46s /usr/bin/python /usr/bin/salt * cmd.run w
linux-node2.example.com:11:52:11 up 12 days,  6:26,  2 users,  load average: 0.00, 0.03, 0.05USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHATroot     pts/1    192.168.56.1     Mon10   21:59m  0.28s  0.28s -bashroot     pts/3    192.168.56.1     06Jan18  6:59   4.82s  0.02s -bash
[root@linux-node1 ~]# salt '*' cmd.run 'df -h'
linux-node2.example.com:Filesystem               Size  Used Avail Use% Mounted on/dev/mapper/centos-root   18G   17G  1.1G  95% /devtmpfs                 905M     0  905M   0% /devtmpfs                    916M   12K  916M   1% /dev/shmtmpfs                    916M   41M  876M   5% /runtmpfs                    916M     0  916M   0% /sys/fs/cgroup/dev/sda1                497M  171M  326M  35% /boottmpfs                    184M     0  184M   0% /run/user/0/dev/loop0               4.1G  4.1G     0 100% /mnt
linux-node1.example.com:Filesystem               Size  Used Avail Use% Mounted on/dev/mapper/centos-root   18G   11G  7.2G  60% /devtmpfs                 905M     0  905M   0% /devtmpfs                    916M   28K  916M   1% /dev/shmtmpfs                    916M   57M  860M   7% /runtmpfs                    916M     0  916M   0% /sys/fs/cgroup/dev/sda1                497M  171M  326M  35% /boottmpfs                    184M     0  184M   0% /run/user/0[root@linux-node1 ~]# netstat -tulnp|grep minion
minion不需要监听端口,说明minion需要主动去链接master,master监听端口为4505、4506
[root@linux-node1 ~]# netstat -tulnp|grep python
tcp        0      0 0.0.0.0:4505            0.0.0.0:*               LISTEN      37039/python        
tcp        0      0 0.0.0.0:4506            0.0.0.0:*               LISTEN      37045/python       #master和minion默认使用一个叫zeroMQ进行并行通信,zeroMQ属于底层(传输层)的消息队列,
#相当于一个发布与订阅系统,比如你订了一个教室听课,那么所有订了此间课室的人都能听到老师的课程。[root@linux-node1 ~]# lsof -ni:4505
COMMAND     PID USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
salt-mast 37039 root   16u  IPv4 3394584      0t0  TCP *:4505 (LISTEN)
salt-mast 37039 root   18u  IPv4 3412804      0t0  TCP 192.168.56.11:4505->192.168.56.12:43126 (ESTABLISHED)
salt-mast 37039 root   19u  IPv4 3412811      0t0  TCP 192.168.56.11:4505->192.168.56.11:38262 (ESTABLISHED)
salt-mini 39623 root   27u  IPv4 3412810      0t0  TCP 192.168.56.11:38262->192.168.56.11:4505 (ESTABLISHED)

查看4505端口,我们可以发现salt-minion使用一个随机端口通过4505端口与salt-master通信,master使用4505端口发送指定到salt-minion上进行执行。而4606端口是用于接收数据的返回,用于zeroMQ的请求与响应的系统。

可以通过date命令查看salt的并行通信,可以看到是同时返回
[root@linux-node1 ~]# salt '*' cmd.run 'date'
linux-node2.example.com:Tue Jan 16 12:01:52 CST 2018
linux-node1.example.com:Tue Jan 16 12:01:52 CST 2018

2.配置管理

  • (1)saltstack是使用YAML的格式作为管理文件的格式,下面的YAML的样例:
    YAML样例:
    house:
    family:
    name: Doe
    parents:- John- Jane
    children:- Paul- Mark- Simone
    address:
    number: 34
    street: Main Street
    city: Nowheretown
    zipcode: 12345
  • (2)YAML的规则:
    ①缩进表示层级关系,默认缩进是2个空格、4个空格、6个空格
    ②冒号后面有个空格,以冒号结尾可以有空格,可以无空格
    ③短横线代表一个列表,短横线后面有个空格

  • (3)定义yaml文件放的位置:salt内置一个fileserver,在master文件配置:file_roots
[root@linux-node1 ~]# vim /etc/salt/master     #定义yaml文件放的位置,base环境是必备的
file_roots:base:- /srv/salt/basedev:- /srv/salt/devtest:- /srv/salt/testprod:- /srv/salt/prod
[root@linux-node1 ~]# mkdir -p /srv/salt/{base,dev,test,prod}
[root@linux-node1 ~]# systemctl restart salt-master
[root@linux-node1 ~]# cd /srv/salt/base/
[root@linux-node1 base]# mkdir web
[root@linux-node1 web]# vim apache.sls    #编写安装apache的YAML文件
apache-install:pkg.installed:---------->模块pkg,方法installed,会匹配操作系统进行选择安装的方法- name: httpd--------->装的包的名称apache-service:----------->id要唯一service.running:-------->状态模块service,running为模块的方法- name: httpd--------->管理服务的名称- enable: True-------->设置开机自动启动[root@linux-node1 ~]# salt 'linux-node2.example.com' state.sls web.apache
#如果apache.sls的位置是在prod目录下,需要在后面增加saltenv=prod
#salt 'linux-node2.example.com' state.sls web.apache saltenv=prod实现自动化安装,需要写一个top.sls
[root@linux-node1 base]# pwd
/srv/salt/base
[root@linux-node1 base]# vim top.sls    #必须在base环境下写
base:'linux-node1.example.com':- web.apache'linux-node2.example.com':- web.apache
****************************
如果只有一个任务在全部机子上执行,也可以:
base:'*'- web.apache
****************************
[root@linux-node1 ~]# salt '*' state.highstate   #去top.sls读取,*代表通知哪些主机salt '*' state.highstate test=True   #在不想影响当前主机的运行情况,可以使用test=True 进行预测试

转载于:https://blog.51cto.com/jinlong/2061645

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/284475.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ArgoCD 用户管理、RBAC 控制、脚本登录、App 同步

命令行登录参考&#xff1a;argocd 登录登出[1]登录&#xff1a;echo y | argocd login argocd-server.argocd.svc.cluster.local --password argoadmin.smallsoup --username admin登出&#xff1a;argocd logout argocd-server.argocd.svc.cluster.local创建用户、授权创建用…

敏捷需要重构吗?不需要吗?

在传统的Scrum中&#xff0c;Sprint的长度为一个月&#xff0c;现在一般时间更短。这意味着团队就得在项目刚开始的两周或者一个月内交付完成的软件。软件来自于产品负责人的backlog。它必须由特征组成。要正确的做到Scrum&#xff0c;我们不能做基础架构之类的东西&#xff0c…

【GlobalMapper精品教程】005:影像拼接与裁切(分幅)作业案例教程

本文讲述Globalmapper影像拼接与裁剪案例教程。 文章目录 一、影像的拼接(1)针对少量影像的拼接(2)针对大量影像的拼接二、影像的裁剪一、影像的拼接 (1)针对少量影像的拼接 如果影像数量比较小,可以通过加载→导出的方式进行拼接。 如下图所示,案例数据(配套实验数…

元宇宙行业深度研究报告:为什么元宇宙是下一代互联网?

目录 1、什么是元宇宙&#xff1f;为什么元宇宙是下一代互联网 1.1、 元宇宙&#xff1a;下一代沉浸式互联网 1.1.1、超越虚拟与现实的科幻畅想&#xff1a;元宇宙概念来源 1.1.2、新技术由点突破连接成面&#xff0c;移动互联网继承者的孕育 1.1.3、元宇宙的五大要素&…

细节总结(一)

self.XXX与_XXX的区别 通过self.XXX得到的数据相当于调用get函数取值,等价于[self XXX];而通过_XXX获取的是自己的实例变量,直接对变量进行操作,并未调用get函数。所以,通过懒加载方式初始化的变量只能通过self.XXX调用,否则可能会存在未初始化的问题。self.xxx是对属性的访问;…

redis 安装错误 jemalloc.h: No such file or directory

为什么80%的码农都做不了架构师&#xff1f;>>> 错误描述 [rootmysql-rtb-slave redis-4.0.1]# make && make install cd src && make all make[1]: Entering directory /usr/local/src/redis-4.0.1/srcCC Makefile.dep make[1]: Leaving director…

OAuth,JWT ,OIDC你们搞得我好乱啊

hi&#xff0c;这里是桑小榆&#xff0c;这次分享的不是生活文&#xff0c;而是技术文。基于OAuth2.0协议的授权认证&#xff0c;初次接触授权认证知识的时候&#xff0c;出现了不少热门名词&#xff0c;“OAuth”&#xff0c;“JWT”&#xff0c;“OIDC”&#xff0c;这简直让…

MyEclipse快捷键大全

存盘 Ctrls(肯定知道) 注释代码 Ctrl/ 取消注释 Ctrl\(Eclipse3已经都合并到Ctrl/了) 代码辅助 Alt/ 快速修复 Ctrl1 代码格式化 CtrlShiftf 整理导入 CtrlShifto 切换窗口 Ctrlf6 <可改为ctrltab方便> ctrlshiftM 导入未引用的包 ctrlw 关闭单个窗口 F3 跳转到类、变量的…

软件测试技术第二次作业——程序错误的判断

在做作业之前我们首先要明确软件测试过程中的几个名词&#xff1a; Fault&#xff1a;在软件测试中&#xff0c;fault是指程序中静态的缺陷&#xff0c;也就是指在程序中存在的编程错误。 Error&#xff1a;在软件测试中&#xff0c;error是指由于程序中存在的fault而产生的不正…

【GlobalMapper精品教程】006:Excel等表格(.xls)或文本(.txt .csv)坐标文件生成矢量点

【拓展阅读】: 【QGIS入门实战精品教程】4.5:QGIS打开Excel中的点坐标,并生成矢量文件 【ArcGIS微课1000例】0022:ArcGIS点(点坐标)自动连成线操作案例教程 【ArcGIS风暴】ArcGIS 10.2导入Excel数据X、Y坐标(经纬度、平面坐标),生成Shapefile点数据图层 【ArcGIS风暴】…

Java编程思想 学习笔记1

一、对象导论 1.抽象过程   Alan Kay曾经总结了第一个成功的面向对象语言、同时也是Java所基于的语言之一的Smalltalk的五个基本特性&#xff0c;这些特性表现了纯粹的面向对象程序设计方式   1&#xff09;万物皆对象。   2&#xff09;程序是对象的集合&#xff0c;它们…

不只是日志收集,项目监控工具Sentry的安装、配置、使用

前言上一篇文章介绍了ExceptionLess这个日志收集系统&#xff1a;ExceptionLess的安装、配置、使用由于ExceptionLess官方提供的客户端只有.Net/.NetCore平台和js的&#xff0c;本文继续介绍另一个日志收集系统&#xff1a;SentrySentry 是一个实时事件日志记录和聚合平台。&am…

64个数据分析常用术语

导读&#xff1a;本篇文章&#xff0c;我们来讲讲数据分析常用语。 内容综合整理自网络 01 绝对数和相对数 绝对数&#xff1a;是反应客观现象总体在一定时间、一定地点下的总规模、总水平的综合性指标&#xff0c;也是数据分析中常用的指标。比如年GDP&#xff0c;总人口等等。…

redis 的bitmap 开源包 bitmapist的应用

2019独角兽企业重金招聘Python工程师标准>>> 原理&#xff1a;http://my.oschina.net/u/1458120/blog/545224 bitmap包&#xff1a;https://github.com/Doist/bitmapist 要求redis> 2.6.0 bitmapist-master.zip 安装自己下载解压 python setup.py install &…

Django Views(视图函数)

http请求中产生两个核心对象&#xff1a; http请求&#xff1a;HttpRequest对象 http响应&#xff1a;HttpResponse对象 所在位置&#xff1a;django.http 之前我们用到的参数request就是HttpRequest 检测方法&#xff1a;isinstance(request,HttpRequest) 1 HttpRequest对象…

Android 4 +https(如何启动TLS1 1 and TLS1 2)

之前用的网络请求框架是鸿洋的OkHttpUtils&#xff0c;网络请求在5.0手机上使用https没有问题&#xff0c;但是最近突然使用了一个4.4的系统&#xff0c;就报错SSLException ....咋地咋地 然后 我们的副总给我们找一个博客&#xff0c;如何解决4.系统出现的这个问题&#xff0…

massCode 一款优秀的开源代码片段管理器

本文将介绍一款适合程序员使用的个人代码片段管理工具 massCode[1]。massCode小时候&#xff0c;也许我们每个人都会被老师要求有一个到处摘录优美句子段落的作文素材本 —— 采蜜集。不可否认&#xff0c;这对我们的写作水平的提高确实有很大的帮助。对开发人员来说当然也需要…

【ArcGIS Pro微课1000例】0021:Win10系统ArcGIS Pro3.0.1安装教程(附ArcGIS Pro下载)

本文讲解Win10系统上ArcGIS Pro3.0.1安装教程,附软件包下载。 文章目录 一、 软件安装步骤1. 安装.net Runtime 62. 安装ArcGIS Pro3. 安装中文语言4. 删除代理二、软件下载地址一、 软件安装步骤 [软件名称]: ArcGIS Pro 3.0.1 [软件大小]:4.33GB [安装环境]: Win 11/Win …

iOS逆向工程——非越狱调试

其实iOS的逆向分析业界已经十分成熟了&#xff0c;网上也有许多有趣的尝试(一步一步实现iOS微信自动抢红包(非越狱)。本文着重于如何在非越狱机器上进行调试&#xff0c;出于学习及总结的目的&#xff0c;记录于此。 本文以破解游戏梦幻西游为例&#xff0c;逐步讲解整个调试流…