saltstack安装管理——批量部署apache
简介
Salt是一个基础平台管理工具,基于 python 语言开发。SaltStack 采用 C/S模式,server端就是salt的master,client端就是minion,minion与master之间通过ZeroMQ消息队列通信。master监听4505和4506端口,4505为master和minion认证通信端口,4506为master用来发送命令或者接收minion的命令执行返回信息。
saltstack 介绍:
1、轻量级管理工具,批量执行命令;
2、常用模板:
pkg:包,有增删更新;
file:用于管理文件,包括同步文件、设置文件权限和所属用户组、删除文件等操作;
cmd:在 minion 上执行命令或者脚本;
user:管理系统账户操作;
service:管理系统服务操作;
cron:管理 crontab任务
3、saltstack 数据系统:
Grains(静态数据);
pillar(动态数据);
4、三大功能:
(1)远程执行
(2)配置管理
(3)云管理
重要组件:
(1)grains:
grains 是在 minion(客户端)启动时收集到的一些信息,比如操作系统类型、网卡ip等静态信息。
grains 的信息并不是动态的,并不会时时变更,它只是在 minion 启动时收集到的。
(2)pillar:
pillar 和 grains 不一样,是在 master 上定义的,并且是针对 minion 定义的一些信息。像一些比较重要的数据(密码)可以存在 pillar 里,还可以定义变量等。
(3)state:
是 saltstack 的最核心的功能,通过预先指定好的 sls 文件对 被控主机进行管理(包括:包、网络配置、系统服务、系统用户 等)
工作原理:
SaltStack 客户端(Minion)在启动时,会自动生成一套密钥,包含私钥和公钥。之后将公钥发送给服务器端,服务器端验证并接受公钥,以此来建立可靠且加密的通信连接。同时通过消息队列 ZeroMQ 在客户端与服务端之间建立消息发布连接。
1、Minion 是 SaltStack 需要管理的客户端安装组件,会主动去连接 Master 端,并从 Master 端得到资源状态信息,同步资源管理信息。
2、Master 作为控制中心运行在主机服务器上,负责 Salt 命令运行和资源状态的管理,Master 上执行某条指令通过队列下发到各个 Minions 去执行,并返回结果。
3、ZeroMQ 是一款开源的消息队列软件,用于在 Minion 端与 Master 端建立系统通信桥梁。
与ansible区别:
1、管理配置讲究的是更快更稳
ansible基于SSH协议传输数据;Saltstack使用消息队列zeroMQ传输数据,速度更快,是ssh的40倍。
2、ansible安装部署过程特别简单,saltstack要部署 minion 端较为不便。
实操--批量安装 Apache服务
1、修改主机名
修改主机名:[root@localhost ~]# hostnamectl set-hostname master.saltstack.com[root@localhost ~]# hostnamectl set-hostname web01.saltstack.com[root@localhost ~]# hostnamectl set-hostname web02.saltstack.com修改 /etc/hosts文件(用scp远程复制,三台主机都一样):vim /etc/hosts192.168.220.131 master.saltstack.com192.168.220.140 web01.saltstack.com192.168.220.136 web02.saltstack.com关闭防火墙:systemctl stop firewalld.servicesetenforce 0分别为三台主机添加epel源:yum install -y epel-release
2、安装 saltstack:
1、master上安装:yum install -y salt-master2、被管理端(minion)上安装:yum install -y salt-minion
3、配置 master主机:
vim /etc/salt/master interface: 192.168.220.131 //修改监听地址(master的地址)auto_accept: True //修改为true,避免要运行salt-key来确定证书认证file_roots: //开启saltstack文件根目录位置,此目录需要自己创建 base: - /srv/saltnodegroups: //开启、设置组分类 group1: 'web01.saltstack.com' group2: 'web02.saltstack.com'pillar_opts: True //开启pillar功能,同步文件功能pillar_roots: //开启pillar主目录,这个也需要自己创建 base: - /srv/pillar
4、开启服务:
[root@master ~]# systemctl start salt-master.service [root@master ~]# netstat -napt | egrep '4506|4505'tcp 0 0 192.168.220.131:4505 0.0.0.0:* LISTEN 68112/python tcp 0 0 192.168.220.131:4506 0.0.0.0:* LISTEN 68136/python
(5)配置 minino 端:
vim /etc/salt/minino第一台:master: 192.168.220.131 //第16行,指定主控端IP地址id: web01.saltstack.com //第78行,指定被控制端的主机名第二台:master: 192.168.220.131 id: web02.saltstack.com systemctl start salt-minion.service //开启服务
(6)在主控端测试与被控端的通信状态
[root@master ~]# salt '*' test.ping //查看通信状态web01.saltstack.com: True[root@master ~]# salt '*' test.pingweb01.saltstack.com: Trueweb02.saltstack.com: Truesalt '*' cmd.run 'df -h' //查看所有被管理段的挂载情况[root@master ~]# salt-key //查看在master上已经被接受过的客户端Accepted Keys:web01.saltstack.comweb02.saltstack.comDenied Keys:Unaccepted Keys:Rejected Keys:查看被监控主机上grains所有值(每次minino在启动时都会获取客户端信息):salt 'web01.saltstack.com' grains.items (静态数据)salt 'web01.saltstack.com' pillar.items (动态数据)
(7)开始批量安装Apache服务:
下面演示的是远程通过 yum 安装 Apache :
mkdir /srv/saltvim /srv/salt/top.slsbase: '*': - apache//注意:'*',则表示在所有的客户端执行 apache 模块。vim /srv/salt/apache.slsapache-service: pkg.installed: - names: // 如果只有一个服务,那么就可以写成 - name: httpd 不用再换一行 - httpd - httpd-devel service.running: - name: httpd - enable: True//注意:apache-service 是自定义的 id 名。pkg.installed 为包安装函数,下面是要安装的包的名字。service.running 也是一个函数,来保证指定的服务启动,enable 表示开机启动。
systemctl restart salt-master //重启服务salt '*' state.highstate //执行刷新state配置命令
接下来,去两台 minino上验证一下 httpd是否安装成功: