Saltstack 介绍

Saltstack是一个新的基础设施管理工具。 目前处于快速发展阶段, 可以看做是强化的Func+弱化的Puppet的组合。间接的反映出了saltstack的两大功能:远程执行和配置管理。Saltstack 使用 Python 开发的,非常简单易用和轻量级的管理工具。由 Master Minion构成,通过 ZeroMQ 进行通信。

一、Saltstack基本安装

1.安装源

1.1 安装epel源

cd/usr/local/src/

wget 

rpm-ivh epel-release-6-8.noarch.rpm

 

1.2 安装rpmforge

这步很重要,在redhat 6和centos 6的epel源上没有-jinja2。

cat/etc/issue

wget 

rpm-Uvh rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm

2.安装依赖包

Vim /etc/yum.repos.d/epel.repo

[epel]

Baseurl=http://mirrors.hustunique.com/epel/6/x86_64/

 

yum install python-jinja2

 

3.安装saltstack

只需要一台安装master即可,其他的全部安装minion.

3.1 安装salt-master

yum -y install salt-master enablerepr=epel-testing

 

3.2 安装salt-minion

yum -y install salt-minion enablerepr=epel-testing

4.配置saltstack

4.1 minion配置

master前面有两个空格,这行代码表示我要连接的saltstack的master是10.102.36.67:

cat /etc/salt/minion| grep "^  master"

需要修改minion的配置文件/etc/salt/minion中的master选项,进行如下操作:

master: 10.102.36.67

id: 1

id :客户端的标识,用服务端连接时,就是用此标识来连接客户端,

如:salt '1' cmd.run 'df -h'

4.2master配置

master监听10.102.36.67,老样子前面也是有两个空格,否则启动的时候会报错.

cat /etc/salt/master | grep '^  interface'

默认情况下,salt master在所有接口(0.0.0.0)上监听4505和4506两个端口. 如果想bind某个具体的IP,需要对/etc/salt/master配置文件中"interface"选项做如下修改:

interface: 10.102.36.67

修改auto_accept为True,自动接受客户端的KEY,当然也可以这里不设置,手动接受就行,接受方式:salt-key -akeyname (keyname即为客户端刚才设置的id标识)

auto_accept: True

客户端每隔30s 去服务器同步资源,时间可以随便DIY  mintus:  hours:  这样的格式

跟客户端手动执行 salt-call state.highstate命令效果一样;

schedule:

highstate:

    function:  state.highstate

     seconds:  30

5.启动saltstack

5.1 启动master

service salt-master start

5.2启动minion

service salt-minion start

6.测试saltstack

接下来的命令都在master上执行

命令的格式:salt ‘参数’‘对象’命令

6.1 查看minion列表

salt-key –L

6.2接受所有key

salt-key –A

在提示中提示y确认即可.接下来便可以向minion发送命令了

6.3简单测试

salt '*' test.ping

二、Master批量管理配置

服务器端写sls模,他的默认路径在 /srv/salt/下,没有就新建目录,然后新建一个top.sls就跟puppet的入口文件 site.pp 类似。

·        Base: 默认的的起点配置项:

·        '*':这个引号内的是匹配对象,针对所有受控主机

·        rd.sc:就是指资源文件/srv/salt/rd/sc.sls

看rd目录下的资源文件

利用py模式的sls配置文件(其实就是脚本,只要返回yaml格式的字典文件就好了),我们可以将以上的操作简化成1步,思路如下:

1,/srv/pillar/top.sls中编写配置:

base:
 '*':
 - custom

2,使用py模式编写/srv/pillar/custom/init.sls,自动读取pillar配置,例如salt id是:10.1.1.1-centos.game.web,那么project为game,然后根据获取的pillar_root组合成路径/srv/pillar/custom/game/10.1.1.1-centos.game.web.yaml,利用yaml模块从文件中读取信息,返回字典

3,在/srv/salt/top.sls文件中匹配所有的minion

‘*’:
  - centos.public_services

4,/srv/salt/centos/public_services/init.sls文件使用py模式编写,配置会获取对应的minion的pillar信息,如果包含mysql配置信息且配置正确的话,则返回mysql实例的配置。

那现在要怎么使用呢,很简单,例如你的id为10.1.1.1-centos.game.web,首先在/srv/pillar/custom/目录下建个game目录(从salt id获取的项目名),然后在game目录先新建文件10.1.1.1-centos.game.web.yaml,里面写上配置信息:

mysql:
  ports:
    - 3306
    - 3307
    - 3308
  version:  '5_5_25'
 
最后执行命令:
salt 10.1.1.1-centos.game.web state.highstate -v -t 300

静静的等待执行完成就好了!