saltstack 和 Puppet Chef 一样可以让你同时在多台服务器上执行命令也包括安装和配置软件。Salt 有两个主要的功能:配置管理和远程执行。这里讲述了saltstack的基本使用方法。
salttack的基本配置
Salt默认使用PyAMl语法( 作为它的模板文件的格式,其他很多模板语言在Salt中是可以使用的。 一定要按照正确的格式书写YAML,比如最基本的,它使用到两个空格代替tab,: 或 - 后面要有空格。
例:
file_roots:
   base:
     - /srv/salt
服务器配置
主控端基本配置
主配置文件/etc/salt/master 
interface: 0.0.0.0
log_file: /var/log/salt/master      # 记录主控端运行日志
key_logfile: /var/log/salt/key      # 记录认证证书日志
客户端配置
编辑/etc/salt/minion
master: 42.121.124.237          # 设置主控端IP
id: ubuntu-server-001           # 设定受控端编号
log_file: /var/log/salt/minion  # 记录受控端运行日志
key_logfile: /var/log/salt/key  # 记录认证证书日志
证书管理
saltstack 主控端是依靠openssl证书来与受控端主机认证通讯的,受控端启动后会发送给主控端一个公钥证书文件,在主控端用 salt-key 命令来管理证书
salt-key -L     # 用来查看证书情况
salt-key -a     # 用来管理接受证书
受控端证书认证后会显示如下情形:
Accepted Keys:
ubuntu-server-001
Unaccepted Keys:
Rejected Keys:
主控端和被控端的证书默认都存放在 /etc/salt/pki/ 中,如果遇到证书不生效的情况下,可在主控端证书存放目录删除受控端证书,重新认证一下。
管理一个服务器应用可以从 软件包,配置文件,服务管理 这个三个最基本角度来出发,要启用配置管理,首先应对受控端进行额外的配置
启用扩展配置文件目录
主控端 /etc/salt/master
default_include:master.d/*.conf
受控端/etc/salt/minion
default_include:master.d/*.conf
配置受控控
?配置受控端,以root用户身份来接受主控端的控制 编辑/etc/salt/minion
user:root
配置受控端同步,每隔60秒与主控端进行同步一次 编辑/etc/salt/minion
schedule:
  highstate:
     function: state.highstate
     seconds: 60
配置主控端
一般来讲,Salt的配置管理指令和文件保存在/srv/salt目录下,这里存放着所有的配置文件,和一些你想要拷贝到从服务器的文件。Salt 的特点之一是包含一个文件服务器。虽然Salt不会在你的主服务器创建系统文件,但是所有的配置管理发生在/srv/salt目录中。
编辑 /etc/salt/master 取消注释即删除#号,配置仓库根目录下的 top.sls 为 默认入口配置文件,这个配置项可以自定义,基本配置如下:
file_roots:
   base:
     - /srv/salt
创建/srv/salt/top.sis目录和文件
base:
   '*':
     - ubuntu.vim
注:base: 默认的的起点配置项:
    '*': 这个引号内的是匹配对象,针对所有受控主机
    ubuntu.vim 就是指资源文件/srv/salt/ubuntu/vim.sls
一个简单的例子:ubuntu 基本系统默是不安装 vim 我们可以利用配置管理把被托管的ubuntu主机全部安装上vim
编辑 /srv/salt/ubuntu/vim.sls
vim:
   pkg:
    - name: vim
     - installed
执行命令:salt '*' state.hightstate
一个更复杂的例子:管理ssh服务,并且使用salt托管配置文件
ssh:
  pkg:
    - name: ssh
    - installed
  service:
    - name: ssh
    - running
    - reload: True
    - watch:
      - file: /etc/ssh/ssh_config
/etc/ssh/ssh_config:
  file.managed:
    - source: salt://ubuntu/ssh_config
    - user: root
    - group: root
    - mode: 644
简要解释一下配置文件
?pkg, service , file 这些都是salt的管理模块,pkg 是包管理模块; file是文件管理模块; service 是包服务管理模块
?模块下一级是各个管理模块配置项的属性,以 service: 模块为例
?name: ssh ubuntu下的服务脚本名称是 ssh
?running 状态是持续运行,如果受控端配置了自动同步,每格一段时间就会对其状态进行检查
?reload: True 是否重载服务
?watch: 监视文件
?最后两条属性的整体含义是如果配置文件 /etc/ssh/ssh_config 发生变化,服务重启更新
?source: salt://ubuntu/ssh_config 托管的配置文件实际存储在 /srv/salt/ubuntu/ssh_config
基本操作的命令通用格式
命令 对象 执行模块 参数
salt '*' cmd.run "ping -c 4 baidu.com"
'*'      操作对象       可以使用salt命令的扩展模式 -E -G ..
cmd.run  执行模块       
参数     传递给执行模块的参数
分组功能
编辑/etc/salt/master
nodegroups:
   UBUNTU: 'ubuntu-12.04-*'
   CENTOS: 'centos-6.4-*'
?测试与受控主机网络是否通畅 
salt '*' cmd.run test.ping
?在全部受控主机行执行命令 
salt '*' cmd.run “uptime”
?使用 -E 按照正则匹配操作对象 
salt -E 'ubuntu*' cmd.run “uptime”
?使用 -N 按照分组匹配操作对象 
salt -N 'UBUNTU-GROUPS' cmd.run “uptime”
?使用 -G 按照查询信息匹配操作对象选项 
salt -G 'cpuarch:x86_64' grains.item num_cpus
查看受控端模块函数帮助信息 
salt '*' sys.doc
查看受控端模块函数帮助信息 
salt '*' sys.doc service
salt-master -d  启动服务
salt-key
salt-key -L 查看证书
salt-key -a Keyname 接受指定的证书
salt-key -A 接受所有未认证的证书
salt-key -D 删除所有证书
salt-key -d Keyname 删除指定的证书
salt-cp 批量复制文件到受控主机
salt-cp '*' /home/vmdirk.img /var/lib/libvirtsh/vmdisk.img
salt-ssh
编辑配置文件/etc/salt/roster
ubuntu-12.04-001:
host: 10.8.0.18
user: root
passwd: root
sudo: True
测试执行 salt-ssh '*' -r "ifconfig -a"
salt-syndic
salt的master和minion的交互很大程度上都和网络有关系,比如在管理多个国家的机器的时候(比如大中华局域网),一个master控制多个master,同时被控制的master又可以控制很多的minion,就好比是在 master 和 minions 之间又加了一层的分布式架构
salt-minion
salt-minion -d 启动服务
saltstack的安装
1.修改主机名/etc/sysconfig/network  修改hosts文件/etc/hosts
2.安装saltstack
应用EPEL源安装saltstack。
#导进EPEL YUM源
rpm -Uvh 
#master的安装
  yum -y install salt-master
#客户端minon安装
yum -y install salt-minion
3.saltstack设置
#master的设置,vim /etc/salt/master添加master侦听的IP地址
# The address of the interface to bind to
interface: 192.168.1.235
#客户端minion的设置,vim /etc/salt/minion,添加master IP地址和minion ID号
# Set the location of the salt master server
master: 192.168.1.235
# clusters.
id: WEB2013-10-023
4.启动saltstack
#saltstack master 设置开机自动启动
/etc/init.d/salt-master start
chkconfig salt-master on
#saltstack minion 设置开机自动启动
/etc/init.d/salt-minion start
chkconfig salt-minion on
5.saltstack master 认证minion key
   Saltstack利用公共密钥加密来包管master战minions的安齐通疑。安装的时分Salt自动死成这些证书,但需要正在master端验证minion的证书来确认master战minion之间是授疑的
#salt-key list 查看证书列表
#salt-key -a id 接受minion的key-id
6.saltstack 测试
salt ‘*’cmd.run test.ping
7.saltstack 分组及测试
修改/etc/salt/master配置文件
# nodegroups:
#   group1: " and bl*.domain.com"
#   group2: ":Debian and foo.domain.com"
nodegroups:
  wwwgroup:  ""
  dbgroup:  "DB2012-08-001"
自动化运维工具saltstack
1.简介
    SaltStack是一个服务器基础架构集中化管理平台,具备配置管理、远程执行、监控等功能,一般可以理解为简化版的puppet和加强版的func。SaltStack基于Python语言实现,结合轻量级消息队列(ZeroMQ)与Python第三方模块(Pyzmq、PyCrypto、Pyjinjia2、python-msgpack和PyYAML等)构建。
特性
2、特性
(1)、部署简单、方便;
(2)、支持大部分UNIX/Linux及Windows环境;
(3)、主从集中化管理;
(4)、配置简单、功能强大、扩展性强;
(5)、主控端(master)和被控端(minion)基于证书认证,安全可靠;
(6)、支持API及自定义模块,可通过Python轻松扩展。
3.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发送指令了。
4.master于minion的连接
SaltStack master启动后默认监听4505和4506两个端口。4505(publish_port)为saltstack的消息发布系统,4506(ret_port)为saltstack客户端与服务端通信的端口。如果使用lsof 查看4505端口,会发现所有的minion在4505端口持续保持在ESTABLISHED状态。
5.SaltStack的通信模式总共分为2种模式:ZeroMQ、REAT,鉴于REAT目前还不是太稳定,我们选择ZeroMQ模式,本次安装采用源码安装的方式
6.依赖组件说明
 python 2.6以上,msgpack-python,yaml,jinja2,markupsafe,apache-libcloud,Requests
 ZeroMQ 3.2以上,pyzmq2.2以上,pycrypto,m2crypto
7.python2.7的安装
#tar xvzf python-2.x.x.x
#./configure --prefix=/usr/local
#make --jobs=`grep processor /proc/cpuinfo | wc -l`
#make install
# 将python头文件拷贝到标准目录,以避免编译saltstack时,找不到所需的头文件
# cd /usr/local/include/python2.7
# cp -a ./* /usr/local/include/ 
## 备份旧版本的python,并符号链接新版本的python
# cd /usr/bin
# mv python python2.6
# ln -s /usr/local/bin/python 
## 修改yum脚本,使其指向旧版本的python,已避免其无法运行
# vim /usr/bin/yum
#!/usr/bin/python  -->  #!/usr/bin/python2.6