[自动化] Saltstack服务配置详解
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[自动化] Saltstack服务配置详解相关的知识,希望对你有一定的参考价值。
Saltstack 简介
Saltstack 是一个服务器基础设施管理工具,它具有配置管理、远程执行、监控等功能。Saltstack由Python语言编写,基于 C/S 架构,即服务端 master 和客户端 minions,Master和 Minion之间是通过 Zeromq(消息队列)进行通信的 ;适合大规模批量管理服务器。
Saltstack 常用模块
(1)pkg模块:包管理,包括增删更新
(2)file模块:管理文件操作,包括同步文件、设置文件权限和所属用户组、删除文件等。
(3)cmd模块:在Million上执行命令或者脚本。
(4)user模块:管理系统账户操作。
(5)service模块:管理系统服务操作。
(6)cron模块:管理cron服务操作。
saltstack安装
1.准备工作
准备三台机器,这三台机器都关闭selinux以及防火墙
setenforcr 0
systemctl stop firewalld.service
systemctl disable firewalld.service
master服务器 (192.168.100.143)
minion服务器 (192.168.100.144 192.168.100.145)
2.编辑hosts文件(三台都配置)
vim /etc/hosts
192.168.100.143 master.saltstack.com
192.168.100.144 web01.saltstack.com
192.168.100.145 web02.saltstack.com
3.分别修改各自的主机名
vim /etc/hostname
master.saltstack.com #master服务器
web01.saltstack.com #million服务器1
web02.saltstack.com #million服务器1
配置完成,重启生效,再次关闭selinux。
4.安装
(1)服务端
yum install -y epel-release #安装epel源
yum install -y salt-master
(2)客户端
yum install -y epel-release #安装epel源
yum install -y salt-minion
5.配置服务端配置文件(/etc/salt/master)
vim /etc/salt/master
interface: 192.168.100.143 #第15行,修改监听地址为本机地址
auto_accept: True #第215行,主服务器会自动认证被控端的认证,只要被控端在设置完主服务器的IP地址后启动服务,主服务器就会允许被控端自动认证,以避免以后每次都要运行salt-key来确认认证书信任。
file_roots:
base:
- /srv/sale
#第416行,去掉注释。开启saltstack文件根目录位置,注意这个目录默认没有创建,需要自己手动创建。
nodegroups:
group1: ‘web01.saltstack.com‘
group2: ‘web02.saltstack.com‘ #第710行,配置组分类
pillar_opts: True #第552行,开启pillar功能,同步文件功能
pillar_roots:
base:
- /srv/pillar #第529行,去掉注释,pillar的主目录,需要自己创建
6.创建salt与pillar文件根目录
mkdir /srv/salt
mkdir /srv/pillar
7.启动salt-master服务
systemctl start salt-master
systemctl enable salt-master
8.配置million客户端配置文件(/etc/salt/minion)
vim /etc/salt/minion
master: 192.168.100.143 ##第16行,指定master服务器的IP
id: web01.saltstack.com #注意冒号要有空格 ##第78行,指定客户端主机名,另一台是web02.saltstack.com
9.分别启动两台客户端服务
systemctl start salt-minion
10.测试
(1)查看在主服务器上已经被接受过的客户端
salt-key
(1)测试连接服务端和客户端的通信状态
##在主服务器端进行操作
salt ‘*‘ test.ping
web01.saltstack.com:
True
web02.saltstack.com:
True
(2)测试远程执行命令
##在主服务器端进行操作
salt ‘*‘ cmd.run ‘hostname‘ ##远程执行命令
Saltstack的三大组件
1.grains
grains 是在 minion(客户端)启动时收集到的一些信息,比如操作系统类型、网卡ip等,它更适合做一些静态的属性值的数据采集 。
使用命令:
salt ‘web01.saltstack.com‘ grains.ls //列出所有的 grains 项目名字
salt ‘web01.saltstack.com‘ grains.items //列出所有的 grains 项目名以及值
grains在远程执行命令时也很方便,示例如下:
salt -G os:CentOS cmd.run ‘hostname‘
2.pillar
pillar 和 grains 不一样,是在 master 上定义的,并且是针对 minion 定义的一些信息。像一些比较重要的数据(密码)可以存在 pillar 里,还可以定义变量等。
salt ‘web01.saltstack.com‘ pillar.items #查看指定minion的 pillar值
综上所述,如果你想定义的属性值是经常变化的,就采用pillar:如果很固定、不易变,就采用 grains。
3.state
state组件是SaltStack的核心功能,通过预先定制好的sls文件对被控端主机进行状态管理,如程序包、文件、网路配置、系统服务、系统用户等。state的定义也是通过编写sls文件进行操作的。
示例一:通过saltstack远程安装apache
1.创建入口文件top.sls
mkdir /srv/salt #配置文件中需要开启
vim /srv/salt/top.sls #创建入口文件,入口文件的作用是定义pillar 的数据覆盖被控主机的有效范围
base:
‘*‘:
- apache
2.创建pillar入口文件apache.sls
vim /srv/salt/apache.sls
apache: #这里是自定义的名称
pkg.installed: #安装包
- names:
- httpd
- httpd-devel
service.running:
- name: httpd
- enable: True
3.重启服务端服务
systemctl restart salt-master
4.执行命令
salt ‘*‘ state.highstate ##执行并刷新state配置命令
这样就可远程安装apache服务了
示例二:文件目录管理
1、文件管理
(1)接着编辑之前的 top.sls 文件
vim /srv/salt/top.sls #修改为如下
base:
‘web02.saltstack.com‘:
- file
(2)新建 file.sls 文件
vim /srv/salt/file.sls
file-test: #自定义
file.managed:
- name: /opt/file.txt #指定远程客户端要生成的文件。
- source: salt://test/abc/1.txt #源文件
- user: root
- group: root
- mode: 644
(3)新建所要测试的源文件
mkdir -p /srv/salt/test/abc/
vim /srv/salt/test/abc/1.txt
test-test-test
(4)重启服务端服务
systemctl restart salt-master
(5)执行命令
salt ‘web02.saltstack.com‘ state.highstate ##执行并刷新state配置命令
2、目录管理
(1)接着编辑之前的 top.sls 文件
vim /srv/salt/top.sls #修改为如下
base:
‘web02.saltstack.com‘:
- dir
(2)新建 dir.sls 文件
vim /srv/salt/dir.sls
file-dir:
file.recurse:
- name: /opt/dir
- source: salt://test1/a
- user: root
- file_mode: 644
- dir_mode: 755
- mkdir: True
- clean: True
注意:clean: True 源删除文件或目录,目标也会跟着删除,否则不会删除。可以默认设置为 False。
(3)新建所要测试的源目录
mkdir -p /srv/salt/test1/a
vim /srv/salt/test1/a/0.txt
12345678
(4)重启服务端服务
systemctl restart salt-master
(5)执行命令
salt ‘web02.saltstack.com‘ state.highstate ##执行并刷新state配置命令
示例三:远程执行
1.远程执行命令
(1)接着编辑之前的 top.sls 文件
vim /srv/salt/top.sls #修改为如下
base:
‘web01.saltstack.com‘:
- cmd
(2)新建 cmd.sls 文件
vim /srv/salt/cmd.sls
cmd-test:
cmd.run:
- onlyif: test -f /opt/123.txt
- names:
- touch /opt/cmdtest.txt
- mkdir /opt/cmdtest
- user: root
(3)在web01.saltstack.com主机上创建/opt/123.txt
touch /opt/123.txt
(4)重启服务端服务
systemctl restart salt-master
(5)执行命令
salt ‘web01.saltstack.com‘ state.highstate ##执行并刷新state配置命令
2.远程执行脚本
(1)接着编辑之前的 top.sls 文件
vim /srv/salt/top.sls #修改为如下
base:
‘web01.saltstack.com‘:
- shell
(2)新建 shell.sls 文件
vim /srv/salt/shell.sls
shell-test:
cmd.script:
- source: salt://test/1.sh
- user: root
(3)新建 1.sh 脚本文件
vim /srv/salt/test/1.sh
#!/bin/bash
echo "hello" > /opt/123.txt
(4)重启服务端服务
systemctl restart salt-master
(5)执行命令
salt ‘web01.saltstack.com‘ state.highstate ##执行并刷新state配置命令
示例四:管理任务计划
1.建cron计划
(1)接着编辑之前的 top.sls 文件
vim /srv/salt/top.sls #修改为如下
base:
‘web02.saltstack.com‘:
- cron
(2)新建 cron.sls 文件
vim /srv/salt/cron.sls
cron-test:
cron.present:
- name: /bin/touch /opt/111.txt
- user: root
- minute: ‘*‘
- hour: 0
- daymonth: ‘*‘
- month: ‘3,5‘
- dayweek: ‘*‘
(3)重启服务端服务
systemctl restart salt-master
(4)执行命令
salt ‘web02.saltstack.com‘ state.highstate ##执行并刷新state配置命令
2.删除 cron
只需修改 cron.sls 文件,
把 cron.present: 改成 cron.absent即可。然后重启服务,执行并刷新state配置命令。
vim /srv/salt/cron.sls
cron-test:
cron.absent:
- name: /bin/touch /opt/111.txt
- user: root
- minute: ‘*‘
- hour: 0
- daymonth: ‘*‘
- month: ‘3,5‘
- dayweek: ‘*‘
systemctl restart salt-master
salt ‘web02.saltstack.com‘ state.highstate ##执行并刷新state配置命令
以上是关于[自动化] Saltstack服务配置详解的主要内容,如果未能解决你的问题,请参考以下文章
自动化运维利器 SaltStack 工作原理及安装配置实例详解
Saltstack批量安装部署Zabbix代理(附zabbix自动注册详解)