Saltstack简介
Salt 是:
一个配置管理系统,能够维护预定义状态的远程节点(比如,确保指定的报被安装,指定的服务在运行);
一个分布式远程执行系统,用来在远程节点(可以是单个节点,也可以是任意规则挑选出来的节点)上执行命令和查询数据;
开发其的目的是为远程执行提供最好的解决方案,并使远程执行变得更好,更快,更简单。
Saltstack(中国用户组 www.saltstack.cn )基于python开发,c/s架构,支持多平台,比puppet轻量,在远程执行命令时非常快捷,配置和使用比puppet容易,能实现puppet几乎所有的功能。
Saltstack的优势:
有master端和minion端,执行的信息比较稳定,不容易丢失信息,或者出现失联主机的情况
有封装好的http-api,我们可以直接启动salt-api就可以通过http协议进行调用。不需要自己进行第二次的封装
基于centos6和centos7的差异,在两个不同的操作系统中安装saltstack也是不一样的。
参考网址:
<a href="https://docs.saltstack.com/en/latest/topics/installation/rhel.html">https://docs.saltstack.com/en/latest/topics/installation/rhel.html</a>
Centos6需要先安装扩展源,然后在进行安装:
Master端
<code>yum </code><code>install</code> <code>–y salt-master</code>
<code>yum </code><code>install</code> <code>–y salt-api</code>
Minion端:
<code>yum </code><code>install</code> <code>-y salt-minion</code>
Saltstack的秘钥安装
Master与Minion认证:
minion在第一次启动时,会在/etc/salt/pki/minion/(该路径在/etc/salt/minion里面设置)下自动生成minion.pem(private key)和 minion.pub(public key),然后将 minion.pub发送给master。master在接收到minion的public key后,通过salt-key命令accept minion public key,这样在master的/etc/salt/pki/master/minions下的将会存放以minion id命名的 public key,然后master就能对minion发送指令了。
<code>salt-key -L 或者salt-key </code><code>#显示所有的key</code>
<code>salt-key -D </code><code>#删除所有认证主机id证书</code>
<code>salt-key -d keys_values -y</code>
<code>salt-key -A </code><code>#接收所有id证书请求</code>
<code>salt-key -a </code><code>id</code> <code>#接受单个id证书请求</code>
1.-E, --pcre,通过正则表达式进行匹配:
salt -E 'web(9|10)*' test.ping -t 1
2. -L, --list, 主机id进行过滤:
salt -L "*app*" cmd.run "df -h"
3. -G, --grain, 根据被控主机的grains信息进行过滤
salt -G 'role:nginx' cmd.run "ls /export"
4. -I, --pillar, 根据被控主机的pillar信息进行过滤
salt -I 'myname:xiang' test.ping -t 5
5. -S, --ipcidr, 根据minion的ip地址进行匹配
salt -S 192.168.1.1 test.ping
salt -S 192.168.1.0/24 test.ping
salt -S 192.168.0.0/16 test.ping
salt -S 192.0.0.0/8 test.ping
6.检查客户端是否挂掉:
salt-run manage.status |head
salt-run manage.down
Saltstack配置文件详解
Saltstack占用两个端口4505和4506
1. 确保master端的4505和4506端口开通
2. Minion的key确实别master接受
3. 通过test.ping 模块,双方都可以ping通
配置文件详解:
<a href="http://note.youdao.com/noteshare?id=ef288d8d0abb8f3e8bf6aa5b87bfabd3&sub=wcp1478526434731795">http://note.youdao.com/noteshare?id=ef288d8d0abb8f3e8bf6aa5b87bfabd3&sub=wcp1478526434731795</a>
Saltstack的几种模块介绍
在二次开发中开发的模块有2个,如下(Runner、Module):
Runner 模块 在master端执行的 salt-run
Module 模块 通过master同步到minion端, 在minion执行
<code>salt-call saltutil.sync_modules</code>
<code>salt-call saltutil.sync_all</code>
包括:
beacons:
clouds: engines: grains: log_handlers: modules:
output: proxymodules: renderers: returners: sdb:
states: utils:
Grins 模块 记录minion的属性key:value
Pillar模块 记录所有minion通用的属性,然后同步到minion端
<code>salt-call saltutil.refresh_pillar</code>
<code>salt ‘*’ saltutil.refresh_pillar</code>
1. cmd模块
<code>salt ‘*’ cmd.run “</code><code>df</code> <code>-h”</code>
2. ping模块
<code>salt ‘*’ </code><code>test</code><code>.</code><code>ping</code> <code>-t 5 </code><code>#-t 超时时间,秒</code>
3. cp 模块
<code>file_roots:</code>
<code>base:</code>
<code>- </code><code>/export/salt/root</code>
salt根目录:
在master中file_roots定义的路径
salt://test.txt 相当于 /export/salt/root/test.txt
用法:
<code>salt </code><code>'172.17.23.11'</code> <code>cp</code><code>.get_file salt:</code><code>//nscd</code><code>.conf </code><code>/tmp/xiang</code><code>.txt (拷贝文件)</code>
4. cron模块:
<code>salt </code><code>'*'</code> <code>cron</code><code>.raw_cron root (查看定时任务)</code>
<code>salt </code><code>'*'</code> <code>cron</code><code>.set_job root </code><code>'*'</code> <code>'*'</code> <code>'*'</code> <code>'*'</code> <code>1 </code><code>/export/scripts/rm_log</code><code>.sh (设定定时任务)</code>
<code>salt </code><code>'*'</code> <code>cron</code><code>.rm_job root </code><code>/export/scripts/rm_log</code><code>.sh (删除定时任务,写全没效果)</code>
5.dnsutil模块
<code>salt </code><code>'*'</code> <code>dnsutil.hosts_append </code><code>/etc/hosts</code> <code>127.0.0.1 xiang.com</code>
<code>salt </code><code>'*'</code> <code>dnsutil.hosts_remove </code><code>/etc/hosts</code> <code>xiang.com</code>
6.file模块:
<code>salt </code><code>'*'</code> <code>file</code><code>.</code><code>chown</code> <code>/etc/passwd</code> <code>root root</code>
<code>salt </code><code>'*'</code> <code>file</code><code>.copy </code><code>/path/to/src</code> <code>/path/to/dst</code>
<code>salt </code><code>'*'</code> <code>file</code><code>.file_exists </code><code>/etc/hosts</code>
<code>salt </code><code>'*'</code> <code>file</code><code>.directory_exists </code><code>/etc/</code>
<code>salt </code><code>'*'</code> <code>file</code><code>.get_mod </code><code>/etc/passwd</code>
<code>salt </code><code>'*'</code> <code>file</code><code>.set_mod </code><code>/etc/passwd</code> <code>0644</code>
<code>salt </code><code>'*'</code> <code>file</code><code>.</code><code>mkdir</code> <code>/tmp/test</code>
<code>salt </code><code>'*'</code> <code>file</code><code>.</code><code>sed</code> <code>/export/servers/nginx/conf/nginx</code><code>.conf </code><code>'debug'</code> <code>'warn'</code>
<code>salt </code><code>'*'</code> <code>file</code><code>.append </code><code>/tmp/test</code><code>.txt </code><code>"welcome xiang"</code>
<code>salt </code><code>'*'</code> <code>file</code><code>.remove </code><code>/tmp/1</code><code>.txt</code>
7.network模块:
<code>salt </code><code>'*'</code> <code>network.</code><code>dig</code> <code>www.qq.com</code>
<code>salt </code><code>'*'</code> <code>network.</code><code>ping</code> <code>www.qq.com</code>
<code>salt </code><code>'*'</code> <code>network.ip_addrs</code>
8.pkg包管理模块:
管理yum, apt-get等
<code>salt </code><code>'*'</code> <code>pkg.</code><code>install</code> <code>php(安装应用)</code>
<code>salt </code><code>'*'</code> <code>pkg.remove php(移除应用)</code>
<code>salt </code><code>'*'</code> <code>pkg.upgrade (升级所有的软件包)</code>
9.service模块(centos6)
<code>salt </code><code>'*'</code> <code>service.</code><code>enable</code> <code>nginx</code>
<code>salt </code><code>'*'</code> <code>service.disable nginx</code>
<code>salt </code><code>'*'</code> <code>service.restart nginx</code>
Grains
自定义grians(是在minion上定义的)
记录的是客户端上的
grains是在minion启动时搜集一些信息,如操作系统类型,网卡,内核版本,cpu架构等
<code>salt </code><code>"*"</code> <code>grains.</code><code>ls</code> <code>列出所有grains项目名字</code>
<code>salt </code><code>"*app.*"</code> <code>grains.items 列出所有grains项目以及值</code>
<code>salt </code><code>"*"</code> <code>grans.item serialnumber 查看服务器的sn码</code>
<code>(其他以此类推)</code>
grains的信息并不是动态的,并不会实时变化,它只是在minion启动时收集到的
我们可以根据grains收集到的一些信息,做一些配置管理工作
在minion上:
<code>vim </code><code>/etc/salt/grains</code>
<code>role: nginx</code>
<code>env</code><code>: </code><code>test</code>
重启
<code>service salt-minion restart</code>
获取grians:
<code>salt </code><code>"*"</code> <code>grains.item role </code><code>env</code>
或者:
<code>salt -G </code><code>"*"</code> <code>role:nginx cmd.run "</code><code>hostname</code><code>“</code>
<code>salt ‘*’grains.items</code>
(虽然也挺好用,但是很少用,要用也是用pillar)
Pillar
(记录的是服务端上的信息)
pillar(在master上定义)
(yaml语法)
在配置文件中找pillar的文件路劲:创建目录
<code>mkdir</code> <code>/export/salt/pillar</code>
在目录内定义文件:
<code>vim </code><code>top</code><code>.sls</code>
<code>"*"</code><code>:</code>
<code>- </code><code>test</code>
<code>vim </code><code>test</code><code>.sls</code>
<code>conf: xiang</code>
然后
刷新pillar:
<code>salt </code><code>'*'</code> <code>saltutil.refresh_pillar</code>
验证:
<code>salt </code><code>'*'</code> <code>pillar.items conf</code>
<code>salt -I </code><code>'conf:xiang'</code> <code>test</code><code>.</code><code>ping</code>
<code></code>
本文转自 听丶飞鸟说 51CTO博客,原文链接:http://blog.51cto.com/286577399/2067460