一、基础介绍
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
角色 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源.
CentOS6版本:rpm -Uvh http://ftp.linux.ncsu.edu/pub/epel/6/i386/epel-release-6-8.noarch.rpm
安装Saltstack:
(1.)主服务器安装(主控端)
#yum install salt-master -y # chkconfig salt-master on # service salt-master start
使用yum是遇到一个问题:
使用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.)从服务器安装(被控端)
#yum install salt-minion -y #chkconfig salt-minion on #service salt-minion start
更新Saltstack配置及安装校验。
Saltstack分为两种角色,一种为master(主控端),另一种为minion(被控端),安装完毕后需要对两种角色的配置文件进行修改,下面具体说明.
(1)master主控端配置
1)更新主控端关键项配置:
【/etc/salt/master】
#绑定Master通信IP; interface: 10.10.100.127 #自动认证,避免手动运行salt-key来确认证书信任; auto_accept: True #指定Saltstack文件根目录位置 file_roots: base: - /srv/salt
2)重启saltstack salt-master服务使新配置生效,具体执行以下命令:
#service salt-master restart
(2)minion被控端配置
1)更新被控端配置:
【/etc/salt/minion】
#指定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 服务使新配置生效,具体执行以下命令:
service salt-minion restart
(3)校验安装结果:
通过test模块的ping方法,可以确认指定被控端设备与主控端是否建立信任关系及连通性是否正常,探测所有被控端采用'*'来代替‘SN100-128’即可,
[root@SN100-127 ~]# salt 'SN100-128' test.ping SN100-128: True
友情提示:
当/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.简单测试
[root@SN100-127~]# salt '*' test.ping SN100-128: True SN100-129: True SN100-130: True
至此saltstack安装基本完成!
需要注意的知识点:
1.saltstack master端修改配置后不需要重启服务.
改主机名后的操作:
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 '<操作目标>' <方法> [参数]
示例:查看被控主机的内存使用情况.如下.
[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,运行结果如下.
[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,如下:
[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',运行结果如下。
[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参数来过滤。
[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 ,运行结果如下。
[root@localhost~]# salt -I 'nginx:root:/data' test.ping SN100-128: True SN100-129: True SN100-130: True #pillar形式匹配主机的连通性
其中pillar属性配置文件如下:
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的主机连通性,命令如下:
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子网进行匹配,示例如下:
salt -S 192.168.0.0/16 test.ping salt -S 192.168.1.10 test.ping
salt-run命令:
判断minion端是否连接到master端
语法: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管理
salt '*' test.ping -v salt '*' saltutl.running #显示minion当前正在运行的job salt '*' saltutl.kill_job jid #强制退出远程执行的job进程.
参考文档:https://www.ttlsa.com/saltstack/install-saltstack-on-linux/