一、使用场景:
1. 需要通过日志或cap包等线上机器的日志产出物来进行问题定位分析;
2. 有多台主机, 不同主机需要不同vpn要来回不停切换进行查询;
3. 自主开发的应用,需要持续的改进,不断的更新、发布、部署、调整配置,这不是运维部门喜欢的状态
4. 软件商提供的“产品”无法满足运维部门的要求:无法通过简单的 Q&A 文档保证系统的正常运行,经常需要有一定技术能力的人员解决系统运行过程中各种稀奇古怪的问题。
5. “非专职运维人员”,需要频繁的登录各种服务器,执行一些命令来查看状态或者更改配置。很多操作都是不断的重复。
6. ”重复的工作应该交给程序去做“,所以我自己写过一些脚本。为了避免将脚本上传到几十台服务器并且不时进行更改,我使用salt来进行服务器的批量操作。
二、是什么:
1. 是一个C/S结构的轻量、安全的自运维工具
2. master: 管理端
3. minion: 被管理端
4. 可能是源于python的简约精神,Salt的安装配置和使用简单到了令人发指的地步。任何稍有经验的linux使用者可以在10分钟之内搭建一个测试环境并跑通一个例子(相比之下,puppet可能需要30--60分钟)。
5. Salt使用大名鼎鼎的ZeroMQ作为通讯协议,性能极高。可以在数秒钟之内完成数据的传递
6. 基于ZeroMQ通信,具备很强的扩展性;可以进行分级管理,能够管理分布在广域网的上万台服务器。
三、怎么安装:
1. Add jessie-backports and stretch repositories:
Debian:
echo 'deb http://httpredir.debian.org/debian jessie-backports main' >> /etc/apt/sources.list
echo 'deb http://httpredir.debian.org/debian jessie main' >> /etc/apt/sources.list
2. apt-get install salt-master
3. apt-get install salt-minion
4. 修改minion端的master: xxxx 管理端地址
5. /etc/init.d/salt-minion restart
6. 在管理端接收被管理端的连接, salt-key -L 查看, salt-key -a host-name 允许
四、怎么用:
1. salt '*' test.ping
2. salt -N icg cmd.run 'cat /usr/local/xxx/server-*/logs/*.out' runas=ecp
3. salt执行命令的格式如下:
- salt '<target>' <function> [arguments]
target:执行salt命令的目标,可以使用正则表达式
function:方法,由module提供
arguments:function的参数
target可以是以下内容:
4. 正则表达式
- salt -E 'Minion*' test.ping #主机名以Minion开通
5. 列表匹配
- salt -L Minion,Minion1 test.ping
6. Grians匹配
- salt -G 'os:CentOS' test.ping
os:CentOS(默认存在)是Grains的键值对,数据以yaml保存在minion上,可在minion端直接编辑/etc/salt/grains,yaml格式。或者在master端执行salt '*' grains.setval key "{'sub-key': 'val', 'sub-key2': 'val2'}" ,具体文档(命令salt * sys.doc grains查看文档)
7. 组匹配
- salt -N groups test.ping
如,在master新建/etc/salt/master.d/nodegroups.conf ,yaml格式
8. 复合匹配
- salt -C 'G@os:CentOS or L@Minion' test.ping
9. Pillar值匹配
- salt -I 'key:value' test.ping
/etc/salt/master设置pillar_roots,数据以yaml保存在Master上
10. CIDR匹配
- salt -S '10.252.137.0/24' test.ping
10.252.137.0/24是一个指定的CIDR网段
function是module提供的方法
通过下面命令可以查看所有的function:
- salt '10.252.137.141' sys.doc cmd
function可以接受参数:
- salt '10.252.137.141' cmd.run 'uname -a'
并且支持关键字参数:
- #在所有minion上切换到/目录以salt用户运行uname -a命令。
- salt '10.252.137.141' cmd.run 'uname -a' cwd=/ user=salt
五、非root用户运行
1. chmod 777 /etc/init.d/salt-minion
2. chown -R user:group /etc/salt /var/cache/salt /var/log/salt /var/run/salt
3. cd /etc/salt chmod 777 minion.d chmod 777 pki
4. 修改/etc/salt/minion 中的配置项, user: popo pidfile: /var/log/salt/salt-minion.pid
详见:http://docs.saltstack.cn/ref/configuration/nonroot.html
六、参考:
1. https://docs.saltstack.com/en/latest/topics/installation/debian.html#installation-from-the-debian-raspbian-official-repository
2. https://saltstack.com/ (官网)
3. https://github.com/kerncai/saltstack/blob/master/saltstack%E7%9A%84%E5%AE%89%E8%A3%85%E4%B8%8E%E7%AE%80%E5%8D%95%E9%85%8D%E7%BD%AE.md