saltstack1
saltstack三种运行模式:
local本地、master/minion(类似于agent)、salt ssh
saltstack三大功能:
远程执行、配置管理、云管理
saltstack安装:1、使用官方进行yum安装 2、自建yum源进行安装
node1:
1 2 3 4 | wget https: //repo .saltstack.com /yum/redhat/salt-repo-2017 .7-1.el6.noarch.rpm yum install salt-repo-2017.7-1.el6.noarch.rpm yum clean expire-cache yum install salt-master salt-minion |
修改minion配置:/etc/salt/minion
master: 指向master节点ip
node2:
1 2 3 4 | wget https: //repo .saltstack.com /yum/redhat/salt-repo-2017 .7-1.el6.noarch.rpm yum install salt-repo-2017.7-1.el6.noarch.rpm yum clean expire-cache yum install salt-minion |
修改minion配置:/etc/salt/minion

查看下配置文件:
1 2 3 4 5 | [root@node1 ~] # egrep -v "^#|^$" /etc/salt/master [root@node1 ~] # egrep -v "^#|^$" /etc/salt/minion master: 192.168.44.134 [root@node2 ~] # egrep -v "^#|^$" /etc/salt/minion master: 192.168.44.134 |
启动两节点上的服务:
1 2 3 4 5 6 7 8 9 10 11 12 13 | [root@node1 ~] # /etc/init.d/salt-master start Starting salt-master daemon: [确定] [root@node1 ~] # /etc/init.d/salt-minion start Starting salt-minion:root:node1 daemon: OK [root@node1 ~] # netstat -tunlp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID /Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1265 /sshd tcp 0 0 0.0.0.0:4505 0.0.0.0:* LISTEN 2797 /python2 .7 tcp 0 0 0.0.0.0:4506 0.0.0.0:* LISTEN 2803 /python2 .7 [root@node2 ~] # /etc/init.d/salt-minion start Starting salt-minion:root:node2 daemon: OK |
显示当前未连接上master的minion节点:
1 2 3 4 5 6 7 8 9 10 11 | [root@node1 master] # tree . ├── master.pem ├── master.pub ├── minions ├── minions_autosign ├── minions_denied ├── minions_pre 还没有成为master的minion节点 │ ├── node1 │ └── node2 └── minions_rejected |
1 2 3 4 5 6 7 | [root@node1 master] # salt-key Accepted Keys: Denied Keys: Unaccepted Keys: 未同意的key有两个,node1和node2上的minion node1 node2 Rejected Keys: |
1 2 3 4 5 6 7 8 | [root@node1 master] # salt-key -a node* The following keys are going to be accepted: Unaccepted Keys: node1 node2 Proceed? [n /Y ] Y Key for minion node1 accepted. Key for minion node2 accepted. |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | [root@node1 master] # tree . ├── master.pem ├── master.pub ├── minions │ ├── node1 │ └── node2 ├── minions_autosign ├── minions_denied ├── minions_pre └── minions_rejected salt-key: [root@node1 ~] # salt-key -L Accepted Keys: node1 node2 Denied Keys: Unaccepted Keys: Rejected Keys: |
1、test.ping:类似于zabbix的agent的ping,test是一个模块,ping是模块中的方法
1 2 3 4 5 | [root@node1 ~] # salt '*' test.ping node2: True node1: True |
2、cmd.run:执行所有命令的模块
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | [root@node1 ~] # salt "*" cmd.run "uptime" node1: 12:04:22 up 2:32, 2 users , load average: 0.00, 0.00, 0.00 node2: 12:04:22 up 23:28, 1 user, load average: 0.07, 0.02, 0.00 [root@node1 ~] # salt "*" cmd.run "df -h" node2: Filesystem Size Used Avail Use% Mounted on /dev/mapper/vg_node2-lv_root 16G 3.5G 12G 24% / tmpfs 932M 12K 932M 1% /dev/shm /dev/sda1 485M 32M 429M 7% /boot node1: Filesystem Size Used Avail Use% Mounted on /dev/mapper/vg_node1-lv_root 16G 2.9G 12G 20% / tmpfs 932M 28K 932M 1% /dev/shm /dev/sda1 485M 32M 429M 7% /boot |
1 2 3 4 5 6 7 8 9 10 | [root@node1 salt] # salt 'node1' grains.ls 列出所有的grains信息 node1: - SSDs - biosreleasedate - biosversion - cpu_flags - cpu_model - cpuarch - disks - dns |
1 2 3 4 5 | [root@node1 salt] # salt 'node1' grains.item fqdn 获取某一个grains的item node1: ---------- fqdn: node1 |
或者使用get方法:
1 2 3 | [root@node1 salt] # salt 'node1' grains.get fqdn 获取某一个grains的值 node1: node1 |
显示minion端的操作系统:
1 2 3 | [root@node1 salt] # salt 'node1' grains.get os 获取某一个grains的值 node1: CentOS |
在操作系统是CentOS上执行某命令:
1 2 3 4 5 6 7 8 9 10 | [root@node1 salt] # salt -G os:CentOS cmd.run 'w' -G:以grains类型作匹配 node1: 13:04:59 up 3:32, 2 users , load average: 0.00, 0.00, 0.00 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root pts /0 192.168.44.1 11:42 0.00s 0.54s 0.35s /usr/bin/python root pts /1 192.168.44.1 11:49 28:30 0.04s 0.04s - bash node2: 13:04:59 up 1 day, 29 min, 1 user, load average: 0.00, 0.00, 0.00 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root pts /0 192.168.44.1 11:42 28:36 0.08s 0.08s - bash |
1 2 3 4 5 6 7 8 9 | [root@node1 salt] # salt "*" grains.item roles 获取roles这个item的grains信息 node1: ---------- roles: - webserver - memcache node2: ---------- roles: |
grains存在于minion端的配置文件中,可以使用配置grains进行将minion打一个标签,然后通过使用grains进行匹配,执行某操作:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | [root@node1 salt] # egrep -v "^$|^#" /etc/salt/minion master: 192.168.44.134 grains: roles: - webserver - memcache 修改了配置文件,需要重启才能生效: [root@node1 salt] # /etc/init.d/salt-minion restart Stopping salt-minion:root:node1 daemon: OK Starting salt-minion:root:node1 daemon: OK 执行操作: [root@node1 salt] # salt -G "roles:memcache" cmd.run 'echo "hello node1"' node1: hello node1 -G "roles:memcache" :匹配刚刚在minion端配置文件中的roles定义 |
当然如果不想将grains配置写在minion的配置文件中,那么可以将grains配置单独写在/etc/salt/grains中:匹配某一个minion端执行某一个命令
1 2 3 4 5 6 7 8 9 10 11 | [root@node1 salt] # ll /etc/salt/grains,该grains需要事先进行创建 比如: [root@node1 salt] # cat /etc/salt/grains roles: nginx [root@node1 salt] # /etc/init.d/salt-minion restart Stopping salt-minion:root:node1 daemon: OK Starting salt-minion:root:node1 daemon: OK [root@node1 salt] # salt -G "roles:nginx" cmd.run 'echo "node1 nginx"' No minions matched the target. No command was sent, no jid was assigned. ERROR: No return received |
报错原因:/etc/salt/grains 改配置文件中的key为roles与minion中的key值roles一致,导致冲突了,修改该key就可以解决
1 2 3 4 5 6 7 8 | [root@node1 salt] # cat /etc/salt/grains web: nginx [root@node1 salt] # /etc/init.d/salt-minion restart Stopping salt-minion:root:node1 daemon: OK Starting salt-minion:root:node1 daemon: OK [root@node1 salt] # salt -G "web:nginx" cmd.run 'echo "node1 nginx"' node1: node1 nginx |
pillar:只有在master配置文件中才会用到设置pillar
默认pillar没有打开
1 2 3 4 5 | [root@node1 salt] # salt "*" pillar.items node1: ---------- node2: ---------- |
需要在master配置文件中开启:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | [root@node1 ~] # egrep -v "^#|^$" /etc/salt/master file_roots: base: - /srv/salt pillar_opts: True [root@node1 ~] # /etc/init.d/salt-master restart Stopping salt-master daemon: [确定] Starting salt-master daemon: [确定] [root@node1 ~] # salt "*" pillar.items node2: ---------- master: ---------- __role: master allow_minion_key_revoke: |
pillar支持环境,base环境或其他,pillar也有一个入口目录,入口文件top file,top file必须放在base环境下面,打开base环境设置:
1 2 3 4 5 6 | [root@node1 ~] # egrep -v "^#|^$" /etc/salt/master pillar_roots: base: - /srv/pillar 创建该文件:[root@node1 ~] # mkdir /srv/pillar 重启master服务:[root@node1 ~] # /etc/init.d/salt-master restart |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | [root@node1 pillar] # cat apache.sls {% if grains[ 'os' ] == 'CentOS' %} apache: httpd {% elif grains[ 'os' ] == 'Debian' %} apache: apache2 {% endif %} [root@node1 pillar] # cat top.sls base: '*' : - apache 将pillar的True再次修改为False,重启master,查看上面编写的sls文件是否已经生效 [root@node1 pillar] # salt '*' pillar.items node2: ---------- apache: httpd node1: ---------- apache: httpd 设置完了pillar,需要进行刷新才能够使用: [root@node1 pillar] # salt '*' saltutil.refresh_pillar node2: True node1: True [root@node1 pillar] # salt -I 'apache:httpd' test.ping 刷新了才能调用pillar的设置,-I表示使用pillar匹配 node2: True node1: True |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!