Salt是一个基础平台管理工具。SaltStack 采用 C/S模式,server端就是salt的master,client端就是minion,minion与master之间通过ZeroMQ消息队列通信。master监听4505和4506端口,4505为master和minion认证通信端口,4506为master用来发送命令或者接收minion的命令执行返回信息。

官网:docs.saltstack.com

SaltStack常用模块

pkg模块 是包管理,包括增删更新。 file模块 管理文件操作,包括同步文件、设置文件权限和所属用户组、删除文件等操作。 cmd模块 是在Minion上执行命令或者脚本。 user模块 管理系统账户操作。 service模块 管理系统服务操作 cron模块 管理cron服务操作

Saltstack工作机制

• Master和Minion都以守护进程的方式运行

• Master监听配置文件里定义的ret_port(接收minion请求),和publish_port(发布消息)的端口

• 当Minion运行时,它会自动连接到配置文件里定义的Master地址ret_port端口进行连接认证

• 当Master和Minion可以正常通信后,就可以进行各种各样的配置管理工作了

操作篇

操作环境:

192.168.80.181 Master salt-master salt-minion

192.168.80.182 Minion salt-minion 192.168.80.183 Minion salt-minion 注:三台都是NAT模式


1 修改主机名

hostnamectl set-hostname master.saltstack.com

hostnamectl set-hostname web01.saltstack.com

hostnamectl set-hostname web02.saltstack.com

init 6 重启生效

2 修改/etc/hosts文件(3台都做)

192.168.80.181 master.saltstack.com

192.168.80.182 web01.saltstack.com

192.168.80.183 web02.saltstack.com

3 安装

systemctl stop firewalld && setenforce 0

yum install -y epel-release

服务器:

  yum -y install salt-master salt-minion

客户端:

  yum -y install salt-minion

4 服务端和客户端配置

vi /etc/salt/minion

修改配置如下:

16行 master: 192.168.80.181 //指定主控端IP

78行 id: web01.saltstack.com //指定被控端主机名

注:改成相应的主机名

5 启动被控端服务

systemctl start salt-minion

systemctl start salt-master

6 认证

salt-key -L 查看待认证的服务器

Accepted Keys:认证通过

Denied Keys:旧的的认证

Unaccepted Keys:等待认证

Rejected Keys:拒绝认证

手动添加认证:

认证的方式是salt-key -a 客户端id

salt-key -a web01

salt-key -a web02

salt-key -a master

说明:-a :accept ,-A:accept-all,-d:delete,-D:delete-all。可以使用 salt-key 命令查看到已经签名的客户端。此时我们在客户端的 /etc/salt/pki/minion 目录下面会多出一个minion_master.pub 文件。

salt-key -L

7 在主控端测试与被控端的通信状态!

salt '*' test.ping

salt '*' cmd.run 'df -h' //远程执行命令

salt-key //查看在 master 上已经被接受过的客户端

注:

Saltstack几个重要的组件:

grains

grains 是在 minion(客户端)启动时收集到的一些信息,比如操作系统类型、网卡ip等静态信息。

grains的信息并不是动态的,并不会时时变更,它只是在 minion 启动时收集到的

pillar

pillar 和 grains 不一样,是在 master 上定义的,并且是针对 minion 定义的一些信息。像一些比较重要的数据(密码)可以存在 pillar 里,还可以定义变量等。

State

他是saltstack的最核心功能,通过预先指定好的sls文件对被控主机进行管理:包/文件/网络配置/系统服务/系统用户等。

在master服务器:

vi /etc/salt/master

file_roots: //416行

base:

  - /srv/salt           //saltstack文件根目录位置,目录需要创建

nodegroups: //710行组分类

group1: 'web01.saltstack.com'

group2: 'web02.saltstack.com'

pillar_opts: True //552行,开启pillar功能

pillar_roots: //529行

   base:



   - /srv/pillar       //pillar的主目录,需要创建

cat /etc/salt/master | grep -v ^$ | grep -v ^# //查看对主配置文件做的更改

systemctl restart salt-master

netstat -anpt | egrep '4505|4506'

查看被控主机上grains所有值:(每次minion在启动是都会获取客户端信息)

salt 'master' grains.ls // 列出所有的 grains 项目名字

salt 'web01.saltstack.com' grains.items (静态数据)

salt 'web01.saltstack.com' pillar.items (动态数据)

配置管理安装Apache

下面进行的演示是远程通过 yum 方式安装 Apache。步骤如下:

修改配置文件

注意:环境: base、dev(开发环境)、test(测试环境)、prod(生产环境)。

vi /srv/salt/top.sls

base:

'*': - apache

vi /srv/salt/apache.sls

apache-service: pkg.installed: - names: - httpd - httpd-devel service.running: - name: httpd - enable: True

注意:apache-service 是自定义的 id 名。pkg.installed 为包安装函数,下面是要安装的包的名字。service.running 也是一个函数,来保证指定的服务启动,enable 表示开机启动。

重启服务

systemctl restart salt-master

执行命令

salt 'web01.saltstack.com' state.highstate

image.png

image.png

并且被控端已经运行了httpd服务

image.png