今天有时间把以前研究过的saltstack梳理总结下 -:)
salt是干什么的我就不多说了, 大家Google下资料很多的, 简单来说就是func+puppet:
- 配置文件管理
- 远程命令调用
- Crontab管理部署
salt底层使用ZMQ通信, Python编写, 部署比较简单, 很容易管理上万台server.
- 部署
salt采用C/S架构, 分为Master和Minion; Master即为中心管控机, Minion则为客户端, 接受管控机的管理维护.
部署比较简单, 去官网下载对应的Master和Minion版本; 安装就OK了.
yum install salt-master -y
yum install salt-minion -y
配置
Master端配置
worker_threads: 16 auto_accept: True open_mode: True timeout: 300 master_tops: ext_nodes: "/usr/bin/ext_nodes.py" file_roots: base: - /u01/salt/env/base
参数的含义:
- worker_threads: salt master端工作的线程数
- auto_accept: salt master自动接收minion(当minion注册过来时, 只有当master接受后才可以进行通信)
- open_mode: 保持加密, 但会关闭权限验证, 可以根据自己的安全级别配置
- timeout: master和minion通信的超时时间
- master_tops: 代替生成sls数据(后面找时间详细讲下, 这块的作用还是很大的)
- file_roots: 初始定义环境以及state文件
Minion端配置
master: - saltstack.online.xxxxxxxxxxx.net - <master-ip-address1> - <master-ip-address1> - <master-ip-address1> - <master-ip-address1> - <master-ip-address1> id: <minion-id> return: minion_return
参数的含义:
- master: 配置master的信息, 可以配置多个master源, minion会逐一去做注册(后面在HA部署上很有用)
- id: 表示minion去master注册的id信息, 可以用hostname(具有唯一性的)
- return: 表示对minion进行变更后的日志收集(可以入库, 需要二次开发)
测试
远程命令
$ salt '<minion-id>' test.ping <minion-id>: True $ salt '<minion-id>' cmd.run 'uptime' <minion-id>: 20:58:28 up 91 days, 11:37, 1 user, load average: 0.79, 0.95, 1.02
Crontab管理
top文件(top.sls)
$ cat top.sls base: '<minion-id>': - crontab
crontab文件(init.sls)
$ cat ./crontab/init.sls date > /tmp/crontest: cron.present: - identifier: Reno_crontest - comment: Salt_crontest - user: root - minute: 7 - hour: 5
推送crontab内容, e.g.
$ salt '<minion-id>' state.highstate
日志信息
<minion-id>: ---------- ID: date > /tmp/crontest Function: cron.present Result: True Comment: Cron date > /tmp/crontest added to root's crontab Changes: ---------- root: date > /tmp/crontest Summary ------------ Succeeded: 1 Failed: 0 ------------ Total: 1
minion端验证crontab信息
$ crontab -l # Lines below here are managed by Salt, do not edit # Salt_crontest SALT_CRON_IDENTIFIER:Reno_crontest 7 5 * * * date > /tmp/crontest
总结:
- 以上的测试是在master端主动推送的, 当然可以采取从minion上主动拉取, 大家可以自己去玩下;
- crontab中init.sls的分, 时等信息是可以随机化的, 使用random代替具体的value;
- 也可以更新已经存在的crontab信息;
以后有机会单独对crontab做总结.
配置文件推送
top文件(top.sls)
$ cat top.sls base: '<minion-id>': - file
crontab文件(init.sls)
$ cat ./crontab/init.sls /etc/salt/minion: file.managed: - source: salt://minion_conf/minion - name: /etc/salt/minion - user: root - group: root - mode: 640 cmd.wait: - name: /etc/init.d/salt-minion restart - watch: - file: /etc/salt/minion
类似crontab的测试方法, 有兴趣大家可以去测试玩玩.
salt执行流程
salt二次开发
salt使用轻量级, 易部署, 易使用. 可以很轻松的使用salt完成线上千万服务器的管理维护, 当然除了这些基本功能的使用, 我们还使用比较高级的, 譬如: grans, pillar, returner等等. 另外, 还做了二次开发, 白屏化, 最主要的是我们实现了可并发, 可灰度, 可回滚!
以后有机会再一一分享吧 -_-
困了, 早点去睡觉了, 明天早起做OceanBase升级 -:)
From reno
2015-07-02 21:57:00