salt灵活性强大,能够进行大规模部署,也能进行小规模的系统部署。salt的设计架构适用于任意数量的服务器,从少许本地网络系统到跨越数个数据中心,拓扑架构都是c/s模型,配置简单。html
无论是几台、几百台、几千台服务器,均可以使用salt在一个中心节点上进行管控,灵活定位任意服务器子集来运行命令。 python
Salt是python编写的,支持用户经过python自定义功能模块,也提供了大量的python API接口,用户能够根据须要进行简单快速的扩展。nginx
参考学习:http://www.javashuo.com/article/p-cfvzqlkb-dr.htmlshell
在远程执行系统中,salt用python经过函数调用完成任务。json
运行salt依赖包vim
python zeromq pyzmp pycrypto msgpack-python yaml jinja2
语法规则 大小写敏感 使用缩进表示层级关系 缩进时禁止tab键,只能空格 缩进的空格数不重要,相同层级的元素左侧对其便可 # 表示注释行 yaml支持的数据结构 对象: 键值对,也称做映射 mapping 哈希hashes 字典 dict 冒号表示 key: value key冒号后必须有 数组: 一组按次序排列的值,又称为序列sequence 列表list 短横线 - list1 纯量: 单个不可再分的值 对象:键值对 yaml first_key: second_key:second_value python { 'first_key':{ 'second_key':'second_value', } }
环境准备:数组
准备2台机器: 192.168.58.137 master 192.168.58.138 minion1 minion能够由多台机器,这里拿一台机器演示
master和minion 分别须要安装不一样的软件包浏览器
master上: yum install salt-master -y minions上: yum install salt-minion -y
master和minion1配置hosts文件服务器
[root@master ~]# vi /etc/hosts 192.168.58.137 master 192.168.58.138 minion1 #经过Xshell左下角所有会话口:ping master 或者 ping minion1 #有回应表示能ping通,表示DNS解析都过了 iptables -F 将三台机器关闭防火墙服务 systemctl disable firewalld 永久关闭防火墙
修改配置前先备份:master minion网络
[root@minionl ~]# cp /etc/salt/minion /etc/salt/minion.bck [root@master ~]# cp /etc/salt/master /etc/salt/master.bck
修改salt-master以及salt-minion的配置文件
minion1配置修改以下 master: master master_port: 4506 user: root id: s21minion1 acceptance_wait_time: 10 log_file: /var/log/salt/minion #master: master #填写master的主机名, #master_port: 4506 #填写master接收响应的端口号 #user: root #以root执行 #id: s21minion2 #这个id是,master在管理minion界面中,显示的名字 master修改以下 interface: 0.0.0.0 publish_port: 4505 user: root worker_threads: 5 ret_port: 4506 pidfile: /var/run/salt-master.pid log_file: /var/log/salt/master
systemctl start salt-master systemctl start salt-minion
salt-key -L #列出master管控的全部key信息 Accepted Keys: #已接收的密钥 Denied Keys: #拒绝密钥 Unaccepted Keys: #发现密钥 s21minion1 Rejected Keys:
在master上敲打: salt-key -f s21minion1 在minion上敲打 : salt-call --local key.finger [root@master ~]# salt-key -f s21minion1 Unaccepted Keys: s21minion1: fd:27:e6:20:7b:32:74:64:39:fb:9e:d8:de:d6:05:62:53:1f:0b:8e:5c:c4:4d:d4:76:39:d3:c2:b4:c8:67:eb [root@minionl ~]# salt-call --local key.finger local: fd:27:e6:20:7b:32:74:64:39:fb:d6:05:62:53:1f:0b:8e:5c:c4:4d:d4:c2:b4:c8:67:eb #密钥都同样表示没有问题
salt-key -A #接收全部未被管控的秘钥 [root@master ~]# salt-key -A
[root@master ~]# salt "*" test.ping s21minion1: True #返回True表示存活 #转换json展现: [root@master ~]# salt "*" --out=json test.ping { "s21minion1": true }
[root@master ~]# salt "*" --summary cmd.run "hostname" s21minion1: minionl #cmd是超级模块,全部shell命令都能执行 #返回全部minion的主机名字.
[root@master ~]# salt "*" cmd.run "yum install nginx -y" #cmd是超级模块,全部shell命令都能执行
[root@master ~]# salt "*" cmd.run "yum install nginx -y" #浏览器访问http://192.168.58.138/ 有响应页面,成功
[root@master ~]# salt "*" pkg.version "nginx" s21minion1: 1:1.12.2-3.el7
[root@master ~]# salt "*" service.stop "nginx" s21minion1: True
[root@master 192.168.11.72 ~]$salt 'slave' grains.items
[root@master ~]# salt "s21minion1" grains.item fqdn_ip4 s21minion1: ---------- fqdn_ip4: - 192.168.58.138 [root@master ~]# salt "s21minion1" grains.item fqdn_ip4 --out=json #生成json格式 { "s21minion1": { "fqdn_ip4": [ "192.168.58.138" ] } }
import salt.client local = salt.client.LocalClient() local.cmd("s21minion1","cmd.run",["touch /tmp/heihei"])
[root@minionl ~]# cd /tmp [root@minionl tmp]# ls heihei vmware-root #能够看到建立heihei文件