企业 Saltstack安装配置及远程推送

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

Saltstack

概述

Salt 是:
一个配置管理系统,能够维护预定义状态的远程节点(比如,确保指定的报被安装,指定的服务在运行);
一个分布式远程执行系统,用来在远程节点(可以是单个节点,也可以是任意规则挑选出来的节点)上执行命令和查询数据;
开发其的目的是为远程执行提供最好的解决方案,并使远程执行变得更好,更快,更简单;
salt在几乎不改动配置的情况下就可以工作,也可以调整从而满足特定的需求。

Salt的核心功能:

  • 使命令发送到远程系统是并行的而不是串行的
  • 使用安全加密的协议
  • 使用最小最快的网络载荷
  • 提供简单的编程接口

Salt同样引入了更加细致化的领域控制系统来远程执行,使得系统成为目标不止可以通过主机名,还可以通过系统属性。

通信机制

SaltStack 采用 C/S模式,minion与master之间通过ZeroMQ消息队列通信,默认监听4505端口。
Salt Master运行的第二个网络服务就是ZeroMQ REP系统,默认监听4506端口。

安装与配置

安装

可以通过访问saltstack官网去访问和学习使用:https://www.saltstack.com/
saltstack是拥有中文文档的可以访问:http://docs.saltstack.cn/

安装分为两部分,测试使用三台一台为master节点,其它两台为minion节点。

设置官方YUM仓库安装进行

master节点操作:

[root@server1 ~]# yum install https://repo.saltstack.com/yum/redhat/salt-repo-latest.el7.noarch.rpm

[root@server1 ~]# yum install -y salt-master		#安装master节点
[root@server1 ~]# systemctl enable --now salt-master.service 	#启动并设为开机自启

minion节点操作:
server2

[root@server2 ~]# yum install https://repo.saltstack.com/yum/redhat/salt-repo-latest-2.el7.noarch.rpm
[root@server2 ~]# yum install -y salt-minion
[root@server2 ~]# vim /etc/salt/minion	#编辑minion 的配置文件
master: 172.25.254.1	#更改master后面的地址为master节点的ip
#注意这是python写的程序所以写配置时:后有空格,否则会报错
[root@server2 ~]# systemctl enable --now salt-minion.service 	#启动并开机自启

server3进行同样操作配置开启minion

如果访问官方的仓库很慢的话,也可以去使用阿里云的仓库安装就会快得多

# yum install https://mirrors.aliyun.com/saltstack/yum/redhat/salt-repo-latest-2.el7.noarch.rpm
配置

安装完成后,因为刚才开启了minion节点,并且设置master指向server1,所以在server1上我们就可以看到两个minion上看到的信号,注意设置地址解析
这里看到的server2和server3是还未被允许的

[root@server1 ~]# salt-key -L
Accepted Keys:
Denied Keys:
Unaccepted Keys:
server2
server3
Rejected Keys:

可以查看一下4506端口,展示的信息显示是从server2和server3上给server1在发送信息,但是4505端口暂时是没有任何信息的

[root@server1 ~]# lsof -i :4506
COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
salt-mast 3550 root   23u  IPv4  32689      0t0  TCP *:4506 (LISTEN)
[Bqsalt-mast 3550 root   30u  IPv4  36712      0t0  TCP server1:4506->172.25.254.2:37596 (ESTABLISHED)
salt-mast 3550 root   31u  IPv4  37053      0t0  TCP server1:4506->172.25.254.3:38790 (ESTABLISHED)

[root@server1 ~]# lsof -i :4505
COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
salt-mast 3543 root   15u  IPv4  32640      0t0  TCP *:4505 (LISTEN)

然后来操作允许连接这两台minion节点

[root@server1 ~]# salt-key -a server2	#可以用参数-a指定允许指定节点
[root@server1 ~]# salt-key -A	#也可以-A指定允许所有要连接的节点,删除也是一样,-d或-D,删除指定或全部
[root@server1 ~]# salt-key -L
Accepted Keys:
server2
server3
Denied Keys:
Unaccepted Keys:
Rejected Keys:

测试连接的效果

[root@server1 ~]# salt '*' test.ping		#'*'表示匹配所有节点
server3:
    True	#表示连接正常
server2:
    True
[root@server1 ~]# lsof -i :4505	#4505的连接信息也有了
COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
salt-mast 3543 root   15u  IPv4  32640      0t0  TCP *:4505 (LISTEN)
salt-mast 3543 root   17u  IPv4  39059      0t0  TCP server1:4505->172.25.254.2:60548 (ESTABLISHED)
salt-mast 3543 root   18u  IPv4  39131      0t0  TCP server1:4505->172.25.254.3:42180 (ESTABLISHED)

注意:当minion节点连接master节点后,在minion节点会生成/etc/salt/minion_id文件,里面记录的了你当前的主机名,如果自行更改了主机名,就需要先在master节点删除之前的连接,再删除/etc/salt/minion_id,然后重启服务再去连接。


Saltstack远程执行操作

远程指令操作

Salt命令由三个主要部分构成:

salt '<target>' <function> [arguments]
target:用来指定哪些minion, 默认的规则是使用glob匹配minion id。
-也可以使用正则表达式批量匹配主机:salt -E ‘server[1-3]’ test.ping
-也可以指定列表: salt -L ‘server2,server3’ test.ping
funcation是module提供的功能,Salt内置了大量有效的functions. 如cmd、pkg、service等模块
-模块的详细内容和用法可以查看http://docs.saltstack.cn/ref/modules/all/index.html
arguments空格来界定参数,如salt ‘server2’ sys.doc pkg

测试:
使用master节点直接去操作minion节点

[root@server1 ~]# salt server2 cmd.run df	#再server2上执行df命令
server2:
    Filesystem            1K-blocks    Used Available Use% Mounted on
    /dev/mapper/rhel-root   8910848 1251164   7659684  15% /
    devtmpfs                 495380       0    495380   0% /dev
    tmpfs                    507448      40    507408   1% /dev/shm
    tmpfs                    507448   13280    494168   3% /run
    tmpfs                    507448       0    507448   0% /sys/fs/cgroup
    /dev/vda1                508580  128004    380576  26% /boot
    tmpfs                    101492       0    101492   0% /run/user/0
编写远程执行模块文件来控制minion

编写前需要开启master配置里的默认基础目录路径

[root@server1 ~]# vim /etc/salt/master
file_roots:   
  base:
    - /srv/salt/	#开启后基础路径就在/srv/salt/
[root@server1 ~]# systemctl restart salt-master.service 

[root@server1 ~]# mkdir /srv/salt	#创建这个目录

然后就可以测试编辑执行文件
根据官方文档我们也可以编写自定义的模块来操作
在这里插入图片描述
首先在/srv/salt/创建目录 _modules ,在此目录里写一个py执行文件

[root@server1 salt]# mkdir /srv/salt/_modules

[root@server1 salt]# vim /srv/salt/_modules/disk.py 
def df():
    return __salt__['cmd.run']('df -h')

编写完成后需要将自定义的模块同步给其他的nimion节点

[root@server1 salt]# salt server2 saltutil.sync_modules
server2:	#同步给server2
    - modules.disk

可以在server2的salt数据储存目录里看到master节点同步的模块就储存在这里,内容都是一样的,所以当在master调用这个模块时相当于就是在执行nimion节点里的这个文件内容
[root@server2 ~]# cat /var/cache/salt/minion/files/base/_modules/disk.py 
def df():
    return __salt__['cmd.run']('df -h')

调用模块测试

[root@server1 salt]# salt server2 disk.df
server2:
    Filesystem             Size  Used Avail Use% Mounted on
    /dev/mapper/rhel-root  8.5G  1.2G  7.4G  15% /
    devtmpfs               484M     0  484M   0% /dev
    tmpfs                  496M   80K  496M   1% /dev/shm
    tmpfs                  496M   13M  483M   3% /run
    tmpfs                  496M     0  496M   0% /sys/fs/cgroup
    /dev/vda1              497M  126M  372M  26% /boot
    tmpfs                  100M     0  100M   0% /run/user/0

对于系统自带的模块使用,直接编写 .sls结尾的文件就可以,这里需要注意的就是编辑的语法规则

  • 规则一: 缩进
    Salt需要每个缩进级别由两个空格组成,不要使用tabs。
  • 规则二: 冒号
    字典的keys在YAML中的表现形式是一个以冒号结尾的字符串。
    my_key: my_value
  • 规则三: 短横杠
    想要表示列表项,使用一个短横杠加一个空格。
    - list_value_one
    - list_value_two

编写sls文件执行模块

[root@server1 salt]# vim apache.sls
httpd:		#ID声明
  pkg:		#状态声明
    - installed	#函数声明

也可以写成:
httpd:
  pkg.installed

推送执行文件给server2

[root@server1 salt]# salt server2 state.sls apache	#这里的apache就是apache.sls,不需要特殊指定路径,默认就是从/srv/salt/开始

[root@server2 ~]# ls /var/cache/salt/minion/files/base/	#在server1上执行推送时,是将编写的sls文件推送给server2上然后再去执行这个文件内容
apache.sls  _modules

执行成功后会有显示成功或失败
在这里插入图片描述

还有一种方式可以将所有关于某个执行目的的文件都放在一个目录里,然后直接去这个目录下的文件来执行.
init.sls 在一个子目录里面表示引导文件,也就表示子目录本身,所以我们将apache.sls放在apache目录下改名为apache/init.sls

[root@server1 salt]# mkdir apache
[root@server1 salt]# mv apache.sls apache/init.sls 

[root@server1 salt]# salt server2 state.sls apache	#推送时执行apache就会自动指定到apache/init.sls执行

注意: 如果同时存在apache.sls 和 apache/init.sls,则 apache/init.sls 被忽略,apache.sls将被用来表示 apache.

模块使用

给server2推送安装httpd和php,并且设置启动httpd和开机自启

[root@server1 salt]# vim apache/init.sls 
web:
  pkg.installed:
    - pkgs:
      - httpd
      - php

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

[root@server1 salt]# salt server2 state.sls apache

除了推送安装服务,还可以去推送文件,入推送更改httpd的配置文件内容

从server2里取来http的配置文件
[root@server1 salt]# scp server2:/etc/httpd/conf/httpd.conf /srv/salt/apache/
[root@server1 salt]# vim apache/httpd.conf #编辑配置文件
Listen 8888	#更改端口为8888,原本是80

然后更改推送文件

[root@server1 salt]# vim apache/init.sls 
web:
  pkg.installed:
    - pkgs:
      - httpd
      - php

  file.managed:
    - source: salt://apache/httpd.conf	#文件来源就是从salt基础路径下找apache/httpd.conf	
    - name: /etc/httpd/conf/httpd.conf	#m目标路径是http的配置文件路径

  service.running:
    - name: httpd
    - enable: True
    - watch:		#监控
      - file: web	#监控的内容是在web声明下的文件,每个声明下只能存在一个状态声明,不能出现两次

推送执行

[root@server1 salt]# salt server2 state.sls apache

[root@server2 ~]# netstat -ntlp	#server2里的端口改为了8888
tcp6       0      0 :::8888                 :::*                    LISTEN      4463/httpd          
远程执行源码安装操作

给server2上配置了apache,在server3上来编译安装nginx

[root@server1 salt]# mkdir -p /srv/salt/nginx/files	#建立目录将nginx源码包放在里面

[root@server1 salt]# vim /srv/salt/nginx/install.sls
nginx:
  pkg.installed:	#安装编译时的依赖性
    - pkgs:
      - openssl-devel
      - gcc
      - pcre-devel

  file.managed:	#传送源码包
    - source: salt://nginx/files/nginx-1.18.0.tar.gz
    - name: /mnt/nginx-1.18.0.tar.gz

  cmd.run:	#执行解压编译等工作
    - name: cd /mnt && tar xfz nginx-1.18.0.tar.gz && cd nginx-1.18.0 && sed -i 's/CFLAGS="$CFLAGS -g"/#CFLAGS="$CFLAGS -g"/g' auto/cc/gcc && ./configure --prefix=/usr/local/nginx --with-http_ssl_module &> /dev/null && make &> /dev/null && make install &> /dev/null
    - creates: /usr/local/nginx	#确认文件是否存在,存在的话就不会在创建编译

nginx-service:	
  file.managed:	#添加nginx启动脚本
    - source: salt://nginx/files/nginx.service
    - name: /usr/lib/systemd/system/nginx.service

  service.running:	#运行nginx
    - name: nginx
    - enable: True
    - reload: True

启动脚本是在:https://www.nginx.com/resources/wiki/start/topics/examples/systemd/ 网址里的模板使用就可以

[root@server1 salt]# vim /srv/salt/nginx/files/nginx.service
[Unit]
Description=The NGINX HTTP and reverse proxy server
After=syslog.target network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target

[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid	
ExecStartPre=/usr/local/nginx/sbin/nginx -t
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/sbin/nginx -s reload
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

如果需要推送更改配置文件就和apache的方式一样,推送配置文件,在启动项里添加watch监控变化

执行推送,没有问题就可以在server3上看到启动了

[root@server1 salt]# salt server3 state.sls nginx.install
高级推送

可以在一个sls文件里指定多个minion节点的任务进行批量推送

[root@server1 salt]# vim /srv/salt/top.sls	#在salt基础目录下创建top文件
base:
  'server2':		#一台节点下可以并列指定多个任务模块
    - apache	#让server2执行apache目录里的默认文件任务
  'server3':
    - nginx.install	#让server3执行nginx里的install.sls文件
 
[root@server1 salt]# salt '*' state.highstate 	#高级推送

这样操作会在server2和server3里分别执行指定的模块任务,互不干扰

SaltStack Master安装避坑指南:网络、密钥与配置三重设计 SaltStack 是面向基础设施自动化的开源配置管理框架,其核心控制节点 salt-master 并非传统服务,而是依赖 ZeroMQ 异步通信、PKI 密钥信任和精细化配置边界的拓扑锚点。理解 salt-master 的工作原理,需从网络连通性(4505/4506 端口双向可达)、密钥交换机制(auto_accept 与 autosign_grains 的安全权衡)及配置参数约束(worker_threads、pub_timeout 等能力半径设定)三方面切入。这些技术要素共同决定了 Salt 环境的稳 阅读详情

相关推荐

saltstack安装rpm

这是一个saltstack的rpm安装包的压缩文件,主要是为了方便大家安装和学习saltstack自动化运维工具。

为什么要使用SaltStack进行自动化和编排

在对当时可用的基于Ruby的开源配置管理系统(包括Puppet和Chef)的(慢)速度感到沮丧之后,Thomas S. Hatch在2011年发布了Salt(又名SaltStack平台)。 Hatch使用开源的ZeroMQ消息传递库进行联网,并使用Python作为实现语言。 后来,可扩展性更高的RAET(可靠异步事件传输协议)传输被开发为替代消息队列。 结果是可扩展的自动化系统,通过消息队...

cxt70571的博客 462

saltstack安装包及依赖包

saltstack安装包和依赖包,centos6.8下成功部署

saltstack学习

环境: [root@pc10 ~]# cat /etc/redhat-release Red Hat Enterprise Linux Server release 7.2 (Maipo) [root@pc10 ~]# uname -r 3.10.0-327.el7.x86_64 [root@pc10 ~]# hostname pc10 [root@pc10 ~]# # wget -O /etc/...

weixin_42263577的博客 205

精通 CentOS7 Linux 服务器(四)

配置管理是一个帮助组织多台机器/系统,使它们能够协调执行一个较大过程或运行多个冗余过程的流程。它被军事组织广泛使用来管理其系统,如武器系统、车辆和信息系统。在军事之外,它在 IT 服务管理中被广泛用于大型基础设施处理。仍然有许多 IT 组织使用旧的传统工具,如定制脚本(shell 脚本、expect 脚本等)和手动流程实施来运行重复任务。我们已经充分认识到,这些技术已不再有效,特别是在大规模基础设施中使用时。即使对于小型基础设施,由于配置不断变化,很难跟踪和维护它们。

龙哥盟 762

Linux(企业级)——SaltStack自动化运维

Linux(企业级)——SaltStack自动化运维   saltstack是一个配置管理系统,能够维护预定义状态的远程节点,也是一个分布式远程执行系统,用来在远程节点上执行命令和查询数据等。 1. SaltStack安装与启用 master 端 yum install -y salt-master #安装master端 systemctl enable --now salt-master #设置master自启动并开启 mionin端 yum install -y salt-minion v

weixin_45699877的博客 246

saltstack(十一):saltstack 生产建议

saltstack 生产建议 saltstack操作应该是完全可控,可查的。 1、不建议使用salt的File模块,做目录管理和代码部署,我觉得有Jenkins+git/svn这种会更好   除非,命令编排的状态管理,例如 压缩包,file.managed,再通过cmd.run执行部署 ,其实有更好的方式。 2、配置管理,不建议使用salt管理项目的配置文件。   分层管理,salt只管...

weixin_30338743的博客 134

企业saltstack简介及其部署应用及其推送相应的服务

一.saltstack简介 1.saltstack简介 Saltstack是基于Python开发的一套C/S架构,具备Puppet、Ansible功能于一身的配置管理工具,功能十分强大,各模块融合度及复用性极高;使用号称世界上最快的消息队列ZeroMQ使得Saltstack能够秒级在数万台服务器上进行各种操作,而且使用RAS Key方式确认身份,传输采用AES加密,安全性能更高; Salt...

weixin_44224288的博客 420

企业实战--saltstack自动化运维(使用 Saltstack 远程部署 nginx)

1、准备源码包: [root@server1 salt]# pwd /srv/salt [root@server1 salt]# ls apache _modules nfs nginx top.sls [root@server1 salt]# cd nginx/ [root@server1 nginx]# ls nginx-1.16.1.tar.gz 2、编辑init文件安装依赖性及解压源码包: [root@server1 nginx]# vim init.sls [root@server1 n

chitung_hsu的博客 221

SaltStack入门

SaltStack部署 saltstack介绍 自动化运维工具 作为一个运维人员,很大一部分工作是在业务的配置管理和状态维护以及版本发布上,而当业务场景及公司规模上了一定规模后,人为手工的去做这些工作将变得极其困难,此时我们将需要利用一些自动化运维的工具来达到批量管理的目的。 常用的自动化运维工具有: puppet ansible saltstack 三者区别: puppet: 一般实现在多个节点部署agent,定时获取该节点的配置信息,根据配置信息配置此节点,如果配置失败,将继续执行,直到成功。

世间万事,风云变幻,苍黄翻覆,纵使波橘云诡,但制心一处,便无事不成。天定胜人,人定兮胜天。 230

Linux企业级自动化运维——SaltStack实现haproxy负载均衡

Linux自动化运维——SaltStack实现haproxy负载均衡 文章目录Linux自动化运维——SaltStack实现haproxy负载均衡实验环境注:三台主机已经配置好master及minion的环境,创建好默认数据配置目录,并且编写好了apache和nginx自动安装部署脚本。实验操作1.添加多节点推送1.1 添加top.sls文件,定义运行环境以及所需文件注:需要将apache目录中的...

Leslie_qlh的博客 835

自动化运维工具saltstack安装与部署(1)

Saltstack 简介 • Saltstack是基于python开发的一套C/S架构配置管理工具 • 使用SSL证书签方的方式进行认证管理 • 底层使用ZeroMQ消息队列pub/sub方式通信 – 号称世界上最快的消息队列ZeroMQ能快速在成千上万台主机上进行各种操作 – 采用RSA Key方式确认身 主要功能: • Saltstack最主要的两个功能是:配置管理与远程执行 ...

Logbook的博客 753

saltstack安装

saltstack源码安装包,无联网时安装使用。

Linux企业实战-----saltstack的部署与使用

实验环境: 172.25.1.1 作为master 172.25.1.2 作为minion 172.25.1.3 作为minion 1.saltstack 介绍 saltstack是一个配置管理系统,能够维护预定义状态的远程节点。 saltstack是一个分布式远程执行系统,用来在远程节点上执行命令和查询数据。 saltstack是运维人员提高工作效率、规范业务配置与操作的利器。 Salt的核心功能: 命令发送到远程系统是并行的而不是串行的 使用安全加密的协议 使用最小最快的网络载荷 提供简单的编程接

zxn_0823的博客 408

企业saltstack的实现keepalive高可用集群

部署如下 实验环境: 主机名(IP) 服务 server1(172.25.254.1) salt-master server2(172.25.254.2) salt-minion,keeplived server3(172.25.254.3) salt-minion,keeplived 1.在server1上的saltstack配置目录/srv/salt下建立相应的k...

weixin_44224288的博客 223

saltstack

认识自动化运维 传统运维效率低,大多工作人为完成 传统运维工作繁琐,容易出错 传统运维每日重复做相同的事情 传统运维没有标准化流程 传统运维的脚本繁多,不能方便管理 自动化运维就是要解决上面所有问题、 常见自动化运维工具  Puppet (www.puppetlabs.com) 基于rubby开发,c/s架构,支持多平台,可管理配置文件、用户、cron任务、软件包、系统服务等...

aaa978464597的博客 897

【云平台管理】SaltStack部署Nginx高可用

在控制主机上再次访问VIP地址,后端一个Nginx节点正常提供服务,高可用结构正常。查看Haproxy的状态,显示minion已经宕机。

weixin_73059729的博客 894

企业 Saltstack 里的Job管理

Job简介 master在下发指令任务时,会附带上产生的jid。 minion在接收到指令开始执行时,会在本地的/var/cache/salt/minion/proc目录下产生该jid命名的文件,用于在执行过程中master查看当前任务的执行情况。 指令执行完毕将结果传送给master后,删除该临时文件。 我们在推送后看的输出结果就是,就是产生的job文件 当处于图形化管理的时候,推送的结果是看不到的,而这些存放结果的job文件,就是查看推送成功与否的重要指示

Howei__的博客 338

01 saltstack入门

saltstack入门1. saltstack介绍1.1 自动化运维工具1.2 saltstack的特点1.3 saltstack服务架构2. saltstack四大功能与四大运行方式3. saltstack组件介绍4. saltstack安装与最小化配置4.1 在控制机上安装saltstack主控端软件4.2 在被控机上安装salt-minion客户端4.3 saltstack配置文件5. saltstack认证机制6. saltstack远程执行7. salt命令使用 1. saltstack介绍 1

巅峰产生虚伪的拥护,黄昏见证虞城的信徒。 267
上一篇: 企业 docker安全控制
下一篇: 企业 Saltstack 数据采集系统
Howei__
博客等级 码龄7年 42粉丝 95原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Howei__

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值