Saltstack 原理

Saltstack由Master和Minion构成,master是服务端,表示一台服务器;minion是客户服务端,表示多台服务器。在Master 上发送命令给符合条件的 Minion,Minion 就会执行响应的命令,Master和Minion之间通过ZeroMQ(消息队列)进行通信。
         Saltstack的master端监听4505和4506端口,4505为master和 Minion 认证通信端口,4506为 Master 用来发送命令或接收Minion的命令执行返回信息。
          当客户端启动后,会主动连接 Master 端注册,然后一直保持该TCP连接,而 Master 通过这条TCP连接对客户端进行控制。如果连接断开,Master 对客户端将不能进行控制。但是,当客户端检查到连接断开后,会定期向 Master 端请求注册连接。

Saltstack 常用模块

Saltstack 提供了非常多的功能模块,以便于对操作系统的基础功能和常用工具的操作。

(1)pkg 模块

pkg 模块的作用是包管理,包括增删更新。

(2)file 模块

file 模块的作用是管理文件操作,包括同步文件、设置文件权限和所属用户组、删除文件等操作。

(3)cmd 模块

cmd 模块的作用是在 Minion 上执行命令或脚本。

(4)user 模块

user 模块的作用是管理系统账户操作。

(5)service 模块

service 模块的作用是管理系统服务操作。

(6)cron 模块

cron 模块的作用是管理 cron 服务操作。

部署环境

三台服务器参数如表所示

角色   主机名   ip地址 所需的软件包
master master.saltstack.com  192.168.66.140 saltstack-master
minion web01.saltstack.com 192.168.66.143 saltstack-minion
minion web02.saltstack.com  192.168.66.144

saltstack-minio

操作步骤

一 . 部署前的准备工作。

1. 更改主机名,修改 hosts 文件(分别在三台服务器上操作),配置完成后,重新启动主机,主机名才可以生效

vim /etc/hostname
master.saltstack.com

[root@localhost ~]# vim /etc/hosts

192.168.66.140 master.saltstack.com
192.168.66.143 web01.saltstack.com
192.168.66.144 web02.saltstack.com

关闭防火墙

[root@master ~]# systemctl stop firewalld.service 
[root@master ~]# setenforce 0

2.在三台服务器上都需要安装 epel 源,因为后面需要安装 Saltstack 服务端和客户端。

[root@master ~]# yum install epel-release –y

[root@web01 ~]# yum install epel-release -y

[root@web02 ~]# yum install epel-release –y

二 . 部署 Saltstack 主控端(也就是master)。

1 . 部署 salt-master  软件包

[root@master ~]# yum install salt-master –y

2.配置主控端配置文件 /etc/salt/master

[root@master ~]# vim /etc/salt/master

15 interface: 192.168.66.140                              //修改监听地址(master)

215 auto_accept: True

修改第215行的主控端会自动认证被控端的认证,只有被控端在设置完主控端的 IP 地址后启动服务,主控端就会运行被控端自动认证,以避免以后每次都需要运行 salt-key 来确认证书信任。

416 file_roots:                                      //saltastack 文件根目录位置,注意这个目录默认是没有的,需要创建。
417   base:
418     - /srv/salt

710 nodegroups:                                 //修改组分类
711   group1: 'web01.saltstack.com'
712   group2: 'web02.saltstack.com'

552 pillar_opts: True                            //开启 pillar 功能

529 pillar_roots:                                   //pillar 的主目录,注意这个目录默认是没有的,需哟创建。
530   base:
531    - /srv/pillar

过滤查看修改的配置文件内容

[root@master ~]# cat /etc/salt/master | grep -v ^$ | grep -v ^#
interface: 192.168.66.140
auto_accept: True
file_roots:
   base:
     - /srv/salt
pillar_roots:
   base:
     - /srv/pillar
pillar_opts: True
nodegroups:
   group1: 'web01.saltstack.com'
   group2: 'web02.saltstack.com'

3.主控端做完上述操作后启动 salt-master 服务,并查看端口

[root@master ~]# systemctl start salt-master
[root@master ~]# netstat -ntap | egrep '4505|4506'
tcp        0      0 192.168.66.140:4505     0.0.0.0:*               LISTEN      1987/python         
tcp        0      0 192.168.66.140:4506     0.0.0.0:*               LISTEN      2001/python

创建 salt 文件根目录及 pillar 目录

[root@master ~]# mkdir /srv/salt

[root@master ~]# mkdir /srv/pillar

三 . 部署 Saltstack 被控端 (也就是两台 minion)

1.安装 salt-minion 软件包

[root@web01 ~]# yum install salt-minion –y

2 . 配置两台被控端配置和文件 /etc/salt/minion

[root@web01 ~]# vim /etc/salt/minion

16 master: 192.168.66.140                          //指定主控端 IP

78 id: web01.saltstack.com                          //指定被控主机名,另一台是 web02.saltstack.com

3. 分别启动两台被控端服务

[root@web01 ~]# systemctl start salt-minion.service

[root@web02 ~]# systemctl start salt-minion.service

此时控制端和被控制端的配置以及完成,并启动服务。在主控端上做一个简单测试一下主控端和被控端的通信状态,如果返回都是True ,则说明正常。注意这里的 ping 和我们平常的 ping 命令不同,它只是 test 类下面的一个方法而已,用来验证主控端和被控端的通信状态。注意 * 表示所有通过认证的被控端,还可以支持其他很多正则表达式的匹配。

[root@master ~]# salt '*' test.ping
web02.saltstack.com:
     True
web01.saltstack.com:
    True

查看秘钥

[root@master ~]# salt-key
Accepted Keys:
web01.saltstack.com
web02.saltstack.com
Denied Keys:
Unaccepted Keys:
Rejected Keys:

查看被控端主机挂载情况

[root@master ~]# salt '*' cmd.run 'df –h'                 //使用 cmd 模块
web02.saltstack.com:
     Filesystem      Size  Used Avail Use% Mounted on
     /dev/sda2        20G  3.5G   17G  18% /
     devtmpfs        978M     0  978M   0% /dev
     tmpfs           993M   12K  993M   1% /dev/shm
     tmpfs           993M  9.0M  984M   1% /run
     tmpfs           993M     0  993M   0% /sys/fs/cgroup
     /dev/sda5       5.0G   33M  5.0G   1% /opt
     /dev/sda3        10G   37M   10G   1% /home
     /dev/sda1       997M  158M  839M  16% /boot
     tmpfs           199M   12K  199M   1% /run/user/42
     tmpfs           199M     0  199M   0% /run/user/0
web01.saltstack.com:
     Filesystem      Size  Used Avail Use% Mounted on
     /dev/sda2        20G  3.8G   17G  19% /
     devtmpfs        978M     0  978M   0% /dev
     tmpfs           993M   12K  993M   1% /dev/shm
     tmpfs           993M  9.0M  984M   1% /run
     tmpfs           993M     0  993M   0% /sys/fs/cgroup
     /dev/sda3        10G   37M   10G   1% /home
     /dev/sda1      1014M  158M  857M  16% /boot
     /dev/sda5        10G   33M   10G   1% /opt
     tmpfs           199M   12K  199M   1% /run/user/42
     tmpfs           199M     0  199M   0% /run/user/0

通过下面的命令可以查看被控机 web01 主机上的 grains 所有值

[root@master ~]# salt 'web01.saltstack.com' grains.items
web01.saltstack.com:
     ----------
     SSDs:
     biosreleasedate:
         05/19/2017
     biosversion:
         6.00
     cpu_flags:
         - fpu
         - vme
         - de
         - pse
         - tsc
         - msr
         - pae
         - mce
         - cx8
         - apic
         - sep
         - mtrr
         - pge
         - mca
         - cmov
         - pat
         - pse36
         - clflush
         - mm

…….

grains 是 Saltstack 的重要组件之一,可以收集被控主机的基本信息,如 cpu 、内核、操作系统、虚拟化等静态数据。在服务端可以利用这些信息对不同被控主机进行个性化配置。

四 . Saltstack 批量部署 apache(在控制端)

[root@master srv]# vim /srv/salt/top.sls           // 在 /srv/salt 目录下,创建管理性文件 top.sls ,文件名以sls结尾

base:             //基本操作
   '*':               //表示所有被控主机
    - apache    //所有主机执行 apache

注意:‘*’ ,表示在所有的客户端执行 apache 模块

在创建一个 apache.sls 文件

[root@master srv]# vim apache.sls

apache-service:
    pkg.installed:             //执行apache 的安装操作
       - names:                   //需要安装的软件包有 httpd   、httpd-devel
        - httpd
         - httpd-devel
    service.running:
       - name: httpd
       - enable: True

重启服务

[root@master salt]# systemctl restart salt-master

在主控端执行刷新state 配置命令,让两台被控端去执行安装 apache

[root@master salt]# salt '*' state.highstate
web01.saltstack.com:
----------
           ID: apache-service
     Function: pkg.installed
         Name: httpd
       Result: True
      Comment: The following packages were installed/updated: httpd
      Started: 13:44:05.771181
     Duration: 56803.894 ms
      Changes:

……….

web02.saltstack.com:
----------
           ID: apache-service
     Function: pkg.installed
         Name: httpd
       Result: True
      Comment: The following packages were installed/updated: httpd
      Started: 13:44:05.140861
     Duration: 87107.738 ms
      Changes:

在被控制端查看安装情况

[root@web01 ~]# rpm -q httpd
httpd-2.4.6-80.el7.centos.1.x86_64
[root@web01 ~]# systemctl status httpd
● httpd.service - The Apache HTTP Server
    Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
    Active: active (running) since 四 2018-10-25 13:45:59 CST; 6min ago
      Docs: man:httpd(8)
            man:apachectl(8)
  Main PID: 38811 (httpd)
    Status: "Total requests: 0; Current requests/sec: 0; Current traffic:   0 B/sec"
    CGroup: /system.slice/httpd.service
            ├─38811 /usr/sbin/httpd -DFOREGROUND
            ├─38812 /usr/sbin/httpd -DFOREGROUND
            ├─38813 /usr/sbin/httpd -DFOREGROUND
            ├─38814 /usr/sbin/httpd -DFOREGROUND
            ├─38815 /usr/sbin/httpd -DFOREGROUND
            └─38816 /usr/sbin/httpd -DFOREGROUND

10月 25 13:45:59 web01.saltstack.com systemd[1]: Starting The Apache HTT...
10月 25 13:45:59 web01.saltstack.com systemd[1]: Started The Apache HTTP...
Hint: Some lines were ellipsized, use -l to show in full.

[root@web02 ~]# rpm -q httpd
httpd-2.4.6-80.el7.centos.1.x86_64

总结:

Saltstack 由 Master 和 Minion 构成,Master 和 Minion 之间通过消息队列 (ZeroMQ) 进行通信。

Saltstack 的模块有 pkg、file、cmd、user、service、cron 。

定义的属性值如果是经常发生变化的,采用 pillar ;如果很固定、不易改变的,采用 grains 。

state 是 Saltstack 最核心模块的功能,通过预先定制好的 sls 文件 (salt state file ),对被控主机进行管理,如程序包、文件、网络配置、系统服务、系统用户等。

自动化运维之 部署Saltstack 并批量部署 Nginx相关推荐

  1. 企业级自动化运维方案设计及Saltstack、Ansible等5种工具比较分析--云平台技术栈08...

    导读:之前发布了云平台技术栈(ps:点击可查看),本文主要说一下其中的服务器自动化配置! 来自:公众号talkwithtrend 1.企业运维现状与发展趋势 随着企业信息化的不断发展,运维人员需要面对 ...

  2. 部署 SaltStack 自动化运维工具,并简易批量安装 httpd 服务

    SaltStack 介绍 SaltStack 是一个基于 Python 开发的一套架构配置管理工具,采用 C/S模式,server端就是salt的master,client端就是minion,mini ...

  3. 自动化运维之k8s——Kubernetes集群部署、pod、service微服务、kubernetes网络通信

    目录 一.Kubernetes简介 1.Kubernetes简介 2.kubernetes设计架构 3.Kubernetes核心组件 4.kubernetes设计结构 二.Kubernetes部署 1 ...

  4. python自动化脚本实例100条-自动化运维基础实例解析-Python批量登录到服务器执行任务...

    开发背景: 根据信息系统安全等级保护的要求,需要对IDC所有数据库服务器进行安全检查,以确认服务器的安全设置是否符合等级保护要求,需要在所有数据库服务器上执行以下命令: wget http://10. ...

  5. 自动化运维平台Spug之板块-批量执行 介绍

    介绍:包含维护命令模版和批量远程执行命令两部分功能,常用来执行一些临时的任务例如,批量安装/卸载某个依赖包等 执行任务:可以选择一到多个在主机管理中添加的主机作为执行的目标主机,命令内容可以直接写也支 ...

  6. Python在自动化运维中的应用之批量配置交换机

    最近在学习Python语言,想着通过一些实际应用来学习可以回事理解,所以想到批量配置管理企业内部的思科交换机. python是一门解释性语言比较高级有很多的基础库和第三方开发库,现在开发环境也比较热门 ...

  7. 自动化运维saltstack(资源)

    2019独角兽企业重金招聘Python工程师标准>>> 简介 SaltStack是一个服务器基础架构集中化管理平台,具备配置管理.远程执行.监控等功能,一般可以理解为简化版的pupp ...

  8. @ansible自动化运维详解(总述)

    ansible [自动化运维应用场景] "运维的未来是,让研发人员能够借助工具.自动化和流程,并且让他们能够在运维干预极少的情况下部署和运营服务,从而实现自助服务.每个角色都应该努力使工作实 ...

  9. Ansible自动化运维企业实际应用场景分析

    企业实际应用场景分析 Dev开发环境 使用者:程序员 ​ 功能:程序员个人的办公电脑或项目的开发测试环境,部署开发软件,测试个人或项目整体的BUG的环境 ​ 管理者:程序员 测试环境 使用者:QA测试 ...

最新文章

  1. python torch exp_Python:PyTorch 保存和加载训练过的网络 (八十)
  2. HDU2227(非降子序列的个数)
  3. Java锁之公平和非公平锁
  4. 11-windows下卸载Orcale
  5. OpenShift 4 - 镜像漏洞扫描软件 Clair
  6. c#文件流读取编码问题(转)新增加一个方法解决不带BOM的问题
  7. 搭建新环境的准备工作
  8. 当toB产品经理遇到数据分析
  9. Web3:开源文化下的技术创新
  10. 5G NR CDRX
  11. 全国主要城市经纬度SQL脚本
  12. 记录CSDN账号被盗事件
  13. 如何优雅的整合定时批量任务(荣耀典藏版)
  14. 如何做出好看的三维平面地图?
  15. RMAN 下CROSSCHECK命令 详解
  16. php上传报未定义偏移量,PHP注意:未定义的偏移量:1,当读取数据时带数组
  17. Tracer 记录 Controller 日志
  18. jmap 和jstack使用
  19. 这类注解都不知道,还好意思说用过Spring Boot?
  20. 如何在智星云主机配置 conda 和 pip 源

热门文章

  1. 通过流进行字符集编码转换
  2. 配置集群Nginx+Memcached+Tomcat集群配置
  3. stm32程序中的assert_param()的说明
  4. Win8 官方培训课程
  5. Oracle Connect By Start With 总结==转帖
  6. Right Here Waiting
  7. CodeForces - 1480D2 Painting the Array II(dp)
  8. CodeForces - 501C Misha and Forest(拓扑排序)
  9. UVA10603 倒水问题
  10. Python实战-获取鼠标键盘事件