自动化运维saltstack

一、简介

     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远程执行底层原理:


http://s3.51cto.com/wyfs02/M00/57/9A/wKiom1Sfzr-i8BUjAAF0EW4NxyY818.jpg

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 top.sls

测试:在浏览器中访问172.25.66.1,实现轮询

所有内置的state模块列表

http://docs.saltstack.cn/ref/states/all/index.html

猜你喜欢

转载自blog.csdn.net/owlcity123/article/details/83043341