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服务操作。

    SaltStack安装部署:

角色 操作系统 主机名 IP地址
master CentOS7 master.saltstack.com 192.168.72.128
minion CentOS7 web01.saltstack.com 192.168.72.159
minion CentOS7 web02.saltstack.com 192.168.72.161
1.修改三台服务器主机名:  
*   hostnamectl set-hostname master.saltstack.com       
*   hostnamectl set-hostname web01.saltstack.com       
*   hostnamectl set-hostname web02.saltstack.com

自动化运维之SaltStack
自动化运维之SaltStack_第1张图片
自动化运维之SaltStack

2.修改三台hosts文件(内容相同):
* vim /etc/hosts
192.168.72.128 master.saltstack.com
192.168.72.159 web01.saltstack.com
192.168.72.161web02.saltstack.com
* init 6      #分别重启系统 让各主机名生效

自动化运维之SaltStack

3.重启之后将三台服务器的防火墙关闭,selinux功能关闭;分别为三台机器添加epel源,本地有官方源.
* systemctl stop firewalld.service
* setenforce 0
* yum install epel-release -y     #安装epel源

自动化运维之SaltStack_第2张图片

4.master上安装saltsatck服务端:
* yum install salt-master -y      #安装 master salt 服务

自动化运维之SaltStack_第3张图片

5.安装完成之后修改配置文件:
* vim /etc/salt/master
 15行:interface: 192.168.72.128    # master 监控地址
 215行:auto_accept: True    #开启  避免要运行salt-key来确认证书认证,自动授权同意
 416行:
 file_roots:                #开启saltstack文件根目录位置,存放文件
   base:
     - /srv/salt            #默认文件夹不存在,需要创建
710行: 
 nodegroups:
   group1: 'web01.saltstack.com'        #指定被控制服务器主机名
   group2: 'web02.saltstack.com'
552行:pillar_opts: True    #开启pillar功能   
529行:
pillar_roots:        #pillar的主目录,存放动态信息
  base:
       - /srv/pillar    #默认文件夹不存在,需要创建

自动化运维之SaltStack_第4张图片
自动化运维之SaltStack_第5张图片
自动化运维之SaltStack_第6张图片
自动化运维之SaltStack_第7张图片
自动化运维之SaltStack_第8张图片
自动化运维之SaltStack

6.根据刚才修改的配置文件创建相应的目录
* mkdir /srv/salt    
* mkdir /srv/pillar
* cat /etc/salt/master | grep -v ^$ | grep -v ^#   #查看配置文件修改内容
* systemctl start salt-master.service   #开启服务
* netstat -antp | egrep '4505|4506'    #查看 4505 4506 端口是否打开

自动化运维之SaltStack_第9张图片
自动化运维之SaltStack_第10张图片

7.在两台minion上安装saltstack客户端:
* yum -y install salt-minion          #安装 minion salt 服务

自动化运维之SaltStack_第11张图片

8.安装好之后修改配置文件(两台minion都需要):
* vim /etc/salt/minion
16行:master: 192.168.72.128    #指向 master IP地址
78行:和master配置文件中节点服务器名称统一 
     id:web01.saltstack.com     #节点一上修改 
     id:web02.saltstack.com       #节点二上修改

自动化运维之SaltStack_第12张图片
自动化运维之SaltStack_第13张图片
自动化运维之SaltStack_第14张图片

9.启动被监控主机服务
* systemctl start salt-minion.service     
10.在监控端master查看管理的主机
* salt-key list   #查看被控主机
*.在主控端测试与被控端的通信状态:
* salt '*' test.ping      测试与被管理端是否网络连通
* salt '*' cmd.run 'df -h'   //远程执行命令
* 查看被控主机上grains所有值:(每次minion在启动是都会获取客户端信息)
* salt 'web01.saltstack.com' grains.items (静态数据)
* salt 'web01.saltstack.com' pillar.items  (动态数据)

自动化运维之SaltStack_第15张图片
自动化运维之SaltStack_第16张图片
自动化运维之SaltStack_第17张图片
自动化运维之SaltStack_第18张图片

11.配置管理安装Apache,下面进行的演示是远程通过 yum 方式安装 Apache。步骤如下:
* 修改配置文件
* vi /etc/salt/master     // 打开如下内容的注释
  file_roots:
      base:
      - /srv/salt/
12.注意:环境: base、dev(开发环境)、test(测试环境)、prod(生产环境)
* vi /srv/salt/top.sls
base:
  '*':
    - apache
注意:'*',则表示在所有的客户端执行 apache 模块。

自动化运维之SaltStack_第19张图片

13.编写安装Apache剧本:
* vi /srv/salt/apache.sls
apache-service:
  pkg.installed:
    - names:                // 如果只有一个服务,那么就可以写成 –name: httpd 不用再换一行
      - httpd
      - httpd-devel
  service.running:
    - name: httpd
    - enable: True
注意:apache-service 是自定义的 id 名。pkg.installed 为包安装函数,下面是要安装的包的名字。service.running 也是一个函数,来保证指定的服务启动,enable 表示开机启动。

自动化运维之SaltStack_第20张图片

14.重启服务
* systemctl restart salt-master
执行命令
* salt '*' state.highstate 

自动化运维之SaltStack_第21张图片
15.查看apache服务是否安装成功:
自动化运维之SaltStack_第22张图片