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