一、简介
SaltStack是一个服务器基础架构集中化管理平台,具备配置管理、远程执行、监控等功能,一般可以理解为简化版的puppet和加强版的func。SaltStack基于Python语言实现,结合轻量级消息队列(ZeroMQ)与 Python第三方模块(Pyzmq、PyCrypto、Pyjinjia2、python-msgpack和PyYAML等)构建。
通过部署SaltStack环境,我们可以在成千上万台服务器上做到批量执行命令,根据不同业务特性进行配置集中化管理、分发文件、采集服务器数据、操作系统基础及软件包管理等,SaltStack是运维人员提高工作效率、规范业务配置与操作的利器。
二、特性
(1) 部署简单、方便;功能强大、扩展性强;
(2) 支持大部分UNIX/Linux及Windows环境;
(3) 主从集中化管理;
(4) 支持API及自定义模块,可通过Python轻松扩展。
(5) 主控端(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发送指令了。
四、salt远程执行底层原理:
Salt的底层通信是通过ZeroMQ完成的,采用了ZeroMQ的订阅发布模式(Pub和Sub):
简单来讲,Pub/Sub模式类似于广播电台,在订阅发布模式中Pub将消息发送到总线,所有的Sub收到来自总线的消息后,根据自己的条件来接收特定的消息。对应到salt中就是master将事件发布到消息总线,minion订阅并监听事件,然后minion会查看事件是否和自己匹配以确定是否需要执行,匹配条件就是多种主机匹配方法。saltmaster和minion的通信过程中,会启动监听两个端口,默认是4505和4506。
4505:为salt的消息发布专用端口
4506:为客户端与服务端通信的端口
Salt minion启动时从配置文件中获取master的地址,如果为域名,则进行解析。解析完成后,会连接master的4506(ret接口)进行key认证。认证通过,会获取到master的publish_port(默认是4505),然后连接publish_port订阅来自master pub接口任务。当master下发操作指令时,所有的minion都能接收到,然后minion会检查本机是否匹配。如果匹配,则执行。执行完毕后,把结果发送到master的4506(ret接口)由master进行处理,命令发送通信完成是异步的,并且命令包很小。此外,这些命令包通过 maqpack进行序列化后数据会进一步压缩(Maqpack是一种高效的二进制序列化格式),所以salt的网络负载非常低。
五、相关配置
实验环境:
server端:172.25.66.1 minion端:172.25.66.2
server端:
vim /etc/yum.repos.d/rhel-source.repo
scp rhel-source.repo 172.25.66.2:/etc/yum.repos.d/
yum install -y salt-master
minion端:
yum install salt-minion
/etc/init.d/salt-minion start
master端:
实现远程安装软件
vim /etc/salt/master
在server2上查看:
实现文件传输
vim web.sls
另外一种写法:
在server2上查看:
实现开启服务
测试:
实现服务的开机自启
测试:
更改httpd默认文件后会重新加载
将server2上的httpd主配置文件传到server1上,并修改默认端口
salt server2 state.sls apache.service
测试:
使用include方法实现上述功能
vim service.sls
Nginx的一键部署
vim install.sls 源码编译安装nginx
salt server2 state.sls nginx.install
在server2中查看:
写一个开启nginx的文件:
在server2查看:出现了80端口
在salt-minion端将nginx的配置文件scp到salt-master的指定目录下
实现创建ngxin用户并且自动启动加载
vim service.sls
将/srv/salt/nginx/files/nginx.conf更改:
salt sevver2 state.sls nginx.service
在server2上查看:
一键部署haproxy并实现负载均衡
server1:haproxy
server2:nginx
server3:httpd
新开一台虚拟机server3安装httpd服务
server3:
yum install salt-minion -y
cd /etc/salt
vim minion
/etc/init.d/salt-minion start
master端:
在master端安装minion
配置高可用yum源:
cd /etc/haproxy/
cp haproxy.cfg /srv/salt/haproxy/files/
cd /srv/salt/haproxy/
vim install.sls
vim files/haproxy.cfg
vim /srv/salt/top.sls
测试:在浏览器中访问172.25.66.1,实现轮询
所有内置的state模块列表