rhel6.5-saltstack
一.saltstack的基本了解
SaltStack是一个服务器基础架构集中化管理平台,具备配置管理、远程执行、监控等功能,基于Python语言实现,结合轻量级消息队列(ZeroMQ)与Python第三方模块构建。通过部署SaltStack,我们可以在成千万台服务器上做到批量执行命令,根据不同业务进行配置集中化管理、分发文件、采集服务器数据、操作系统基础及软件包管理等。可以实现一键部署服务,免去了重复执行安装的麻烦,比如一键部署lnmp架构或者haproxy+keepalived的高可用等实用性很强的服务。salt-master连接salt-minion之后将会以root用户权限运行,执行命令要格外小心。
二.saltstack平台的构建
172.25.78.11(server11) |
salt-master |
172.25.78.12(server12) |
salt-minion |
172.25.78.13(server13) |
salt-minion |
(1)在salt-minion的节点上指定salt-master的主机IP(如果是指定主机名,需要在/etc/hosts文件做本地解析)
(2)在salt-master上面把salt-minion的key值添加
salt-key -L ##列出key
salt-key -A ##添加所有的key
salt-key -a ##添加指定的key
salt-key -d ##删除指定的key
salt-key -D ##删除所有的key
upaccepted keys ##监测到的minion但是还未添加到master
accepted keys ##已经认证的key
2.测试
(1)利用test模块的ping函数进行测试,测试minion的key是否添加成功
(2)使用cmd.run在master对minion进行操作
3.master和minion之间通过**建立通信,所有的**都放在/etc/salt/pki/这个目录下,当minion指定master的IP后,重启服务。Minion第一次启动后会在/etc/salt/pki/minion生成公钥秘钥,然后将公钥发送给Master,等待Master为签发证书后才能与该Minion建立通信,同时master也会把自己的公钥发送给minion。
/etc/salt/pki/master/minion目录下是所有minion的公钥
master的公钥
minion接受到的公钥(与master的公钥一致,也是通信的关键)
minion**的结构
三.一键推送nginx服务
1.在/etc/salt/master的配置文件中打开服务的创建目录
2.在/srv/salt/下创建nginx的目录、nginx源码安装的依赖包、nginx用户的创建目录以及top.sls文件(一键推送的关键)
(1)/srv/salt/pkgs/install.sls ##nginx安装的依赖包
(2)/srv/salt/nginx/install.sls ##nginx的安装文件
include: ##nginx的源码安装包含的依赖包
nginx-install: ##nginx的安装(名称随意,保持全局唯一即可)
file.managed ##nginx的源码包的存放位置
cmd.run ##nginx的安装过程(为了安全使用sed取消了nginx的版本号)
creates ##避免重复安装,当监测到/usr/local/nginx目录存在,就不再进行安装
(3)nginx用户创建的文件(源码安装创建nginx用户)
(4)nginx服务的控制文件
/etc/init.d/nginx ##nginx脚本在minion的位置
source ##启动脚本在master的位置
mode:775 ##脚本的权限(脚本要有执行权限)
nginx-service ##管理nginx服务状态
watch ##在启动或者重启之前先要检测nginx的配置文件
3.可以单个推送服务,也可以使用salt '*' state.highstate进行推送
在推送服务的时候会检测每一个服务ID,可以只推送nginx的安装而不推送nginx的配置文件,当nginx安装完成后,再从minion复制配置文件,因为当时没有配置文件,要把nginx安装完成后,才会生成配置文件
4.测试
nginx服务成功开启,用户也成功创建
四.grains组件的使用(可以通过grains匹配minion的属性,主机号、IP、DNS、selinux等)
1.匹配minion的操作系统
2.匹配minion的主机名
3.匹配minion的所有信息
salt server2 grains.items
4.指定minion角色的方法
(1)修改配置文件重启salt-minion服务
(2)在minion创建/etc/salt/grains文件
salt server12 saltutil.sync_grains ##minion不用重启,同步即可
(3)在master创建python脚本
5.根据角色去执行命令
6.结合minion的角色、操作系统的类型(解决了版本的兼容性问题)进行nginx的一键推送
当nginx服务的推送量一旦达到一定数量之后,把minion都要一个一个加到top.sls文件中显然不现实,有了grains去匹配,使得推送更加的简洁
五.pillar组件的使用(对于一些敏感的数据,比如密码等,数据是存储在master本地)
1.在master的配置文件中开启pillar组件
2.在/srv目录下创建pillar目录,重启服务生效
3.在/srv/pillar目录创建top.sls文件,对所有minion都推送web.apache
(1)通过grains组件匹配主机,在server13部署httpd,设置监听IP以及端口
(2)salt '*' saltutil.refresh_pillar ##同步
(3)根据apache的类型进行测试以及命令的执行
(4)salt ‘*’ pillar.items ##查看pillar组件控制的所有信息
六.pillar结合jinja模板在推送服务时匹配主机名或者操作系统,针对不同的服务要求设置不同的配置文件(设置变量,根据pillar去匹配)
pillar-->top.sls-->salt-->jinja-->httpd.conf-->salt '*' state.highstate
在httpd的配置文件中设置bind和port的变量
salt://httpd/httpd.conf ##在master要去推送的配置文件中更改
在server13的httpd的配置文件中也成功更改bind和port
server13主机的http端口也成功改为在pillar/top.sls中设置的8888