1、简介

SaltStack是一个服务器基础架构集中化管理平台,具备配置管理、远程执行、监控等功能,一般可以理解为简化版的puppet和加强版的func。SaltStack基于Python语言实现,结合轻量级消息队列(ZeroMQ)与Python第三方模块(Pyzmq、PyCrypto、Pyjinjia2、python-msgpack和PyYAML等)构建。通过部署SaltStack环境,我们可以在成千上万台服务器上做到批量执行命令,根据不同业务特性进行配置集中化管理、分发文件、采集服务器数据、操作系统基础及软件包管理等,SaltStack是运维人员提高工作效率、规范业务配置与操作的利器。

2、特性

(1)、部署简单、方便;
(2)、支持大部分UNIX/Linux及Windows环境;
(3)、主从集中化管理;
(4)、配置简单、功能强大、扩展性强;
(5)、主控端(master)和被控端(minion)基于证书认证,安全可靠;
(6)、支持API及自定义模块,可通过Python轻松扩展。

 

(注:办公网中,有一个暂时的测试环境,

master:172.22.2.193

minion:172.22.2.193,172.22.2.194,172.22.2.195,172.22.2.198

image2016-4-19%209%3A27%3A15.png?version

)

3、安装

注:以下安装方式针对centos7

(参考网址:http://repo.saltstack.com/?LLM=gg1@chengg.uu.me#rhel

1)master安装

sudo yum install https://repo.saltstack.com/yum/redhat/salt-repo-2015.8-2.el7.noarch.rpm

sudo yum clean expire-cache

 sudo yum install salt-master

 sudo yum install salt-minion

 #sudo yum install salt-ssh

 #sudo yum install salt-syndic

 #sudo yum install salt-cloud

 #sudo yum install salt-api

(#根据需要安装)

2)minion安装

sudo yum install https://repo.saltstack.com/yum/redhat/salt-repo-2015.8-2.el7.noarch.rpm

sudo yum clean expire-cache

sudo yum install salt-minion

 

4、简单配置

salt的配置文件一般在/etc/salt

1)master配置

vi /etc/salt/master

 

更改日志等级:将log_level和log_level_logfile的warning 改为debug

image2016-4-18%2015%3A11%3A22.png?versio

 

更改interface:更改为本机IP地址

image2016-4-18%2015%3A14%3A4.png?version

2)minion配置

vi  /etc/salt/minion

 

配置master地址:设ip或域名(最好域名)

image2016-4-18%2015%3A15%3A43.png?versio

 

配置minion名称:自己命名,一般设ip或域名(以更好区分)

image2016-4-18%2015%3A17%3A37.png?versio

 

3)master与minion连接

配置完后,所有minion执行salt-minion重启,在master上执行‘salt-key L' ,可以看到主机的key管理,执行’salt-key -A' 接受所有的key

image2016-4-18%2015%3A24%3A23.png?versio

至此,salt的基本环境已经搭建好了。

 

4)测试连接

SaltStack master启动后默认监听4505和4506两个端口。4505(publish_port)为saltstack的消息发布系统,4506(ret_port)为saltstack客户端与服务端通信的端口。如果使用lsof 查看4505端口,会发现所有的minion在4505端口持续保持在ESTABLISHED状态

image2016-4-18%2015%3A41%3A12.png?versio

或者使用以下命令测试连接,所有minion显示true

image2016-4-18%2015%3A41%3A37.png?versio

5、salt常用模块简单用法

模块详细用法见官网说明

1)工作目录设置

image2016-4-18%2016%3A6%3A46.png?version

2)cp模块(实现远程文件、目录的复制,以及下载URL文件等操作)
将主服务器file_roots指定位置下的目录复制到被控主机
 salt '*' cp.get_dir salt://hellotest  /data

将主服务器file_roots指定位置下的文件复制到被控主机
salt '*' cp.get_file salt://hellotest/rocketzhang /root/rocketzhang

下载指定URL内容到被控主机指定位置
salt '*' cp.get_url http://xxx.xyz.com/download/0/files.tgz /root/files.tgz

 

3)cmd模块(实现远程的命令行调用执行)
salt '*' cmd.run 'netstat -ntlp'

image2016-4-18%2016%3A17%3A16.png?versio

 

4)sls用法

祥见官网,或者参考后面应用场景举例

 

 

 

6、salt其他设置

1)minion分组设置

master配置文件中设置,比如:

image2016-4-19%208%3A59%3A21.png?version

分组之后,可以针对分组进行批量配置,比如:

image2016-4-19%209%3A1%3A55.png?version=

 

2)return设置

return是指salt系统对执行minion后返回的数据进行存储或返回给其他程序,在本环境中,采用mysql进行存储,在master中安装mysql数据库。

可以参考官网教程:https://docs.saltstack.com/en/latest/ref/returners/all/salt.returners.mysql.html

举例:

image2016-4-19%209%3A8%3A5.png?version=1

 

在mysql数据库中可以看到执行结果

image2016-4-19%209%3A9%3A50.png?version=

image2016-4-19%209%3A10%3A27.png?version

设置步骤:

a)master设置

master安装mysql数据库,并创建salt数据库。后续参考官网设置步骤如下:

直接复制以下命令行执行, 创建表。

DROP TABLE IF EXISTS `jids`;
CREATE TABLE `jids` (
  `jidvarchar(255NOT NULL,
  `load` mediumtext NOT NULL,
  UNIQUE KEY `jid` (`jid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE INDEX jid ON jids(jid) USING BTREE;


DROP TABLE IF EXISTS `salt_returns`;
CREATE TABLE `salt_returns` (
  `funvarchar(50NOT NULL,
  `jidvarchar(255NOT NULL,
  `return` mediumtext NOT NULL,
  `idvarchar(255NOT NULL,
  `successvarchar(10NOT NULL,
  `full_ret` mediumtext NOT NULL,
  `alter_timeTIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  KEY `id` (`id`),
  KEY `jid` (`jid`),
  KEY `fun` (`fun`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


DROP TABLE IF EXISTS `salt_events`;
CREATE TABLE `salt_events` (
`idBIGINT NOT NULL AUTO_INCREMENT,
`tagvarchar(255NOT NULL,
`data` mediumtext NOT NULL,
`alter_timeTIMESTAMP DEFAULT CURRENT_TIMESTAMP,
`master_idvarchar(255NOT NULL,
PRIMARY KEY (`id`),
KEY `tag` (`tag`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;



 

b)minion设置

minion配置文件中添加一下内容

image2016-4-19%209%3A14%3A25.png?version

 

c)minion安装msyql-python模块

image2016-4-19%209%3A16%3A14.png?version

 

d)测试正确与否

image2016-4-19%209%3A16%3A36.png?version

无报错即可。

 

 

7、salt应用场景简单举例

以下例子都是很简单的salt应用,复杂场景待更新或自行学习。

 

1)DNS设置

在/srv/salt/base/中,创建init/files/用于放置配置文件resolv.conf

image2016-4-19%209%3A36%3A55.png?version

 

在配置文件中设置好dns地址

image2016-4-19%209%3A38%3A18.png?version

 

在init中创建sls文件

image2016-4-19%209%3A39%3A55.png?version

dns.sls文件内容如下:

image2016-4-19%209%3A40%3A37.png?version

 

给所有minon执行dns同步,执行结果:

image2016-4-19%209%3A44%3A57.png?version

 

image2016-4-19%209%3A46%3A43.png?version