安装saltstack

https://www.cnblogs.com/agnewee/p/6487262.html

官方资料:https://docs.saltstack.com/en/latest/ref/configuration/index.html

官网资料:https://repo.saltstack.com/#rhel

yum install https://repo.saltstack.com/py3/redhat/salt-py3-repo-latest.el7.noarch.rpm

 

准备工作:

yum -y install libffi-devel zlib-devel bzip2-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel


WARNINGRedhat Python 3 support requires that EPEL be previously installed. The Python 3 packages now comes with Python 3.6

安装最新版本。更新安装最新版本,即使它是一个新的主要版本。

  1. 运行以下命令来安装SaltStack存储库和密钥:
    sudo yum install https://repo.saltstack.com/py3/redhat/salt-py3-repo-latest.el7.noarch.rpm
  2. sudo yum clean expire-cache

  3. 安装盐仆从、盐母或其他盐组件:
    • sudo yum install salt-master
    • sudo yum install salt-minion
    • sudo yum install salt-ssh
    • sudo yum install salt-syndic
    • sudo yum install salt-cloud
    • sudo yum install salt-api
  4. (仅升级)重新启动所有升级的服务,例如:
    sudo systemctl restart salt-minion
pip install -U halite
pip install cherrypy
pip install paste
pip install gevent #如果装不上就先安装saltstack之后再装它
pip install pyopenssl

  

分别安装python2 python3版本的pip

curl https://bootstrap.pypa.io/get-pip.py -o get-pip.pypython get-pip.pypython3  get-pip.py[root@localhost halite-master]# pip --version
pip 19.0.3 from /usr/lib/python2.7/site-packages/pip (python 2.7)[root@localhost halite-master]# pip3 --version
pip 19.0.3 from /usr/local/python/lib/python3.7/site-packages/pip (python 3.7)

  

安装saltstack

yum install salt-master salt-minion salt-api -y
[root@localhost ~]# vim /etc/salt/master
external_auth:pam:testuser:            //稍后创建此用户- .*- '@runner'halite:  #以下内容需要手动添加level: 'debug'server: 'cherrypy'host: '0.0.0.0'port: '8080'cors: Falsetls: Truecertpath: '/etc/pki/tls/certs/localhost.crt'keypath: '/etc/pki/tls/certs/localhost.key'pempath: '/etc/pki/tls/certs/localhost.pem'[root@localhost ~]# useradd testuser
[root@localhost ~]# passwd testuser

 

二、 saltstack的配置

  1、 服务端的配置

    1)     #更新主控关键项

vim /etc/salt/master
#绑定Master通信IP
interface: 192.168.1.205#自动认证,避免手动运行salt-key来确认证书信息
auto_accept: True#指定Saltstack文件根目录
file_roots  base:-/srv/salt
systemctl restart salt-master
systemctl  start salt-master
systemctl  enable salt-master
systemctl  start salt-api
systemctl  enable salt-api

  2、 被控制端的配置

vim /etc/salt/minion
#指定master主机IP
master: 192.168.1.205#修改被控主机识别id,建议使用操作系统主机名来配置
id: node1                              //另外一台为node2
systemctl  start salt-minion
systemctl  enable salt-minion

三、校验安装结果

  通过test模块的ping的方法,可以确认服务器与被控端是否建议信任关系。

  #ping单个客户

sudo salt ‘node1’ test.ping
sudo salt ‘node2’ test.ping

 

  #ping所有被控端

salt '*' test.ping

 

 

master配置文件:

interface: 0.0.0.0      # 默认值:0.0.0.0(所有的网络地址接口); 绑定到本地的某个网络地址接口publish_port: 4505     # ; 设置master与minion的认证通信端口user: root            # ;运行salt进程的用户max_open_files: 100000   #salt-master可以打开的最大句柄数worker_threads: 5       #启动用来接收或应答minion的线程数ret_port: 4506         #master用来发送命令或者接收minions的命令执行返回信息pidfile: /var/run/salt-master.pid  #指定master的pid文件位置root_dir: /         # 该目录为salt运行的根目录,改变它可以使salt从另外一个目录开始运行,好比chrootpki_dir: /etc/salt/pki/master  # 这个目录是用来存放pki认证秘钥cachedir: /var/cache/salt/master #  用来存放缓存信息,salt工作执行的命令信息verify_env: True  # 在启动验证和设置权限配置目录keep_jobs: 24   #设置保持老的工作信息的过期时间,单位小时job_cache: True   #设置master维护的工作缓存,这是一个很好的功能,当你的Minons超过5000台时,他将很好的承担这个大的架构,关闭这个选项,之前的工作执行以及工作系统将无法被利用,一般不推荐关掉改选项,开启改选项将会是很明智的,他将使master获得更快的IO系统timeout: 5  #默认值:5 ;master执行命令的可以接受的延迟时间output: nested   #默认值:nested ;salt命令的输出格式sock_dir: /var/run/salt/master  #默认值:/var/run/salt/master ; 指定unix socket主进程通信的socket创建路径minion_data_cache: True  # 默认值:True ;minion data cache是关于minion信息存储在master上的参数,这些信息主要是pillar 和 grains数据.这些数据被缓存在cachedir定义的目录下的minion目录下以minion名为名的目录下并且预先确定哪些minions将从 执行回复include: /etc/salt/extra_config #默认值:/etc/salt/extra_config ;包含其他路径上的配置文件

 Security settings 

#open_mode: False  #open_mode是一个危险的安全特性,当master遇到pki认证系统,秘钥混淆和身份验证失效时,打开open_mode,master将会接受 所有的身份验证。这将会清理掉pki秘钥接受的minions。通常情况下open_mode不应该被打开,它只适用于短时间内清理pki keys,若要打开它,可将值调整为True#auto_accept: False #这个设置将会使master自动接受所有发送公钥的minions#autosign_file: /etc/salt/autosign.conf #如果autosign_file的值被指定,那么autosign_file将会通过该输入允许所有的匹配项,首先会搜索字符串进行匹配,然后通过正则表达式进行匹配。这是不安全的

#client_acl: # 默认值:{} ;开启对系统上非root的系统用户在master上执行特殊的模块,这些模块名可以使用正则表达式进行表示

1
2
3
4
client_acl:
  larry:
    test.ping
    - network.*

#client_acl_blacklist  #默认值:{} ;黑名单用户或模块,表示所有非sudo用户以及root都无法通过cmd这个模块执行命令,默认情况改配置是完全禁用的

1
2
3
4
5
6
client_acl_blacklist:
  users:
    - root
    '^(?!sudo_).*$'   #  all non sudo users
  modules:
    - cmd

#external_auth:  #默认值:{} ; salt的认证模块采用外部的认证系统用来做认证和验证用户在salt系统中的访问区域

1
2
3
  pam:
    fred:
      test.*
#file_recv: False #默认值:False ; 允许minions推送文件到master上,这个选项默认是禁用的,出于安全考虑#file_recv_max_size: 100 # 默认值:100 设置一个hard-limit文件的大小,可以推到master。

  

State System settings    

state_top: top.sls #默认值:top.sls ; 状态系统使用一个入口文件告诉minions在什么环境下使用什么模块,这个状态入口文件被定义在基础环境的相对根路径下renderer: yaml_jinja #默认值:yaml_jinja ;使用渲染器用来渲染minions的状态数据failhard: False #默认值:False ; 设置一个全局的failhard表示,当单个的状态执行失败后,将会通知所有的状态停止运行状态state_verbose: True #state_verbose允许从minions返回更多详细的信息,通常清空下只返回失败或者已经更改,但是将state_verbose设置为True,将会返回所有的状态检查state_output: full #state_output的设置将会改变信息输出的格式,当被设置为”full”时,将全部的输出一行一行的显示输出;当被设置为”terse“时,将会 被缩短为一行进行输出;当被设置为”mixed”时,输出样式将会是简洁的,除非状态失败,这种情况下将会全部输出;当被设置为”change”时,输出 将会完全输出除非状态没有改变

 File Server settings 

# file_roots: #  salt运行一个轻量级的文件服务器通过ZeroMQ对minions进行文件传输,因此这个文件服务器是构造在master的守护进程中,并且不需要依赖于专用的端口

文件服务器的工作环境传递给master,每一个环境可以有多个根目录,但是相同环境下多个文件的子目录不能相同,否则下载的文件将不能被可靠的保证,一个基础环境依赖于主的入口文件,

1
2
3
4
5
6
7
8
9
10
 Example:
 file_roots:
   base:
     /srv/salt/
   dev:
     /srv/salt/dev/services
     /srv/salt/dev/states
   prod:
     /srv/salt/prod/services
     /srv/salt/prod/states

#hash_type: md5  # 默认值:md5 ; hash_type是用来当发现在master上需要对一个文件进行hash时的hash使用的算法,默认是md5.但是它也支持sha1,sha224,shar256,shar384,shar512 

#file_buffer_size: 1048576  # 默认值:1048576 ;文件服务器的缓存区大小 

#fileserver_backend:  # 默认值: fileserver_backend: \n\t - roots  ;salt支持模块化的后端文件系统服务器,它允许salt通过第三方的系统来管理收集文件并提供给minions使用,可以配置多个后端文件系统,这里支 持gitfs、hgfs、roots、s3fs文件调用的搜索顺序按照后台文件系统的配置顺序来搜索,默认的设置只开启了标准的后端服务器roots,具 体的根选项配置通过file_roots参数设置

1
2
3
fileserver_backend:
  - git
  - roots

#####         Pillar settings        #####

#pillar_roots:  # 默认值: base: \n\t - /srv/pillar 设置不同的环境对应的存放pillar数据的目录,这个配置和file_roots参数配置一样 

1
2
3
4
5
6
7
pillar_roots:
    base:
        /srv/pillar
    dev:
       /srv/pillar/dev
    prod:
        /srv/pillar/prod

#####         Logging settings       #####

#log_file: /var/log/salt/master # 默认值:/var/log/salt/master ;master的日志可以发送到一个普通文件,本地路径名或者网络位置

1
2
3
4
eg:
log_file: /var/log/salt/master
log_file: 
log_file: udp://loghost:10514

#log_level: warning  #默认值:warning ; 按照日志级别发送信息到控制台 可选项:# One of 'garbage', 'trace', 'debug', info', 'warning', 'error', 'critical'.

1
log_level: warning

#log_level_logfile: warning #默认值:warning ; 按照日志级别发送信息到日志文件

#log_datefmt: '%H:%M:%S'  #默认值:%H:%M:%S ;发送到控制台信息所用的日期时间格式,更多详情 

log_fmt_console

默认值: [%(levelname)-8s] %(message)s

控制台日志信息格式,

1
log_fmt_console: '[%(levelname)-8s] %(message)s'

 

log_fmt_logfile

默认值: %(asctime)s,%(msecs)03.0f [%(name)-17s][%(levelname)-8s] %(message)s

%(asctime)s:2003-07-08 16:49:45%(msecs)03.0f:当前时间的毫秒部分%(name):日志记录调用器的名字%(levelname):日志记录级别%(message)s:日志详细信息

  

1
log_fmt_logfile: '%(asctime)s,%(msecs)03.0f [%(name)-17s][%(levelname)-8s] %(message)s'

log_granular_levels  #默认值:{} ; 这可以更加具体的控制日志记录级别

#####         Node Groups           #####

1
2
nodegroups:
   webgroup1: 'L@_host_serv_1.lansgg.com,_host_serv_1.lansgg.com'

上面配置是我这边测试用;编辑后,重启master

1
[root@master salt]# salt -N webgroup1 test.ping

wKioL1PbW3WT0crRAAB9zmgXDPc937.jpg

高级用法:

关于组的混合匹配:(Compound matchers)

wKiom1PbWoLDqMKWAAFyiyFwI5g721.jpg

匹配中可以使用and、or及not等boolean型操作
例如,想匹配所有minion中主机名(minion id)以webserv开头并且运行在Debian系统上或者minion的主机名(minion id)匹配正则表达式web-dc1-srv.*:
salt -C ‘webserv* and G@os:Debian or E@web-dc1-srv.*’ test.ping
在top.sls中可以如下使用:
base:
  ‘webserv* and G@os:Debian or E@web-dc1-srv.*’:
    – match: compound
    – webserver

 

遇到的问题:

 

ModuleNotFoundError: No module named 'salt'
-- The result is failed.
Apr 20 01:34:27 localhost.localdomain systemd[1]: Unit salt-master.service entered failed state.
Apr 20 01:34:27 localhost.localdomain systemd[1]: salt-master.service failed.
Apr 20 01:34:27 localhost.localdomain polkitd[5770]: Unregistered Authentication Agent for unix-process:6074:4301 (system bus name :1.13, object path /org/freedesktop
Apr 20 01:35:04 localhost.localdomain polkitd[5770]: Registered Authentication Agent for unix-process:6082:8015 (system bus name :1.14 [/usr/bin/pkttyagent --notify-f
Apr 20 01:35:04 localhost.localdomain systemd[1]: Reloading.
Apr 20 01:35:04 localhost.localdomain systemd[1]: Configuration file /usr/lib/systemd/system/auditd.service is marked world-inaccessible. This has no effect as config
Apr 20 01:35:04 localhost.localdomain systemd[1]: Configuration file /usr/lib/systemd/system/wpa_supplicant.service is marked executable. Please remove executable per
Apr 20 01:35:04 localhost.localdomain polkitd[5770]: Unregistered Authentication Agent for unix-process:6082:8015 (system bus name :1.14, object path /org/freedesktop
Apr 20 01:35:12 localhost.localdomain polkitd[5770]: Registered Authentication Agent for unix-process:6100:8814 (system bus name :1.15 [/usr/bin/pkttyagent --notify-f
Apr 20 01:35:12 localhost.localdomain systemd[1]: Starting The Salt Master Server...
-- Subject: Unit salt-master.service has begun start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
-- 
-- Unit salt-master.service has begun starting up.
Apr 20 01:35:12 localhost.localdomain systemd[1]: salt-master.service: main process exited, code=exited, status=1/FAILURE
Apr 20 01:35:12 localhost.localdomain salt-master[6105]: Traceback (most recent call last):
Apr 20 01:35:12 localhost.localdomain salt-master[6105]: File "/usr/bin/salt-master", line 6, in <module>
Apr 20 01:35:12 localhost.localdomain salt-master[6105]: from salt.scripts import salt_master
Apr 20 01:35:12 localhost.localdomain salt-master[6105]: ModuleNotFoundError: No module named 'salt'
Apr 20 01:35:12 localhost.localdomain systemd[1]: Failed to start The Salt Master Server.
-- Subject: Unit salt-master.service has failed
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
-- 
-- Unit salt-master.service has failed.
-- 
-- The result is failed.
Apr 20 01:35:12 localhost.localdomain systemd[1]: Unit salt-master.service entered failed state.

解决方法: 

pip install salt

  

 

转载于:https://www.cnblogs.com/linuxws/p/10734336.html

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

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

相关文章

python中for和while区别_Python学习第九篇——while和for的区别

1 pets [dog,cat,dog,goldfish,cat,rabbit,cat]2 print(pets)3 for pet inpets:4 print(pet)5 #------------------------------------------ 6 pets [dog,cat,dog,goldfish,cat,rabbit,cat]7 print(pets)8 while pet inpets:9 print(pet) 上述代码都想打印列表中的所有元素&…

java 11:数组作为函数参数,数组做为函数返回值

1 数组作为参数 我们可以将数组作为参数&#xff0c;传入到函数中&#xff0c;其实就像我们main函数中 public void main(String [] args){};就是用数组作为函数参数&#xff1b; 又如&#xff0c; [java] view plaincopypublic class ArrayPar { public static void p…

C++ 指针基本概念

Ⅰ.内存和地址 我们已经很熟悉一些基本的存储单位了,比如一个bit(位)用存储0或者1.也可以把几个bit合起来表示更大的数字,比如一个byte(字节)就包含了8个bit.这些都是很基础很简单的东西.然后我们可以把计算机的内存想象成一个字节数组,内存中的每一个地址表示一个字节. 每个字…

Java 7:使用NIO.2进行文件过滤–第2部分

大家好。 这是使用NIO.2系列进行文件过滤的第2部分。 对于那些尚未阅读第1部分的人 &#xff0c;这里有个回顾。 NIO.2是自Java 7起JDK中包含的用于I / O操作的新API。使用此新API&#xff0c;您可以执行与java.io相同的操作&#xff0c;以及许多出色的功能&#xff0c;例如&a…

机器人教育发展_得于人工智能发展,机器人教育低龄化越来越普及

近两年&#xff0c;各种看得到看不到的渠道都在推荐学机器人少儿编程&#xff0c;虽有利益使然&#xff0c;不过机器人少儿编程也确实算得上是通往世界名校大门的快速通道。相信很多家长也同样能感到&#xff0c;最近这股风刮得实在是太大&#xff0c;以至于周围的家长们都开始…

C#相对路径

1、 根目录 .\\ 或者直接给出文件名称&#xff0c;是找根目录的路径。 如&#xff1a;path "gs.mdb" 与 path ".\\gs.mdb"是一个意思。 2、 根目录的上级目录, 在C#中是指定到bin文件夹里面 ..\\ 应用程序的根目录的上两级 3、指定到根目录上面的三级目录…

java finalize方法的使用

《JAVA编程思想》&#xff1a; Java提供finalize()方法&#xff0c;垃圾回收器准备释放内存的时候&#xff0c;会先调用finalize()。 (1).对象不一定会被回收。 (2).垃圾回收不是析构函数。 (3).垃圾回收只与内存有关。 (4).垃圾回收和finalize()都是靠不住的&#xff0c;只要…

C++ 运算符优先级

优先级运算符名称或含义使用形式结合方向说明1[]数组下标数组名[常量表达式]左到右 ()圆括号&#xff08;表达式&#xff09;/函数名(形参表) .成员选择&#xff08;对象&#xff09;对象.成员名 ->成员选择&#xff08;指针&#xff09;对象指针->成员名 2-负号运算符-表…

另一个拼图观点

在过去的几周中&#xff0c;围绕即将发布的Java 9及其最著名的功能&#xff1a;Java平台模块系统JPMS展开了激烈的辩论。 –以项目拼图Jigsaw的名称而闻名。 模块系统以正式规范过程的形式引入Java生态系统 – JSR –需要由专家组以最终形式批准。 在该专家组的其他成员中&am…

Cookie中不能有空格_前端小贴士 -- 全面了解Cookie

一、Cookie的出现浏览器和服务器之间的通信少不了HTTP协议&#xff0c;但是因为HTTP协议是无状态的&#xff0c;所以服务器并不知道上一次浏览器做了什么样的操作&#xff0c;这样严重阻碍了交互式Web应用程序的实现。针对上述的问题&#xff0c;网景公司的程序员创造了Cookie。…

线程面试题

1.在使用线程时&#xff0c;为什么不直接调用run()方法而是调用了start(): 直接调用run()方法&#xff0c;不存在线程的启动&#xff0c;属于调用实例方法&#xff0c;只有一条执行路径&#xff0c;不存在多线程并行交替执行了。调用start()方法属于启动线程&#xff0c;将自动…

Java IO - Reader

前言 JavaIO一共包括两种&#xff0c;一种是stream&#xff0c;一种是reader/writer&#xff0c;每种又包括in/out&#xff0c;所以一共是四种包。Java 流在处理上分为字符流和字节流。字符流处理的单元为 2 个字节的 Unicode 字符&#xff0c;分别操作字符、字符数组或字符串&…

python程序设计语言的执行方式_编程语言用Python执行程序的4种方式

在编写代码中&#xff0c;经常会遇到在 Python程序中打开外部程序的需求&#xff0c;那么在Python里如何打开外部程序呢?今天我们来介绍四种不同的方式&#xff0c;供大家参考收藏。 使用 os.system() os.system(command)是最简单的一种方式&#xff0c;我们import os模块&…

leetcode 994.腐烂的橘子

题目&#xff1a; 在给定的网格中&#xff0c;每个单元格可以有以下三个值之一&#xff1a; 值 0 代表空单元格&#xff1b;值 1 代表新鲜橘子&#xff1b;值 2 代表腐烂的橘子。每分钟&#xff0c;任何与腐烂的橘子&#xff08;在 4 个正方向上&#xff09;相邻的新鲜橘子都会…

运行时异常和检查性异常区别

Java提供了两类主要的异常:runtime exception和checked exception。checked 异常也就是我们经常遇到的IO异常&#xff0c;以及SQL异常都是这种异常。对于这种异常&#xff0c;JAVA编译器强制要求我们必需对出现的这些异常进行catch。所以&#xff0c;面对这种异常不管我们是否愿…

VS2015配置freegult

与vs配置opencv类似 1.首先先找到自己系统里OpenGL相关.h.lib .dll的位置 一般系统里已自带&#xff0c;只要去找到就好&#xff0c;我的位置&#xff1a; gl.h C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include\gl OpenGL32.Lib GlU32.Lib C:\Program Files\Microsoft…

java 死锁的检测与修复_调查死锁–第4部分:修复代码

java 死锁的检测与修复在这个简短的博客系列的最后BadTransferOperation中&#xff0c;我一直在讨论分析死锁&#xff0c;我将修复BadTransferOperation代码。 如果您已经看过本系列的其他博客 &#xff0c;那么您会知道&#xff0c;为了达到这一点&#xff0c;我创建了死锁演示…

python下载url_三种Python下载url并保存文件的代码详解

利用程序自己编写下载文件挺有意思的。 Python中最流行的方法就是通过Http利用urllib或者urllib2模块。 当然你也可以利用ftplib从ftp站点下载文件。此外Python还提供了另外一种方法requests。 来看看三种方法是如何来下载zip文件的&#xff1a; import urllib import urllib2 …

springcloud(七)-Feign声明式REST调用

前言 前面我们使用的RestTemplate实现REST API调用&#xff0c;代码大致如下&#xff1a; public User findById(PathVariable Long id) {return restTemplate.getForObject("http://localhost:8084/" id, User.class);} 由代码可知&#xff0c;我们是使用拼接字符串…

OpenGL 各类库的解析gl glu glut freeglut glfw glew

gl.h gl库是核心库&#xff0c;gl中包含了最基本的3D函数&#xff0c;可以再本地电脑中的&#xff1a; C:\Program Files (x86)\MicrosoftSDKs\Windows\v7.0A\Include\gl 路径下找到gl.h头文件&#xff0c;打开后可以看到其中定义的上百个相关函数。 glu.h glu是实用库&#xf…