I、saltstack介绍
摘抄“葱油拌面 Lax” 翻译的一段
不久前的一天,当我自豪穿着Salt Stack 文化衫的时候,我的女儿看到后就当面问我,“Salt Stack 是什么呀?”
于是,我开始了作出了如下的解释,假如你有很多台服务器而且想要操作这些服务器,你也许需要一台一台的登录这些服务器,每次作出一次操作变更。这些操作可
能是相当简单的,比如重启他们或者检查他们已经运行了多久,更或者,你想要做些更复杂的事情,比如安装软件和按照你的特殊需求来配置他们,也许你只是想要
增加用户并且配置他们的权限。
假如你有百十来台服务器,你应该怎么做?想象一下你每次一台一台的登陆这些服务器,执行同样的命令在这些100台的服务器中并且编辑同一个配置文
件,你可以想象吗?这是多么的苦逼!仅仅更新一下用户的密码策划就要用掉数天的时间,并且你可能出现错误的操作,怎么样通过一个命令一次完成所有服务器的
操作?怎么解决?答案就是,Salt Stack!
简言之,saltstack是用python写的一个命令行工具,主要有两个功能:配置管理(puppet专属),远程执行命令(貌似fabric专属)。
II、安装(yum安装比较方便哈)
1、环境准备
OS 版本:CentOS6.5
master: 192.168.30.135
minion: 192.168.30.131 \192.168.30.133\192.168.30.134
Master就是salt的服务端,可以说是中心机器,minion就是客户端,就是我们即将管理的多台机器。
2、master端安装及配置
#导入EPEL YUM源 rpm -Uvh http://mirror.pnl.gov/epel/6/x86_64/epel-release-6-8.noarch.rpm #服务器master的安装 yum -y install salt-master
配置启动:
vi /etc/salt/master interface: 192.168.30.135 #此处是server端监听的地址。 auto_accept: True #此处是自动接受客户端发送过来的key,如果服务器很多的话,需要开启该功能。 ##启动 service satl-master start
3、client端安装
#导入EPEL YUM源 rpm -Uvh http://mirror.pnl.gov/epel/5/i386/epel-release-5-4.noarch.rpm yum -y install salt-minion
配置启动:
#vi /etc/salt/minion master: 192.168.30.135 #这里改成你的master服务器地址 id: node1 #建议这里修改成主机名,便于master端分辨 #在配置文件末尾加入下面内容,每隔5分钟自动同步master配置,效果等同于在客户端执行salt-call state.highstate或在server端执行 salt ‘*‘state.highstate schedule: highstate: function: state.highstate minutes: 5 ##启动 /usr/bin/salt-minion -d #后台启动 /usr/bin/salt-minion -d #前台启动,方便调试 #注:minion启动后,自动会生成公钥私钥,并把公钥发送到master端。 #minion不监听端口,全靠和master保持长连接,可通过netstat -an|grep ES来查看是否有连接。 #也可以类似service satl-minion start方式启动
III、常用命令使用
1、salt-key证书管理
master端证书存放路径:/etc/salt/pki/master/minions
salt-key -L #查询所有接收到的证书 salt-key -a <证书名> #接收单个证书 salt-key -A #接受所有证书 salt-key -d <证书名> #删除单个证书 salt-key -D #删除所有证书
2、salt执行远程主机命令
salt ‘*‘ test.ping #*为匹配所有主机,test.ping为salt一个函数,注:*号是正则,若分了多个组,可以类似于web*,只匹配web服务器 salt ‘*‘ cmd.run ‘df -h‘ #查看所有主机的磁盘信息,cmd.run执行单个命令 salt ‘*‘ cmd.script salt://hello.sh salt ‘*‘ cmd.script salt://scripts/runme.sh ‘arg1 arg2 "arg 3"‘ #cmd.script执行一个脚本,即把本地脚本拷贝到远程主机上执行,hello.sh要放在指定的文件存放路径,默认是/srv/salt/ salt ‘*‘ state.highstate #向客户端推送master端配置。 salt ‘*‘ cmd.run ‘df -h ‘ -t 5 #超时控制
3、salt分组管理
a、方法一
vim /etc/salt/master 找到 nodegroups去掉注释,见如下: nodegroups: test1: ‘[email protected],node2‘ test2: ‘[email protected]:CentOS and target‘ 重启master,service salt-master restart 执行分组的命令及结果: [[email protected] ~]# salt -N test1 cmd.run ‘hostname‘ node1: node1.test.com node2: node2.test.com
b、方法二
编辑/etc/salt/master配置文件,在大概12行左右 找到下面的情况去掉注释 #default_include: master.d/*.conf 然后在/etc/salt目录下建立master.d目录,新建一个配置文件,如:group.conf,内容如下: [[email protected] master.d]# more group.conf nodegroups: test1: ‘[email protected],node2‘ test2: ‘[email protected]:CentOS and ttarget‘ 重启后,执行结果和方法一一致
4、salt-run检查客户端up状态
注:该处状态检查salt使用的是test.ping,如果服务器禁ping,则该处不准。
salt-run manage.status #查看所有客户端up/down状态 salt-run manage.up #只显示up状态的客户端 salt-run manage.down #只显示down状态的客户端
5、salt-cp批量拷贝文件
在master端执行:
语法: salt-cp [options] ‘<target>‘SOURCE DEST 示例: salt-cp ‘*‘ /etc/hosts /etc/hosts #把master上的hosts文件分发到所有主机。
IV、salt-ssh
---待完成
V、自动同步文件
1、编辑top.sls
[[email protected] salt]# cat /srv/salt/top.sls base: "*": - test.test
2、在/srv/salt下建立test目录,然后进入test目录,编辑test.sls
[[email protected] test]# more test.sls /home/eric/test/UserParameter.conf: ##minion里放置文件的位置 file.managed: - source: salt://test/UserParameter.conf ##master里面源文件的位置 - backup: minion #当文件发生变化时,都会把原文件备份,备份文件目录:/var/cache/salt/minion/file_backup/ - mode: 744 - user: root - group: root
3、把要同步的配置文件(例如:UserParameter.conf)放到/srv/salt/test下面;/srv/salt目录下的目录结构如下:
[[email protected] salt]# tree . ├── test │ ├── test.sls │ └── UserParameter.conf └── top.sls 1 directory, 3 files