在生产环境中,服务器往往不只一台,有可能是成千上万台。对于运维人员来说,如果单独对每一台服务器进行管理,工作难度实在是太大了。SaltStack是一个服务器基础设施管理工具,它具有配置管理,远程执行,监控等功能。SaltSack有Python语言编写,是非常简单易用和轻量级的管理工具

SaltStack原理

  1. SaltStack由Master和Minion构成,master是服务端,表示一台服务器;minion是客户服务端,表示多台服务器。在master上发送命令给minion,minion就会执行相应的命令。master与minion之间是通过ZeroMQ(消息队列)进行通信的。

  2. SaltStack的master端监听4505与4506端口,4505为master和minion认证通信端口,4506为master用来发送命令或者接受minion的命令执行返回信息。

  3. 当客户端启动后,会主动连接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.195.147
minion web01.saltstack.com 192.168.195.167
minion web02.saltstack.com 192.168.195.168

SaltStack安装部署

修改三台服务器主机名

hostnamectl set-hostname master.saltstack.com       //在master修改

hostnamectl set-hostname web01.saltstack.com       

hostnamectl set-hostname web02.saltstack.com

修改三台hosts文件(内容相同)

vim /etc/hosts

192.168.195.147 master.saltstack.com

192.168.195.167 web01.saltstack.com

192.168.195.168 web02.saltstack.com


init 6      //分别重启系统 让各主机名生效

安装saltstack

重启之后将三台服务器的防火墙关闭,selinux功能关闭

systemctl stop firewalld.service

setenforce 0

分别为三台机器添加epel源,本地有官方源

yum install epel-release -y     #安装epel源

master上安装saltsatck服务端

yum install salt-master -y      #安装 master salt 服务

安装好之后修改配置文件

vim /etc/salt/master

第15行

interface: 192.168.195.147    # master 监控地址

第215行

auto_accept: True    #开启  避免要运行salt-key来确认证书认证,自动授权同意

第416行

file_roots:                #开启saltstack文件根目录位置,存放文件

  base:

    - /srv/salt            #默认文件夹不存在,需要创建

第710行529GG

nodegroups:

  group1: 'web01.saltstack.com'        #指定被控制服务器主机名

  group2: 'web02.saltstack.com'

第552行

pillar_opts: True    #开启pillar功能   

第529行

pillar_roots:        #pillar的主目录,存放动态信息

  base:

    - /srv/pillar    #默认文件夹不存在,需要创建

1.png2.png自动化运维之SaltStack_第1张图片自动化运维之SaltStack_第2张图片5.png

6.png


mkdir /srv/salt      #创建

mkdir /srv/pillar

cat /etc/salt/master | grep -v ^$ | grep -v ^#   #查看配置文件修改内容

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


systemctl start salt-master.service   #开启服务

netstat -antp | egrep '4505|4506'    #查看 4505 4506 端口是否打开

8.png

被管理端minion上的部署配置

两台minion上安装saltstack客户端

yum -y install salt-minion          #安装 minion salt 服务

安装好之后修改配置文件

vim /etc/salt/minion

第16行

master: 192.168.195.147    #指向 master IP地址

9.png

第78行

和master配置文件中节点服务器名称统一 

id:web01.saltstack.com     #节点一上修改 

id:web02.saltstack.com       #节点二上修改

10.png11.png

启动被监控主机服务

systemctl start salt-minion.service     

在监控端master查看管理的主机

salt-key list   #查看被控主机

12.png

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

salt '*' test.ping      测试与被管理端是否网络连通

13.png

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

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

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

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

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

配置管理安装Apache

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

修改配置文件

vi /etc/salt/master     // 打开如下内容的注释

file_roots:

  base:

    - /srv/salt/

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

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

vi /srv/salt/top.sls

base:

  '*':

    - apache

注意:'*',则表示在所有的客户端执行 apache 模块。

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

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_第7张图片

重启服务

systemctl restart salt-master

执行命令

salt '*' state.highstate 

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

在minion上查看apache服务是否安装成功

17.png18.png