一.saltstack
salt是一个异构平台基础设置管理工具(虽然我们通常只用在Linux上),使用轻量级的通讯器ZMQ,用Python写成的批量管理工具,完全开源,遵守Apache2协议。SaltStack 采用 C/S模式,server端就是salt的master,client端就是minion,minion与master之间通过ZeroMQ消息队列通信。通过部署SaltStack环境,我们可以在成千上万台服务器上做到批量执行命令,根据不同业务特性进行配置集中化管理、分发文件、采集服务器数据、操作系统基础及软件包管理等master启动后默认监听4505和4506两个端口。4505:saltstack的消息发布系统,4506:saltstack被控端与服务端通信的端口。
二.saltstack事务返回机制
当master端把服务下发到minion端执行的时候,会在master端的页面上返回服务的执行结果,这是服务是否成功执行的关键依据,这些信息也能帮助运维人员分析服务的故障原因,因此有必要收集到数据库供分析查询。有以下两种方式:
1.minion把信息反馈到master的数据库,同时也把信息打印到master的界面。(如果minion的数量很大,每个minion都要与master建立连接,这势必给master带来巨大压力)
实验环境:
172.25.78.11 |
salt-master、mysql |
172.25.78.12 |
salt-minion、mysql-python(命令模块用python编写,需要把python语法转换为sql语句) |
(1)把salt的数据导入mysql(官网有)
mysql -p < test.sql
test.sql的内容如下:
(2)对salt用户进行授权,因为minion要以salt用户身份写入数据
(3)在minion端下载mysql服务进行远程登陆master端的mysql,验证授权是否生效
(4)在minion端配置数据库
vim /etc/salt/minion
开启返回机制,返回信息到mysql
指定数据库的IP、授权用户、密码、数据库、端口
(5)修改配置文件后记得重启服务
(6)测试
查看server12的minion能否ping通
信息成功返回mysql
信息内容、命令名称、操作时间、服务执行状态、minion的hostname等
2.minion端把信息发送到master端,由master的缓存机制把数据存入master的数据库
实验环境:
172.25.78.11 |
salt-master、mysql、mysql-python |
172.25.78.12 |
salt-minion |
(1)同样的,在master安装mysql-python插件
(2)关闭minion端的数据库配置,配置master端的数据库配置
开启返回机制,返回信息到mysql,开启master的工作缓存到mysql
(3)测试
salt server12 cmd.run 'ip addr' ##查看minion的ip信息
查看数据库信息(成功查到cmd.run命令的执行信息)
3.推送服务时从minion返回的推送信息存入数据库,默认保存推送信息在/var/cache/salt有24小时
master缓存的缓存位置
master推送服务后都保留在minion的/var/cache/salt/minion/files/base目录
minion的缓存位置
三.使用python编写自定义模块
1.mkdir /srv/salt/_modules
2.同步模块到minion(python定义函数,master用内置函数名调用此方法)
四.saltstack有很多内置方法
(1)把master的目录发送到minion
(2)查看目录haproxy
(3)把master的文件发送到minion,在这里发送一个脚本文件到minion,脚本可以远程执行
(4)查看文件
五.使用salt-syndic(本来一个master管理多个minion,有了syndic的架构之后,通过master去管理多个syndic,syndic去管理多个minions)
topmaster(也就是master)-->syndics-->minions
1.部署syndic服务(master代理)
实验环境:
172.25.78.11 |
master+syndic |
172.25.78.12 |
minion |
172.25.78.13 |
topmaster |
(1)syndic需要和master同时工作
(2)配置topmaster使其拥有管理低级master的权限
order_masters: True
(3)配置master(指定topmaster,知道去接受那哪台topmaster的调度)
(4)添加syndic节点并重启服务
(5)测试(topmaster不需要编写yaml语言去部署服务,直接就可以用syndic的编写的服务去下发任务,功能还是很强大的,如果有十万台服务部署全放在一台master上面肯定很慢,现在由topmaster去调度,业务量分散处理)
当然也可以推送单个服务
六.使用salt-ssh部署服务
实验环境:
172.25.78.11 |
master、salt-ssh |
172.25.78.12 |
被管理端(因为这台主机已经不开minion服务 了) |
2.安装salt-ssh
3.vim /etc/salt/roster ##salt-ssh配置文件(通过ssh登陆去执行命令,有点像Ansiable)
指定被管理端、用户密码、用户身份
4.ping测试以及推送服务
Ansiable也是一款管理平台管理工具,服务执行速度可能比saltstack慢几倍,但是服务数据传输更安全