Saltstack 是一个服务器基础设施管理工具,它具备配置管理、远程执行、监控等功能。Saltstack由Python语言编写,基于 C/S 架构,即服务端 master 和客户端 minions,Master和 Minion之间是经过 Zeromq(消息队列)进行通讯的 ;适合大规模批量管理服务器。node
(1)pkg模块:包管理,包括增删更新linux
(2)file模块:管理文件操做,包括同步文件、设置文件权限和所属用户组、删除文件等。web
(3)cmd模块:在Million上执行命令或者脚本。shell
(4)user模块:管理系统帐户操做。apache
(5)service模块:管理系统服务操做。vim
(6)cron模块:管理cron服务操做。bash
准备三台机器,这三台机器都关闭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)ide
vim /etc/hosts 192.168.100.143 master.saltstack.com 192.168.100.144 web01.saltstack.com 192.168.100.145 web02.saltstack.com
vim /etc/hostname master.saltstack.com #master服务器 web01.saltstack.com #million服务器1 web02.saltstack.com #million服务器1
配置完成,重启生效,再次关闭selinux。
(1)服务端
yum install -y epel-release #安装epel源 yum install -y salt-master
(2)客户端
yum install -y epel-release #安装epel源 yum install -y salt-minion
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的主目录,须要本身建立
mkdir /srv/salt mkdir /srv/pillar
systemctl start salt-master systemctl enable salt-master
vim /etc/salt/minion master: 192.168.100.143 ##第16行,指定master服务器的IP id: web01.saltstack.com #注意冒号要有空格 ##第78行,指定客户端主机名,另外一台是web02.saltstack.com
systemctl start salt-minion
(1)查看在主服务器上已经被接受过的客户端
salt-key
(1)测试链接服务端和客户端的通讯状态
##在主服务器端进行操做 salt '*' test.ping web01.saltstack.com: True web02.saltstack.com: True
(2)测试远程执行命令
##在主服务器端进行操做 salt '*' cmd.run 'hostname' ##远程执行命令
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'
pillar 和 grains 不同,是在 master 上定义的,而且是针对 minion 定义的一些信息。像一些比较重要的数据(密码)能够存在 pillar 里,还能够定义变量等。
salt 'web01.saltstack.com' pillar.items #查看指定minion的 pillar值
综上所述,若是你想定义的属性值是常常变化的,就采用pillar:若是很固定、不易变,就采用 grains。
state组件是SaltStack的核心功能,经过预先定制好的sls文件对被控端主机进行状态管理,如程序包、文件、网路配置、系统服务、系统用户等。state的定义也是经过编写sls文件进行操做的。
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)接着编辑以前的 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配置命令
(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)接着编辑以前的 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配置命令
(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)接着编辑以前的 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配置命令
只需修改 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配置命令