SaltStack安装篇
一、基础介绍
1.简介
salt 是一个基础平台管理工具
salt是一个配置管理系统,能够维护预定于状态的远程节点
salt是一个分布式远程执行系统,用来在远程节点上执行命令和查询数据
2.salt的核心功能:
使命令发送到远程系统是并行的而不是串行的
使用安全加密的协议
使用最小最快的网路载荷
提高简单的编程接口
3.salt优点:
saltstack是用python编写,相当于设备是轻量级别的
saltstack通讯层采用zeroMQ实现,使得它很快速
saltstack是开源的,通过python可以自己写模块
4.salt端口说明:
salt-master启动时会启动两个端口
4505:为salt的消息发布专用端口
4506:为客户端与服务端通信的端口
二、CentOS下安装saltstack:
1.安装环境说明:
系统:CentOS6.5:
Python 2.6.6
1 2 3 4 5 | 角色 ip id(minion id) master: 10.10.100.127 id:SN100-127 client: 10.10.100.128 id:SN100-128 client: 10.10.100.129 id:SN100-129 client: 10.10.100.130 id:SN100-130 |
安装EPEL源:
由于目前RHEL官网yum源还没有Saltstack的安装包支持,因此先安装EPEL作为部署Saltstack的默认yum源.
1 | CentOS6版本:rpm -Uvh http: //ftp.linux.ncsu.edu/pub/epel/6/i386/epel-release-6-8.noarch.rpm |
安装Saltstack:
(1.)主服务器安装(主控端)
1 2 3 | #yum install salt-master -y # chkconfig salt-master on # service salt-master start |
使用yum是遇到一个问题:
1 2 3 4 5 6 | 使用yum安装时,遇到一个问题: Loaded plugins: fastestmirror, refresh - packagekit, security Determining fastest mirrors Error: Cannot retrieve metalink for repository: epel. Please verify its path and try again 处理很简单,修改文件“ / etc / yum.repos.d / epel.repo”, 将baseurl的注释取消, mirrorlist注释掉。即可。 |
(2.)从服务器安装(被控端)
1 2 3 | #yum install salt-minion -y #chkconfig salt-minion on #service salt-minion start |
更新Saltstack配置及安装校验。
Saltstack分为两种角色,一种为master(主控端),另一种为minion(被控端),安装完毕后需要对两种角色的配置文件进行修改,下面具体说明.
(1)master主控端配置
1)更新主控端关键项配置:
【/etc/salt/master】
1 2 3 4 5 6 7 8 9 10 | #绑定Master通信IP; interface: 10.10 . 100.127 #自动认证,避免手动运行salt-key来确认证书信任; auto_accept: True #指定Saltstack文件根目录位置 file_roots: base: - / srv / salt |
2)重启saltstack salt-master服务使新配置生效,具体执行以下命令:
1 | #service salt-master restart |
(2)minion被控端配置
1)更新被控端配置:
【/etc/salt/minion】
1 2 3 4 5 | #指定Master主机IP地址; master: 10.10.100.127 #修改被控端主机识别id,建议使用操作系统主机名来配置 id: SN100-128 #或者 sed -i "s@#master: salt@master: 10.10.100.127@g" /etc/salt/minion执行 |
2)重启saltstack salt-minion 服务使新配置生效,具体执行以下命令:
1 | service salt - minion restart |
(3)校验安装结果:
通过test模块的ping方法,可以确认指定被控端设备与主控端是否建立信任关系及连通性是否正常,探测所有被控端采用'*'来代替‘SN100-128’即可,
1 2 3 | [root@SN100 - 127 ~] # salt 'SN100-128' test.ping SN100 - 128 : True |
友情提示:
1 2 3 4 5 6 7 8 9 10 11 | 当 / etc / salt / master没有设置auto_accept: True 时,需要通过salt - key命令来进行证书认证操作,具体操作如下: salt - key - L ,显示已经或未认证的被控端 id ,Accepted Keys为已认证清单,Unaccepted Keys为未认证清单; salt - key - D ,删除所以认证主 id 证书; salt - key - d id ,删除单个 id 证书; salt - key - A ,接受所以 id 证书请求; salt - key - a id ,接受单个 id 证书请求。 |
3.简单测试
1 2 3 4 5 6 7 | [root@SN100 - 127 ~] # salt '*' test.ping SN100 - 128 : True SN100 - 129 : True SN100 - 130 : True |
至此saltstack安装基本完成!
需要注意的知识点:
1.saltstack master端修改配置后不需要重启服务.
改主机名后的操作:
1 2 3 4 5 6 7 8 | 1.minion端: /etc/salt/minion_id //清空 /etc/salt/pki //删除 2.master端: salt-key -d salt_client -y //剔除minion端key 3. 然后重启minion端服务 |
三.利用SaltStack执行远程命令.
SaltStack的一个比较突出的优势是具备执行远程命令的功能,操作及方法与func相似,可以帮助运维人员完成集中化的操作平台。
命令格式: salt '<操作目标>' <方法> [参数]
示例:查看被控主机的内存使用情况.如下.
1 2 3 4 5 6 7 8 | [root@locaohost~]# salt 'SN100-128' cmd.run "free -m" SN100-128: total used free shared buffers cached Mem: 8001 6230 1770 0 222 2057 -/+ buffers/cache: 3950 4051 Swap: 5119 0 5119 #查看SN100-128主机内存使用情况. |
其中针对<操作目标>,SaltStack提供了多种方法对被控端主机(ID)进行过滤,下面列举常用的具体参数。
1.) -E,--pcre,通过正则表达式进行匹配。示例:查询SN100-字符开头的主机id名是否连通,命令: salt -E '^SN100-*' test.ping,运行结果如下.
1 2 3 4 5 6 7 8 9 | [root@localhost ~]# salt -E '^SN100-*' test.ping SN100-128: True SN100-129: True SN100-130: True #正则匹配主机的连通性. |
2.) -L, --list,以主机id名列表的形式进行过滤,格式与python的列表相似,即不同主机id名称使用逗号分隔。示例:获取主机id名为SN100-128,SN100-129;获取完整操作系统发行版名称,命令:salt -L 'SN100-128,SN100-129' grains.item osfullname,如下:
1 2 3 4 5 6 7 8 9 10 11 | [root@localhost~]# salt -L 'SN100-128,SN100-129' grains.item osfullname SN100-128: ---------- osfullname: CentOS SN100-129: ---------- osfullname: CentOS #列表形式匹配主机的操作系统类型 |
3.)-G --grain,根据被控主机的grains信息进行匹配过滤,格式为'<grain value>:<glob expression>',例如,过滤内核为Linux的主机可以写成'kernel:Linux',如果同时需要正则表达式的支持可切换成--grain-pcre参数来执行。示例:获取主机发行版本号为6.4的python版本号,命令:salt -G 'osrelease:6.4' cmd.run 'python -V',运行结果如下。
1 2 3 4 5 6 7 8 9 | [root@localhost ~]# salt -G 'osrelease:6.4' cmd.run 'python -V' SN100-128: Python 2.6.6 SN100-129: Python 2.6.6 SN100-130: Python 2.6.6 #grain形式匹配主机的python版本 |
匹配操作系统发行版本为CentOS的被控端可以通过-G参数来过滤。
1 2 3 4 5 6 7 8 9 | [root@localhost~]# salt -G 'os:CentOS' test.ping SN100-130: True SN100-128: True SN100-129: True #返回True,则表示都是CentOS系统 |
4) -I --pillar,根据被控主机的pillar信息进行匹配过滤,格式为"对象名称:对象值",例如,过滤所有具备'apache:httpd' pillar值的主机。示例:探测具有'nginx:root:/data' 信息的主机连通性,命令:salt -I 'nginx:root:/data' test.ping ,运行结果如下。
1 2 3 4 5 6 7 8 9 | [root@localhost~]# salt -I 'nginx:root:/data' test.ping SN100-128: True SN100-129: True SN100-130: True #pillar形式匹配主机的连通性 |
其中pillar属性配置文件如下:
1 2 | nginx: root: /data |
5.) -N --nodegroup,根据主控端master配置文件中的分组名称进行过滤,(主机信息支持正则表达式、grain、条件运算符等),通常根据业务类型划分,不同业务具备相同的特点,包括部署环境、应用平台、配置文件等。举例分组配置信息如下:
【/etc/salt/master】
nodegroups: group1: 'L@SN100-128,SN100-129,SN100-130' group2: 'L@SN200-131'
其中,L@表示后面的主机id格式为列表,即主机id以逗号分隔;G@表示已grain格式描述;S@表示已IP子网或地址格式描述。
示例:探测group2被控主机的连通性,其命令为:salt -N group2 test.ping .
6.) -C --compound,根据条件运算符not、and、or去匹配不同规则的主机信息。示例:探测SN100开头并且操作系统版本为CentOS的主机连通性,命令如下:
1 | salt -C 'E@^SN100-* and G@os:Centos' test.ping |
其中,not语句不能作为第一个条件执行,不过可以通过以下方法来规避,示例:探测非SN100开头的主机连通性,其命令为:salt -C '* and not E@^SN100-*' test.ping。
7) -S --ipcidr,根据被控主机的IP地址或IP子网进行匹配,示例如下:
1 2 | salt -S 192.168.0.0/16 test.ping salt -S 192.168.1.10 test.ping |
salt-run命令:
判断minion端是否连接到master端
1 2 3 4 5 6 | 语法:salt-run [options] [runner.func] salt-run manage.status #查看所有minion状态 salt-run manage.down #查看所有没在线minion salt-run manged.up #查看所有在线minion salt-run manage.versions #查看版本 |
Salt job id管理
1 2 3 4 5 | salt '*' test.ping -v salt '*' saltutl.running #显示minion当前正在运行的job salt '*' saltutl.kill_job jid #强制退出远程执行的job进程. |
参考文档:https://www.ttlsa.com/saltstack/install-saltstack-on-linux/
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
· .NET 9 new features-C#13新的锁类型和语义
· Linux系统下SQL Server数据库镜像配置全流程详解
· 现代计算机视觉入门之:什么是视频
· 【译】我们最喜欢的2024年的 Visual Studio 新功能
· 个人数据保全计划:从印象笔记迁移到joplin
· Vue3.5常用特性整理
· 重拾 SSH:从基础到安全加固
· 为什么UNIX使用init进程启动其他进程?