一.Saltstack
1.Saltstack是一个服务器基础架构集中化管理平台,具备配置管理、远程执行、监控等功能;
2.基于Python语言实现,结合轻量级消息队列(ZeroMQ)与Python第三方模块(Pyzmq、PyCrypto、Pyjinja2、python-msgpack和PyYAML等)构建;
3.特点:
部署简单、方便;
支持大部分UNIX/Linux及Windows环境;
主从集中化管理;
配置简单、功能强大、扩展性强;
主控端(master)和被控制端(minion)基于证书认证,安全可靠;
支持API及自定义模块,可通过Python轻松扩展;
二.Saltstack安装
1.安装EPEL
RHEL(CentOS)5版本:rpm -Uvh 下载地址:http://mirror.pnl.gov/epel/5/i386/epel-release-5-4.noarch.rpm
RHEL(CentOS)6版本:rpm -Uvh 下载地址:http://ftp.linux.ncsu.edu/pub/epel/6/i386/epel-release-6-8.noarch.rpm
2.安装Saltstack
1)服务端(主控端)安装:
yum install salt-master -y
chkconfig salt-master on
service salt-master start
2)客户端(被控端)安装:
yum install salt-minion -y
chkconfig salt-minion on
service salt-minion start
3)防火墙设置:
iptables -I INPUT -m state --state new -m tcp -p tcp --dport 4505 -j ACCEPT
iptables -I INPUT -m state --state new -m tcp -p tcp --dport 4506 -j ACCEPT
三.Saltstack配置
1.master主控端配置
1)更新主控端关键项配置:
/etc/salt/master:
#绑定master通信IP
interface: 192.168.1.20
#自动认证,避免手动运行salt-key来确认证书信任
auto_accept:True
#指定Saltstack文件根目录位置
file_roots:
base:
- /srv/salt
2)重启Saltstack salt-master服务使新配置生效:service salt-master restart
2.miniion被控端配置
1)更新被控端关键项配置:
/etc/salt/minion:
#指定master主机IP地址
master:192.168.1.20
#修改被控端主机识别ID,建议使用操作系统主机名来配置
id: my-host
2)重启Saltstack salt-minion服务使新配置生效:service salt-minion restart
3.校验安装结果,通过test模块的ping方法
salt ‘my-host’ test.ping
4.注意:当master的/etc/salt/master没有配置auto_accept:True时,需要通过salt-key命令来进行证书认证:
salt-key -L:显示已经或未认证的被控端id,Accepted Keys为已认证清单,Unaccepted Keys为未认证清单;
salt-key -D:删除所有认证主机id证书;
salt-key -d id:删除单个id证书;
salt-key -A:接受所有id证书请求;
salt-key -a id:接受单个id证书请求;
四.Saltstack远程执行命令
1.命令格式:salt '<操作目标>' '<方法>' '[参数]'
2.针对操作目标的参数:
-E,--pcre:通过正则表达式进行匹配,如salt -E ‘^my-host*’ test.ping;
-L,--list:以主机id名列表的形式进行过滤,如salt -L 'myhost1,myhost2' test.ping;
-G,--grain:根据被控主机的grains信息进行匹配过滤,格式为'<grain value>:<glob expression>';
-I,--pillar:根据被控主机的pillar信息进行匹配过滤,格式为'对象名称:对象值';
-N,--nodegroup:根据主控端master配置文件中的分组名称进行过滤;
-C,--compound:根据条件not、and、or去匹配不同规则的主机信息;
-S,--ipcidr:根据被控主机的IP地址或IP子网进行匹配;
五.Saltstack常用模块及API
1.Archive模块:
1)功能:实现系统层面的压缩包调用,支持gunzip、gzip、rar、tar、unrar、unzip等;
2)实例:
采用gunzip解压包:salt '*' archive.gunzip /tmp/sourcefile.txt.gz
采用gzip压缩包:salt '*' archive.gzip /tmp/sourcefile.txt
3)API调用:client.cmd('*', 'archive.gunzip', ['/PATH/file'])
2.cmd模块:
1)功能:实现远程的命令行调用执行(默认具有root权限;
2)实例:salt '*' cmd.run "free -m"
3)API调用:client.cmd('*','cmd.run',['command'])
3.cp模块:
1)功能:实现远程文件、目录的复制,以及下载URL文件等操作;
2)实例:
将被控主机的/etc/hosts文件复制到被控主机本地的salt cache目录(/var/cache/salt/minion/localfiles/):salt '*' cp.cache_local_file /etc/hosts
将主服务器file_roots指定位置下的目录复制到被控主机:salt '*' cp.get_dir salt://path/to/dir/ /minion/dest
将主服务器file_roots指定位置下的文件复制到被控主机:salt '*' cp.get_dir salt://path/to/file /minion/dest
下载URL内容到被控主机指定位置:salt '*' cp.get_url http:/www.saltshdot.org /tmp/index.html
3)API调用:client.cmd('*','cp.get_file',['salt://path/to/file ', '/minion/dest'])
4.cron模块:
1)功能:实现被控机的crontab操作:
2)实例:
查看指定被控主机的crontab操作:salt 'my-host1' cron.raw_cron root
为指定的被控主机的root用户添加定时任务:salt 'my-host1' cron.set_job root '*' '*' '*' '*' 1 /usr/local/script.sh
删除指定被控主机的root用户的定时任务:salt 'my-host1' cron.rm_job root /usr/local/script.sh
3)API调用:client.cmd('host','cron.set_job',['root', '*' '*' '*' '*' 1 /usr/local/script.sh])
5.dnsutil模块:
1)功能:实现被控主机通用DNS相关操作;
2)实例:
添加指定被控主机hosts的主机配置项:salt '*' dnsutil.hosts_append /etc/hosts 127.0.0.1 ad1.yuk.com,ad2.yuk.com
删除指定被控主机hosts的主机配置项:salt '*' dnsutil.hosts_remove /etc/hosts ad1.yuk.com
3)API调用:client.cmd('*','dnsutil.hosts_append',['/etc/hosts','127.0.0.1','domain1'])
6.file模块
1)功能:被控主机文件常见操作,包括文件读写、权限、查找、校验等;
2)实例:
修改所有被控主机/etc/passwd文件的属组和用户权限:salt '*' file.chown /etc/passwd root root
3)API调用:client.cmd('*','file.remove',['/tmp/file'])
7.其他模块:如iptables模块,network模块,pkg包管理模块,service服务模块,user(系统用户模块),group(系统组模块),paritition(系统分区模块),puppet(puppet管理模块),system(系统重启,关机模块),timezone(时区管理模块),nginx(Nginx管理模块),mount(文件系统挂载模块);
8.salt '*' sys.doc可以查看所有模块、功能及用法。
更多:http://docs.saltstack.com/ref/modules/all/index.html#all-salt-modules