简介
SaltStack是一个服务器基础架构集中化管理平台,具备配置管理,远程执行、监控等功能,一般可以理解为简化版的puppet和加强版的func。SaltStack基于python语言实现,结合轻量化级消息队列(zeroMQ)与python第三方模块(Pyzmq、Pyjinjia2、python-msgpack和PyYaml等)构建。
通过部署saltstack环境,我们可以在成千上万台服务器上做到批量执行命令,根据不同业务特性进行配置集中化管理、分发文件、采集服务器数据、操作系统基础及软件包管理等,SaltStack是运维人员提高工作效率,规范业务配置与操作的利器。
特性
1、部署简单、方便;
2、支持大部分UNIX\Linux及windows环境;
3、主从集中化管理;
4、配置简单、功能强大、扩展性强;
5、主控端(master)和被控端(minion)基于证书认证,安全可靠;
6、支持API及自定义模块,可通过python轻松扩展。
Master与Minion
Master与Minion认证
(1)、 minion在第一次启动时,会在/etc/salt/pki/minion/(该路径在/etc/salt/minion里面设置)下自动生成 minion.pem(private key)和 minion.pub(public key),然后将minion.pub发送给master。
(2)、 master在接收到minion的public key后,通过salt-key命令accept minion public key,这样在master的/etc/salt/pki/master/minions下的将会存放以minion id命名的 public key,然后master就能对minion发送指令了。
Master与Minion的连接
(1)、 SaltStack master启动后默认监听4505和4506两个端口。4505(publish_port)为saltstack的消息发布系统,4506(ret_port)为saltstack客户端与服务端通信的端口。如果使用lsof 查看4505端口,会发现所有的minion在4505端口持续保持在ESTABLISHED状态。
(2)、minion与master之间的通信模式如下:
saltstack基础安装与配置
实验环境
操作系统:rhel6.5
master:server1 172.25.66.1
minion:server2 172.25.66.2
minion:server3 172.25.66.3
在两台服务器编辑/etc/hosts文件,添加主机名与IP地址的解析,若机器太多,可以通过搭建 DNS,则不用在每台机器上设置这个
安装与配置
一、配置yum
1、网上下载salt所需安装包放在真机的apache发布目录下(类似于搭建第三方软件仓库)
2、在三台虚拟机中配置yum
cd /etc/yum.repo.d/
vim rhel-source.repo
[salt]
name=salt
baseurl=http://172.25.66.250/salt
gpgcheck=0
yum repolist
二、安装与测试
1、在server1中
(1):yum install -y salt-master
(2):修改配置文件
cd /etc/salt/
vim master
534 file_roots:
535 base:
536 - /srv/salt # 打开注释
537
/etc/init.d/salt-master start
netstat -antlp # 查看端口是否打开
4505端口:用来链接slave,发布订阅
4506端口:请求响应,模式为:zmq(消息队列)
2、在sevrer2和server3上yum install -y salt-minion
在minion端修改配置文件,指定master
cd /etc/salt/
vim minion
16 master: 172.25.66.1 # 指向的master端
/etc/init.d/salt-minion start # 打开服务后生成一个minion.id文件
# 如果修改ip或者hostname的话,必须删除该文件重新生成
3、在master端发现所有minion并接收minion的公钥
salt-key -L:显示指向该master的所有minion
salt-key -A:接收指向该master的minion的公钥
4、在master端与minion端查看公钥
master:
minion:
5、现在我们可以在master端对所有minion进行各种操作了,这些操作都是通过调用相应的python方法实现的
salt ‘*’ test.ping:测试master与所有minion通讯是否正常,‘’表示检测所有minion,也可以单独指定某一个minion,将‘*’换成minion的hostname即可
远程执行各种命令:
**salt '’ cmd.run ‘df -h’**:远程执行所有minion中的df -h命令
**salt ‘*’ cmd.run hostname
三、自动化批量部署
自动化部署apache服务
1、修改master端的配置文件
vim /etc/salt/master
cd /etc/salt/
vim master
534 file_roots:
535 base:
536 - /srv/salt # 这个目录没有,自己建立 ,该目录中存放部署相应服务的脚本
mkdir /srv/salt
/etc/init.d/salt-master restart
2、编写部署apache服务的脚本
mkdir /srv/salt/http
cd /srv/salt/httpd
vim apache.sls
写入:
apache-install: #在该文件中唯一的名字
pkg.installed: #调用pkg模块的installed方法
- pkgs:
- httpd #安装apache
- php #安装php
3、测试脚本的运行
salt ‘*’ state.sls httpd.apache
在minion端查看aoache与php是否安装
4、在自动化批量部署的同时修改服务端口
mkdir /srv/salt/httpd/files #创建files目录,存放apache的配置文件
scp root@server2:/etc/httpd/conf/httpd.conf /srv/salt/httpd/files
vim /srv/salt/httpd/files/httpd.conf
修改服务端口为8080
重新编辑apache的安装脚本
vim /srv/salt/httpd/apache.sls
apache-install:
pkg.installed:
- pkgs:
- httpd
- php
file.managed:
- name: /etc/httpd/conf/httpd.conf
- source: salt://httpd/files/httpd.conf
- mode: 644
- user: root
service.running:
- name: httpd
- enable: True
- reload: True
- watch:
- file: apache-install
5、执行脚本
salt ‘*’ state.sls httpd.apache
6、在minion中查看http端口是否该为8080