centos 6.x  安装并使用saltstack
1.安装   
环境包
yum -y install python-crypto m2crypto PyYAML python-mako python-setuptools Cython
安装EPEL源
wget -c http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
rpm -ivh epel-release-6-8.noarch.rpm
然后使用yum安装
yum -y install salt-master  //master
yum -y install salt-minion  //client
2.基本配置
master端:
interface: 0.0.0.0 //侦听地址
publish_port: 4505 //salt的消息发布系统
user: root  //salt使用的用户
max_open_files: 100000 //salt最大文件打开数
worker_threads: 5   //salt启动时的线程数,如果master运行慢,增加线程数
ret_port: 4506  //salt用来验证和任务处理的端口,即client连接master的端口
auto_accept: True //默认为false,这个是自动认证,不打开需要用salt-key -A 命令来进行手动认证
root_dir: / //家目录
pki_dir: /etc/salt/pki/master   //这个目录用来存放公钥
keep_jobs: 24   //任务被缓存的时间,以小时为单位
timeout: 5  //默认超时时间
state_top: top.sls
file_roots:         //
  base:
     - /srv/salt
pillar_roots:
  base:
     - /src/pillar
log_file: /var/log/salt/master  //日志位置
log_level: debug        //日志级别,默认为warning
minion端:
master: 192.168.1.1 //这个是salt master端的ip或者域名都可以
id:1    //标识,这台minion在salt master上的标识,可以随便使用,推荐使用这种方法将id写死。还有一种方法是使用hostname来进行标识。
master_port: 4506 //master上用来认证和任务返回的端口
user:root    //运行salt的用户
pidfile: /var/run/salt-minion.pid //pid文件
pki_dir: /etc/salt/pki/minion   //pki公钥目录
cachedir: /car/cache/salt/minion //缓存目录
log_file: /var/log/salt/minion //日志文件
log_level: debug //日志级别,默认为warning
3.启动
/etc/init.d/salt-master start
/etc/init.d/salt-minion start
启动完成后查看minion端的log
会发现错误:
2014-02-24 21:27:25,523 [salt.crypt ][ERROR   ] The Salt Master has cached the public key for this node, this salt minion will wait for 10 seconds before attempting to re-authenticate
这是由于auto_accept: True这个值设置为false,这个时候需要在master端执行salt-key -A 来验证
4。基本使用
salt 'id' cmd.run 'command'
id是在minion中设置的值,cmd.run是salt的方法,command是要执行的命令
salt对单台执行命令:
[root@localhost ~]# salt '152' cmd.run 'uname -a'
152:
    Linux cs.test.com 2.6.32-358.el6.i686 #1 SMP Thu Feb 21 21:50:49 UTC 2013 i686 i686 i386 GNU/Linux
[root@localhost ~]#
按组批量执行命令:
[root@localhost srv]# salt -N group1 test.ping
152:
    True
121:
    True
[root@localhost srv]#
做法:
编辑/etc/salt/master文件
找到nodegroups:取消掉注释
配置
group1: 'L@152,121'  //这里 group1是标识符,152和121是client端的id标识符,L代表是有多个客户端。另外,注意缩进,group1和nodegroups不能并齐,客户端ID用,分隔
即:
nodegroups:
    group1: 'L@152,121'
如果要对所有客户端执行,直接使用salt '*' 即可
附:group2: 'G@os:debian'这个的意思是针对系统为debian的操作系统
执行命令可以为,salt -N group2 test.ping
或者用
salt -G 'os:centos' test.ping 来匹配系统为centos的机器执行test.ping测试
salt批量下发文件:
使用salt-cp这个命令来完成
[root@localhost ~]# salt-cp -N group1 testfile  /tmp/
{'121': {'/tmp/testfile': True}, '152': {'/tmp/testfile': True}}
成功下发
5.salt sls文件定制系统
方法:
    在配置文件中,我们定义的文件目录是在/srv/salt下,在/srv/salt下建立sls文件
    这里以nginx为实例
    [root@localhost salt]# cat nginx.sls
    nginx:
       pkg:
          - installed
    [root@localhost salt]#
    [root@localhost salt]# salt '152' state.sls nginx
152:
----------
    State: - pkg
    Name:      nginx
    Function:  installed
        Result:    True
        Comment:   The following packages were installed/updated: nginx.
        Changes:   nginx: { new : 1.4.5-1.el6.ngx
old :
}
                     
Summary
------------
Succeeded: 1
Failed:    0
------------
Total:     1
[root@localhost salt]#
如果minion端没有安装nginx的话,那么salt会在id为152的client上安装nginx,并返回成功的提示。
注意,由于sls文件是遵从yaml模板和jinja2模板,编写的时候要注意格式,缩进和空格。