小阿轩yx-SaltStack部署与应用基础

小阿轩yx-SaltStack部署与应用基础

前言

  • 当今数字化时代,大规模 IT 系统的管理已经成为一个复杂而繁琐的任务。
  • 为了提高系统管理的效率和准确性,自动化工具成为各企业不可或缺的一部分。
  • Saltstack 作为一款强大的自动化和配置管理工具,在业界得到了广泛的应用和认可。

SaltStack 基础

  • 生产环境中,服务器往往不只是一台,有可能是成千上万台。
  • 对于运维人员来说,如果单独的对每台服务器进行管理,工作难度比较大。
  • 这时部署自动化运维就可以尽可能安全、高效的完成这些工作。

自动化运维工具划分为两类

  • 一类是需要使用代理工具的,也就是基于专用的 Agent 程序来完成管理功能,如:Saltstack、Puppet、Func、Zabbix 等;
  • 另外一类是不需要配置代理工具的,可以直接基于 SSH 服务来完成管理功能,如:Ansible、Fabric 等。

几款功能类似的自动化运维工具

  • Saltstack:是一个服务器基础设施管理工具,它具有配置管理、远程执行、监控等功能。Saltstack 由 Python 语言编写,是非常简单易用和轻量级的管理工具。
  • Ansible:是基于 Python 开发的,集合了众多优秀运维工具的优点,实现了批量运行命令、部署程序、配置系统等功能的自动化运维管理工具。默认通过 SSH 协议进行远程命令执行或下发配置,无需部署任何客户端代理软件,从而使得自动化环境部署变得更加简单。可同时支持多台主机并行管理,使得管理主机更加便捷。
  • Puppet:是基于 Ruby 开发的,支持 Linux、unix、windows 平台的自动化运维管理工具,可以针对用户、系统服务、配置文件、软件包等进行管理,有很强的扩展性,但远程执行命令相对较弱。

针对这几款自动化运维工具比较列表

工具开发语言结构配置文件格式运行任务
AnsiblePythonYAML支持命令行
SaltStackPythonC/SYAML支持命令行
PuppetRubyC/SRuby 语法格式通过模块实现
  • 部署 Saltstack 环境,可以在成千上万台服务器上批量执行命令,对于不同的业务进行集中管理、分发文件、采集数据、软件包管理等。
  • 有利于运维人员提高工作效率、规范业务配置和操作。

SaltStack 原理

  • Saltstack 由 Master 和 Minion 构成,Master 是服务器端,表示一台服务器,Minion 是客户服务器端,表示多台服务器。
  • 在 Master 上发送命令给符合条件的 Minion,Minion 就会执行相应的命令。Master 和 Minion 之间是通过 ZeroMQ(消息队列)进行通信。
  • Saltstack 的 Master 端监昕 4505 与 4586 端口,4505 为 Saltstack 的消息发布端口,4506为 Saltstack 客户端与服务端通信的端口。Saltstack 客户端程序并不监听端口,当客户端启动后,会主动连接 Master 端注册,然后一直保持该 TCP 连接,而 Master 通过这条TCP 连接对客户端进行控制。如果连接断开,Master对客户端将不能进行控制。但是,当客户端检查到连接断开后,会定期的向Master 端请求注册连接。

SaltStack 部署

设置系统基本环境

按表格设置各个主机的主机名和 hosts 文件

ip主机名角色
192.168.10.101mastermaster
192.168.10.102web01minion01
192.168.10.103web02minion02

开启会话同步

关闭防火墙、内核机制

[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld
[root@localhost ~]# setenforce 0
[root@localhost ~]# vim /etc/sysconfig/selinux
##修改为
SELINUX=disabled

关闭会话同步

修改主机名

主机一(101)

[root@localhost ~]# hostnamectl set-hostname master
[root@localhost ~]# bash

主机二(102)

[root@localhost ~]# hostnamectl set-hostname minion01
[root@localhost ~]# bash

主机三(103)

[root@localhost ~]# hostnamectl set-hostname minion02
[root@localhost ~]# bash

将各个节点所需的 rpm 包通过 Xftp 上传至主机

主机一(101)

主机二(102)

主机三(103)

安装 Master

[root@master ~]# rpm -ivh salt-3006.4-0.x86 64.rpm
[root@master ~]# rpm -ivh salt-master-3006.4-0.x86 64.rpm

以下软件包为扩展 saltstack 的可选组件

  • salt-ssh:主要作用是不需要安装 minion,只要 ssh 协议开放,即可远程执行命令,可用作拿到一批新机器,批量配置时使用,也可以直接通过 salt-ssh 不安装 minion 进行管理。
  • salt-syndic:通过 syndic,可以建立多层级的 salt拓扑,Syndic下的 Minions 即可通过 syndic所在的 Master 进行管理,也可以通过 MasterOfMaster 及更高层级的 Master 进行管理,架构变得异常灵活.
  • salt-cloud:Salt cloud 目前已经提供了对腾讯云平台的管理支持,一些常见的云平台管理功能。
  • 管理操作已经都可以做到通过 salt cloud 集成到自有的技术平台上做统一的资源管理了。
  • salt-api:salt-api 是我们通过 restful-api 调用 salt-master 的接口,且调用的时候必须通过认证才能调用,认证的用户为系统用户

安装 Minion

[root@master ~]# rpm -ivh salt-3006.4-0.x86_64.rpm
[root@master ~]# rpm -ivh salt-minion-3006.4-0.x86 64.rpm

配置 Master

  • 修改 Master 的配置文件
[root@master ~]# vim /etc/salt/master
interface: 192.168.10.101
auto_accept: Truefile_roots:base:- /srv/saltnodegroups:group1: 'web01'group2: 'web02'pillar_opts: True
pillar_roots:base:- /srv/pillar

#开启 saltstack 文件根目录位置,注意这个目录默认没有创建,需要自己手动创建。

  • file_roots:
  •   base:
  •     - /srv/salt

#开启 pillar 功能,同步文件功能 

pillar_opts: True

#pillar 的主目录,需要自己创建 

pillar_roots:
    base:
       - /srv/pillar 

在设置主机组的时候可以同时写多个主机。

  • group1: 'web01' 组中有多个成员就用逗号隔开 --> group1: 'web01,web03'

创建两个目录

[root@master ~]# mkdir /srv/salt
[root@master ~]# mkdir /srv/pillar

修改后可以启动 Master

[root@master ~]# systemctl start salt-master
[root@master ~]# systemctl enable salt-master

配置 Minion

  • 修改 Minion 的配置文件
[root@minion ~]# vim /etc/salt/minion
master: 192.168.10.101
id: web01
  • 如果修改了 minion 端的 id, minion 会重新注册,向 master 发送新的 key,老的注册信息就失效了,但此时 master 仍然会连接老的 minion,于是就会报错

解决方法

  • 可以删除掉老的 minion 注册信息,目录/etc/salt/pki/master/minions,默认会使用minion 端的 ip 地址作为 key 名称。将以前注册的 ID 删掉,即可。

修改后可以启动 Minion

[root@minion ~]# systemctl start salt-minion
[root@minion ~]# systemctl enable salt-minion
  • 当 Minion 启动后,会自动生成公钥私钥,并将公钥发送到 Master 端。
  • Minion 不监听端口,全靠和 Master 保持长连接,可通过 netstat -an | grep ES 命令查看是否连接成功。
  • 至此 Saltstack 安装完成。

master 端查看 minion 密钥

  • minion 启动后,会连接 master,并且会请求 master 为其签发证书,待证书签发完成后,代表master 可以信任该 minion,并且 minion 和 master 端的通信是经过加密的。
  • 可以通过 salt-key 命令管理 minion 秘钥。

master 端查看接受的 minion 端

[root@master ~]# salt-key -L
Accepted Keys:
web01
webg2
Denied Keys:
Unaccepted Keys:
Rejected Keys:

获取 minion 端指纹码

[root@master ~l# salt-key -f web01
Accepted Keys:
web01:
6f:8b:5c:a6:a4:ff:ce:96:62:04:dd:30:1a:10:32:23:22:51:ed:d4:8b:fd:7b:88:b3:78:d0:0a:82:85:6a:2f

前往 minion 端验证此指纹码

[root@web01 ~]# salt-call --local key.finger
local:
6f:8b:5c:a6:a4:ff:ce:96:62:04:dd:30:1a:10:32:23:22:51:ed:d4:8b:fd:7b:88:b3:78:d0:0a:82:85:6a:2f

SaltStack 基本命令使用

salt 命令格式

使用帮助

[root@master ~]# salt --help

通过帮助信息可以发现,salt 远程执行命令由五个部分组成

  • salt 命令本身
  • 命令行选项
  • 目标定位字符串
  • salt 模块、函数
  • 远程执行函数的参数

展示一个完成的 salt 命令格式

[root@master ~]# salt --summary "*" cmd.run "uptime
web02:18:54:48 up 57 min, 4 users, load average: 0.00,0.01,0.05
web01:18:54:48 up 56 min, 4 users, load average: 0.00, 0.01,0.05------------------------------------------
Summary
------------------------------------------
# of minions targeted: 2
# of minions returned: 2
# of minions that did not return: 0
# of minions with errors: 0
------------------------------------------
  • --summary:显示命令的摘要信息

其他常用选项
-v or --verbose:显示命令的详细描述信息

--out:可控制 salt 执行后的输出结果格式,例如--out=json|raw|nested|quiet 等

在 Master 端测试 Minion

测试模块--test

  • saltstack 中,有很多模块为运维人员提供了各种功能,用户环境测试的有个 test 模块,该模块提供了一系列专用的测试函数,利用这些测试函数,我们可以快速的对运维环境进行各项测试任务。
[root@master ~]# salt '*' test.ping
  • test 指的是模块名,ping 是该模块中的一个命令(函数)。
  • 是一个很简单的探测主机是否存活的命令。
  • 通过该命令,我们发送了一条消息给一个或多个 minion,并告诉它们运行 salt 内置的一个模块中的一个命令(函数)。
  • 这个指令中,minion 端返回 true,代表此主机是存活的。

也可以利用 test.echo 函数用来在 minion 执行 echo 指令,并把结果回显到 master 终端

[root@master ~]# salt web0l test.echo 'hello,i am web01'
web01:hello,i am web01

test 模块实际上还包含许多其他有用的函数,sys 模块的 list_functions 实现如何知道这些函数,sys.list_functions 用来査看指定模块所有的函数

[root@master ~]# salt web01 sys.list_functions test
web01 :- test.arg- test.arg clean- test.arg repr- test.arg type- test.assertion- test.attr_call- test.collatz- test.conf test- test.cross test- test.deprecation warning- test.echo- test.exception- test.false- test.fib- test.get_opts- test.kwarg

目标定位

  • 前面对远程主机进行控制时,我们可以用主机的名字定位远程 minion 主机。
  • 但是实际环境中,通常我们控制着成百上千的 minion 端主机,在不确定远程主机的准确名称的时候,或者要批量对多台主机进行控制时

又该如何灵活的定位所需的服务器呢?

  • 这里就可以使用全局匹配和正则匹配的方法。
全局匹配
  • 全局匹配指的是用通配符代表一批主机

全局匹配中,除了 “*” 之外,还有 “?” 和 “[ ]”

  • *:代表任意字符串,也可以是空字符串。
  • ?:代表一个字符,但不可以代表空。
  • [ ]:字符集合,例如 [a~z] 代表任意一个小写字母。

全局匹配

[root@master ~]# salt '*' test.ping
web01:True
web02:True
[root@master ~]# salt 'web*' test.ping
web01:True
web02:True
[root@master ~]# salt 'web??' test.ping
web02:True
web01:True
[root@master ~]# salt '[a-z]eb??' test.ping
web02:True
web01:True
正则表达式匹配
  • 用于执行更为复杂的匹配
  • salt 使用 Python 的 re 正则表达式模块,可以解析正则表达式(PCRE),正则表达式匹配需要配合命令行选项 -E 或 -pcre。

常用的正则表达式的含义

元字符

  • 正则表达式中使用了很多元字符,用来表示一些特殊的含义或功能。
元字符表达式含义
.小数点可以匹配除了换行符\n 以外的任意一个字符
|逻辑或操作符
[ ]匹配字符集中的一个字符,方括号中可以有多个普通字符
[^]对字符集求反,也就是上面的反操作,尖号必须在方括号里的最前面
-定义 [ ] 里的一个字符区间,例如 [a-z]
\对紧跟其后的一个字符进行转义
()对表达式进行分组,将圆括号内的内容当做一个整体,并获得匹配的值
转义字符
  • 如果一些特殊功能的字符、元字符,不希望它有特定功能,而就是希望使用这个字符的话,可以采用在前面加斜杠 "\" 进行转义的方法。
转义字符含义
\r,\n匹配回车和换行符
\t匹配制表符
\\匹配斜杠\
\^匹配^符号
\$匹配$符号
\.匹配小数点.
\r,\n匹配回车和换行符
特定字符集
  • 正则表达式中的一些表示方法,可以同时匹配某个预定义字符集中的任意一个字符。
转义字符含义
\d任意一个数字,0~9 中的任意一个
\w任意一个字母或数字或下划线,也就是 A~Z,a~z,0~9,_中的任意一个
\s空格、制表符、换页符等空白字符的其中任意一个
\Dd的反集,也就是非数字的任意一个字符,等同于[^\d]
\W\w 的反集,也就是[^\w]
\S\s 的反集,也就是[^\s]

几个salt 正则表达式匹配方式

完全匹配

[root@master ~]# salt -E "web01" test.ping
web01:True

全局匹配

[root@master ~]# salt -E ".*" test.ping
web01:True
web02:True

以特定字符开头或结尾的匹配

[root@master ~]# salt -E "^web.*" test.ping
web01:True
web02:True

列表匹配

  • 有时只想匹配一个指定列表里面的主机并进行远程操作,这时可能全局匹配和正则匹配的方式都无法很好的完成任务,这种情况我们可以直接使用 -L 选项进行列表匹配

如果需要以组为单位控制整个主机组所有的主机,可以使用选项-N

[root@master ~]# salt -N group1 test.ping
web01:True

这里的 group1 是我们在 master 配置文件中指定的主机组的名称

  • nodegroups:
  •     group1: 'web01'
  •     group2: 'web02'

salt-cp 批量拷贝文件

  • salt-cp 命令实现文件的拷贝
[root@master ~]# salt-cp '*' /etc/hosts /opt

远程执行模块和函数

  • 远程执行命令的最后一部分是我们需要运行的模块以及相关函数和对应的执行参数。
  • 模块可以认为是函数的逻辑分组,一系列的函数可以组合在一起构成一个模块。

列举一些常见的模块的基本用法体验 saltstak 的强大功能。

模块和函数的查询

列出 minion 可用模块

  • 模块为运维人员提供了很多功能

使用 “sys.list modules” 对模块进行查询

[root@master ~]# salt "web01" sys.list_modules
web01:- acl- aliases- alternatives- archive- artifactory- baredoc

列出某一模块的可用函数

  • 不同的模块,他们的用法也各有区别,具体的用法体现在模块中的函数,那么某一个模块又有哪些函数构成,就可以使用 “sys.list functions” 进行查询。
[root@master ~]# salt "web01" sys.list_functions cmd
web01:- cmd.exec code- cmd.exec_code_all- cmd.has_exec- cmd.powershell- cmd.powershell_all- cmd.retcode- cmd.run- cmd.run_all- cmd.run_bg- cmd.run_chroot- cmd.run_stderr- cmd.run_stdout- cmd.script- cmd.script_retcode- cmd.shell- cmd.shell_info- cmd.shells- cmd.tty- cmd.which- cmd.which_bin

列出某一函数的具体用法

  • 可以是“sys.doc”说明文档进行査看,以获取详细的帮助功能。
[root@master ~]# salt web01 sys.doc cmd.run

远程命令执行模块 --cmd

如需到多台主机上同时执行一条相同的命令 cmd.run

[root@master ~]# salt "*" cmd.run "ps aux | wc -l"
web01:119
web02:119

显示更详细的执行信息的函数 cmd.run_all

[root@master ~]# salt "*" cmd.run all "ps aux | wc -l"
web02:----------pid:3661retcode:0stderr:stdout:119
web01:----------pid:3670retcode:0stderr:stdout:119

查看所有主机的磁盘信息,并设置该命令执行的超时控制

[root@master ~]# salt '*' cmd.run 'df -h' -t 5

查看所有主机的磁盘信息,cmd.run 执行单个命令

[root@master ~]# salt '*' cmd.run 'df -h'

将本地脚本在远程主机上执行

[root@master ~]# echo "cat /etc/passwd">/srv/salt/test1.sh
[root@master ~]# salt '*' cmd.script salt://test1.sh
[root@master ~]# echo 'ls $1'>/srv/salt/test2.sh
[root@master ~]# salt '*' cmd.script salt://test2.sh /opt

软件包管理模块 --pkg

安装一个软件包

[root@master ~]# salt "*" pkg.install "httpd"

查看已安装的软件包

[root@master ~]# salt "*" pkg.version "httpd"
web02:2.4.6-95.e17.centos
web01:2.4.6-95.e17.centos

卸载已经安装的软件包

[root@master ~]# salt "*" pkg.remove "httpd"

服务管理模块 --service

  • 服务管理也是系统管理员需要维护的一项重要任务,通过 salt 管理 minion 上的服务将会变得很简单。
  • 使用 service 模块,该模块包含了 service.start、service.status、service.stop等。
  • 如果 service.status 远程执行模块函数输出 True 的结果,则表示该服务正在运行;
  • 如果输出的是 False,则表示该服务停止。
  • 启动或停止一个服务时,True 的结果意味着命令执行成功。

启动一个服务

[root@master ~]# salt "*" pkg.install "httpd"
[root@master ~]# salt "*" service.start httpd
web01:True
web02:True

查看服务运行状态

[root@master ~]# salt "*" service.status httpd
web02:True
web01:True

关闭一个服务

[root@master ~]# salt "*" service.stop httpd
web02:True
web01:True

重启一个服务

[root@master ~]# salt "*" service.restart httpd
web01:True
web02:True

重载服务

[root@master ~]# salt "*" service.reload httpd
web01:True
web02:True

文件管理模块 --file

  • salt 提供了 file 模块。
  • 关于 file 模块的使用方式,可以使用命令 “salt web01 sys.list_functions file” 进行查看。

文件信息的查询

[root@master ~]# salt "web01" file.stats /etc/passwd

创建文件

[root@master ~]# salt "*" file.touch /opt/test01.txt
web02:True
web01:True

创建目录

[root@master ~]# salt "*" file.mkdir /opt/doc
web02:True
web01:True

修改文件属主属组

[root@master ~]# salt "*" file.chown /opt/test01.txt root root
web01:None
web02:None

删除目录

[root@master ~]# salt "web01" file.rmdir /opt/doc
web01:True
或
[root@master ~]# salt "web02" file.remove /opt/test.txt
web02:True
  • file.remove 既可以删除目录,也可删除文件,删除目录时为递归删除。

grains 的使用

  • Grains 是 Saltstack 的一个组件,存放着 minion 启动时收集到的信息。
  • 用于査询 minion 端的 IP、FODN 等信息。
  • Grains 是 Saltstack 组件中非常重要的组件之一,存放在 Saltstack 的 minion 端。
  • grains 是由 minion 返回给 master 的数据,这些数据是 minion 端的,并且是以键值对的形式存储的。
  • 做配置部署的过程中会经常使用它,Grains 是Saltstack 记录 minion 的一些静态信息的组件。
  • 可简单理解为Grains 记录着每台 minion 的一些常用属性,比如 CPU、内存、磁盘、网络信息等。
  • 可以通过 grains.items 査看某台 minion 的所有 Grains 信息。
  • 当 salt-minion 启动时会把收集到的数据静态存放在 Grains 当中,只有当 minion 重启时才会进行数据的更新。
  • 由于 grains 是静态数据,因此不推荐经常去修改它。

应用场景

  • 信息查询,可用作 CMDB
  • 在 target 中使用,匹配 minion。
  • 在 state 系统中使用,配置管理模块。

列出 minion 主机上的 grains 项

[root@master ~]# salt "web01" grains.ls
web01:- biosreleasedate- biosvendor- biosversion- boardname- cpu_flags

列出 minion 主机上的 grains 项及其对应的值

[root@master ~]# salt "web01" grains.items

grains 基本用法

  • 下面的命令可以査看被控机 web01 主机的 grains 值 
[root@master ~]# salt "web01" grains.item ipv4
[root@master ~]# salt "web01" grains.item nodename
[root@master ~]# salt "web01" grains.item os
[root@master ~]# salt "web01" grains.item num_cpus

自定义 grains 键值

  • 对于 minion 端没有的 grains 数据,用户也可以自定义 minion 端的 grains 键值
[root@master ~]# salt "web01" grains.set name zhangsan
[root@master ~]# salt "web01" grains.item name
web01:----------
name:zhangsan

也可以使用 JSON 格式同时定义多个值

[root@master ~]# salt "web01" grains.set cpu_info '["intel","xeon","2"]
[root@master ~]# salt "web0l" grains.item cpu_info
web01:----------cpu_info:- intel- xeon- 2

也可以使用 grains.setval 的方法创建键值

与grains.set 不同的是

  • grains.set 是定义任意值
  • grains.setval 定义的是 key 值

grains.setval 的用法

[root@master ~]# salt '*' grains.setval name zhangsan
[root@master ~]# salt "web01" grains.item name
web01:----------name:zhangsan

也可以同时设置 key:value

[root@master ~]# salt 'web01' grains.setvals "{'key1': 'val1','key2': 'val2'}"
[root@master ~]# salt 'web01' grains.item key1
web01:----------key1:val1

可以为一个 key 同时指若干个子 key:value

[root@master ~]# salt 'web01' grains.setval key "{'sub-key1': 'val1', 'sub-key2': val2'}"
web01:----------key:----------sub-key:valsub-key2:val2
[root@master ~]# salt 'web01' grains.item key
web01:----------key:----------sub-key1:val1sub-key2:val2

进入 saly 目录

[root@web01 ~]# cd /etc/salt/

在 minion 端创建 grains 信息

  • grains 数据也可以直接在 minion 端创建
[root@web01 salt]# vim grains
id: admin
pass: pwd123
[root@master ~]# salt web0l grains.item id pass
web01:----------id:adminpass:pwd123

pillar 的使用

Pillar 在 salt 中是非常重要的组成部分,它可以完成很强大的功能,可以指定一些信息到指定的 minion 上,不像 grains 一样是分发到所有 Minion 上的,它保存的数据可以是动态的,Pillar 以sls 来写的,格式是键值对。

与 grains 不同的是

  • pillar 的数据是存储在 master 端的。
  • 每个minion只能看到自己的 pillar 信息,grains 可以看做是主机的 matedata(元数据)
  • 例如 CPU 的数量;
  • 而 pillar 则是主机所需的数据(例如数据库的密码)。
  • 一个 minion 可以告诉 master 该 minion 的 grains 数据,而 minion 需要从 master 端索要 pillar 数据。

适用情景

  • 比较敏感的数据,比如密码,key等
  • 特殊数据到特定 Minion 上
  • 动态的内容
  • 其他数据类型

列出 minion 上的 pillar 详细信息

[root@master ~]# salt 'web01' pillar.items

自定义 pillar 数据

进入 pillar 目录

[root@master ~]# cd /srv/pillar/

为每个 minion 编写对应的 sls 文件

[root@master pillar]# vim test1.sls
name: zhangsan
pass: pwd123
[root@master pillar]# vim test2.sls
name: lisi
pass: pwd123
[root@master pillar]# vim top.sls
base:'web01':- test1'web02':- test2
  • sls 代表 SaLtstack 文件,是一种 yaml 格式的描述文件,SLS 描述了系统的目标状态,由格式简单的数据构成。
  • 这经常被称作配置管理,top.sls 是配置管理的入口文件,一切都是从这里开始,在 master主机上,默认存放在 /srv/salt/ 目录,如果是自定义pillar 数据,需要放置在 /srv/pillar 目录下 top.sls 默认从 base 标签开始解析执行,下一级是操作的目标,可以通过正则,grain 模块,或分组名,来进行匹配,再下一级是要执行的 state 文件,不包换扩展名。

更新 pillar 数据

[root@master pillar]# salt '*' saltutil.refresh pillan

列出所有的 pillar

[root@master pillar]# salt "*" pillar.ls
web01:- name- pass- master
web02:- name- pass- master

查看自定义 pillar 对应的信息

[root@master pillar]# salt "*" pillar.item name
web01:----------name:zhangsan
web02:----------name:lisi
[root@master pillar]# salt "*" pillar.item pass
web02:----------pass:pwd123
web01:----------pass:pwd123

saltstack 目录与文件同步

  • 进行自动化运维过程中,经常会将某一个文件或整个目录中所有的文件同步到远程主机,这个需求我们可以通过各种方式实现,比如 rsync,scp等。
  • 在 saltstack 中,也可以借助它的同步功能,帮助我们灵活的实现这种同步需求。

saltstack 同步方式

  • 可以在 master 端执行 salt '*' state.highstate 手动推送。
  • 可以在 minion 端执行 salt-call state.highstate 手动拉取。
  • 也可以将 salt-call state.highstate 命令放在 Minion 端的定时任务中,来进行自动请求同步。
  • 也可以将 salt '*' state.highstate 命令放在 Master 端的定时任务中,来进行自动推送到所有机器。

Saltstack 有两种同步对象

  • 同步目录
  • 同步文件

目录同步

创建 SaltStack 分发目录

[root@master ~]# vim /srv/salt/top.sls
base:"web*"- zabbix.zabbix

创建出需要同步的目录

[root@master ~]# mkdir -p /srv/salt/zabbix/zabbix_scripts
  • 在 top.sls 文件中指定 web 开头主机访问 zabbix.sls 文件里面定义的内容。
  • - zabbix.zabbix 代表 /srv/salt/ 目录下有个子目录 zabbix,这个子目录下有个 zabbix.sls 文件。

创建 sls 文件

[root@master ~]# vim /srv/salt/zabbix/zabbix.sls
/usr/local/zabbix/scripts:file.recurse:-source:salt://zabbix/zabbix_scripts- dir_mode: 755- file_mode: 744
  • /usr/local/zabbix/scripts:指定 Minion 端同步后生成的目录
  • file.recurse:-source:salt://zabbix/zabbix scripts        指定要 Master 端同步的原始目录
  • -dir mode:755        用 dir_mode 设置目录的权限
  • -file mode: 744        用 file mode 来设置文件的权限

file 字段的其他写法

  • file.managed        保证文件存在,并且为对应的状态
  • file.recurse           保证目录存在,并且为对应状态
  • file.absent            确保文件不存在,如果存在则删除

同步数据

在 master 端推送

[root@master ~]# salt '*' state.highstate

也可以在 minion 端拉取

[root@web01 ~]# salt-call state.highstate

SaltStack 文件同步

  • 需要传送文件时,匹配 web 开头的主机,将文件同步到这些 Minion 上,并设置为对应的文件权限

编写入口文件

[root@web01 ~]# vim /srv/salt/top.sls
base:"web*":- zabbix.zabbix

编写同步参数

[root@web01 ~]# vim /srv/salt/zabbix/zabbix.sls
/usr/local/zabbix/scripts:file.recurse:- source:salt://zabbix/zabbix scripts- dir_mode: 755- file_mode: 744
#追加下面内容
/opt/nginx.conf:file.managed:- source: salt://zabbix/nginx.conf- backup: minion- mode: 644- user: root- group: root
  • /opt/nginx.conf:
  •   file.managed:
  •   - source: salt://zabbix/nginx.conf
  •   - backup: minion
  •   - mode: 644
  •   - user: root
  •   - group: root

- backup: minion        此字段设置备份功能

创建一个配置文件

[root@master ~]# touch /srv/salt/zabbix/nginx.conf

当文件发生变化时,会把原文件备份,备份文件目录 /var/cache/salt/minion/

[root@master ~]# salt '*' state.highstate

小阿轩yx-SaltStack部署与应用基础

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

AI服务器是什么?为什么要用AI服务器?

AI服务器的定义 AI服务器是一种专门为人工智能应用设计的服务器,它采用异构形式的硬件架构,通常搭载GPU、FPGA、ASIC等加速芯片,利用CPU与加速芯片的组合来满足高吞吐量互联的需求,为自然语言处理、计算机视觉、机器学习等人工智…

巧用联合与枚举:解锁自定义类型的无限潜力

嘿嘿,家人们,今天咱们来详细剖析C语言中的联合与枚举,好啦,废话不多讲,开干! 目录 1.:联合体 1.1:联合体类型的声明 1.1.1:代码1 1.1.2:代码2(计算机联合体的大小) 1.1.3:代码3 1.2:联合体的特点 1.2.1:代码1 1.2.2:代码2 1.3:相同成员的结构体与联合体进行对比 1.3…

【SA8155P】AIS Camera相关内容的简单介绍

高通车载相机模块(AIS,Automotive lmage System)是专门针对车载系统特性而设计的一套车载视觉架构,可用于AVM、RVC、DMS等常见车载视频应用开发。车载Camera系统的图像大部分是给自动驾驶等使用,更多考虑的是远距离传输、多摄像头图像处理等场景。 本文仅对AIS Camera相关…

国庆头像制作教程,这几种方法轻松制作国庆头像

随着国庆佳节的临近,朋友圈里是不是已经开始弥漫着浓浓的节日气氛?想要让你的头像也加入这场盛宴,成为最吸睛的存在吗?别急,今天就为你揭秘4款超实用的头像制作神器,能够让你的头像显现出浓郁的国庆节气氛&…

竹云董事长董宁主持2024深商千人中秋晚会

9月13日,由深商会主办“湾区升明月,深商共此时”2024深商中秋千人晚会在洲际酒店隆重举行,TCL 集团、农商银行、资本运营集团、泸州老窖、中集车辆、三诺集团、雷曼光电、置富控股、顺络电子、北科生物、霖峰投资、中国南玻集团、兆驰股份、山…

如何衡量品牌在社媒平台的投放效果?

企业去评估在社媒上的投放效果,不仅仅是看投放内容数据、最终销量如何,要从数据去分析更深纬度的效果。比如对于整体品牌声量的提升,品牌行业占有率的上涨,品牌口碑的优化等等。我们可以用声量通对企业多平台上整体的品牌声量情况…

【数据结构-差分】力扣1589. 所有排列中的最大和

有一个整数数组 nums ,和一个查询数组 requests ,其中 requests[i] [starti, endi] 。第 i 个查询求 nums[starti] nums[starti 1] … nums[endi - 1] nums[endi] 的结果 ,starti 和 endi 数组索引都是 从 0 开始 的。 你可以任意排列…

迁移学习+多模态融合,小白轻松发一区!创新性拉满!

多模态研究如今愈发火热,已成为各大顶级会议的投稿热门。今天,我为大家提供一个多模态的创新思路:迁移学习与多模态融合。 迁移学习多模态融合方向的优势 1.提升模型性能:综合更多维度优势,跨模态互补 2.快速适应新…

【Verilog学习日常】—牛客网刷题—Verilog快速入门—VL17

用3-8译码器实现全减器 描述 请使用3-8译码器和必要的逻辑门实现全减器,全减器接口图如下,A是被减数,B是减数,Ci是来自低位的借位,D是差,Co是向高位的借位。 3-8译码器代码如下,可将参考代码添…

基于Java的房地产在线营销管理系统研究与实现

目录 前言 功能设计 系统实现 获取源码 博主主页:百成Java 往期系列:Spring Boot、SSM、JavaWeb、python、小程序 前言 随着信息技术的迅猛发展,互联网已经渗透到我们生活的方方面面,为各行各业带来了前所未有的变革。房地产…

Fiddler的下载(带安装包和安装配置教程)

1.安装包下载 1.1官网下载 https://www.telerik.com/download/fiddler 填上相应的信息即可 1.2安装包下载 安装包地址 提取码:uq2n 2.安装 选择路径 3.使用 3.1配置支持抓https的包 配置成功!!!如果还是抓不到 重启一下! 3.2抓包 双…

Flux【真人模型】:高p高糊反向真实质感!网图风格的Lora模型,超逼真的AI美女大模型!

大家好,我是画画的小强 今天和大家分享一款基于Flux训练的网图风格的lora模型:墨幽-F.1-Lora-网图,该Lora模型由墨幽团队出品,旨在生成高p高糊的反向真实质感图片,而非真实摄影图片。不过,在自己出图过程中…

车间生产电子看板系统在工厂中的高效运用

在当今竞争激烈的制造业领域,工厂不断寻求提高生产效率、优化管理流程的方法。车间生产电子看板系统的出现,为工厂带来了全新的管理模式和高效的生产方式。 车间生产电子看板系统通过数字化的显示方式,将生产进度、任务安排、质量状况、设备运…

已知曲线满足正余弦函数,根据其峰值,还原出整条曲线

🏆本文收录于《全栈Bug调优(实战版)》专栏,主要记录项目实战过程中所遇到的Bug或因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&am…

C++和OpenGL实现3D游戏编程【连载9】——纹理的镂空显示

1、本节实现的内容 前面的课程中,我们学会了加载纹理并显示纹理图案,但是纹理的图案都是长方形的图片,图片就会有白色或黑色背景,那么在游戏设计过程中,我们经常不需要显示图片的背景部分,那么这节课我们就来讨论一下如何实现剔除白色或黑色背景后的镂空图像,下图就是将…

百元头戴式耳机都有哪些?五大精品独家推荐!

在当今市场中,耳机已经成为我们生活中不可或缺的电子设备之一。而对于追求性价比的朋友来说,如何在百元价位内挑选到一款音质出色、舒适耐用的头戴式耳机,无疑是一大难题。百元头戴式耳机都有哪些?为了帮助大家在琳琅满目的产品中…

图结构的稀疏变换器:EXPHORMER框架

人工智能咨询培训老师叶梓 转载标明出处 尽管图变换器在理论上具有强大的表达能力,但是它们在扩展到大型图时面临着巨大的挑战。这一挑战主要源于其全局注意力机制的二次方时间复杂度,这不仅限制了其在大型图数据集上的应用,也使得其在内存和…

Docker 里面按照ifconfig

1. 进入Docker 容器内部 docker exec -it xxx bash2. 安装 net-tools iputils-ping apt-get update && apt-get install -y net-tools apt-get update && apt-get install -y iputils-ping 3. 执行ifconfig 执行ping

Nacos注册中心(Nacos安装,快速入门,多级存储,负载均衡,环境隔离,配置管理,热更新,集群搭建,nginx反向代理)

Nacos注册中心 1. Nacos安装 (windows) 1.1 官网下载 网址:https://github.com/alibaba/nacos/releases/tag/1.4.1 这里下载nacos1.4.1的Windows版本为例1.2 解压到本地 注: 解压到非中文目录 nacos默认端口号:8848,可在配置文件properties中修改1.3 启动nacos 在G:\Sp…

鸿蒙OpenHarmony【轻量系统内核通信机制(互斥锁)】子系统开发

互斥锁 基本概念 互斥锁又称互斥型信号量,是一种特殊的二值性信号量,用于实现对共享资源的独占式处理。 任意时刻互斥锁的状态只有两种,开锁或闭锁。当任务持有互斥锁时,该互斥锁处于闭锁状态,这个任务获得该互斥锁…