相关配置修改


在执行salt命令之前,我们需要对master的配置文件进行修改。


vim /etc/salt/master

第一步搜索fire_roots,并去掉之前的注释部分


# file_roots:

#   base:

#     - /srv/salt/

#   dev:

#     - /srv/salt/dev/services

#     - /srv/salt/dev/states

#   prod:

#     - /srv/salt/prod/services

#     - /srv/salt/prod/states

#


file_roots:

  base:

    - /srv/salt



在这里有个特别需要我们注意的问题,一定要确保file_roots前面没有空格,而base前两个空格-前面四个空格,在salt的配置里面空格十分重要,我们必须高度注意,否则及其容易造成实验不成功,之所以对空格敏感主要salt基于Python开发,并采用了yaml的语法.(注意注意注意,不要使用tab键)

有必要解释下相关配置内容:

base:代表环境(默认必须有),可就是说salt可以同时管理多个环境,比如测试、开发、生产等环境。其实从我们修改的行上方不难我们不难看出,salt拥有针对多环境的特点。至于底下的小- 则代表状态文件存放路径,可能有些同学对这个状态文件有些疑惑,我们拿软件安装来讲,我们想要批量安装,环境标准化。我们总得告诉系统,我们要安装什么,怎么安装。这时候我们就需要一个文件为系统指明,这个文件就是上面的状态文件。要注意-和后面的路径有中间有一个空格哦



第二步:创建状态文件存放目录

mkdir /srv/salt -p

第三步:状态文件编写(本次以安装Apache为例)

cd /srv/salt

vim apache.sls    #至于为什么以.sls结尾,在后面介绍将会告诉大家


[root@master salt]# cat apache.sls  #-->配置文件的路径一定要是sls后缀

apache-install: #1-->这里只是设置一个名称

  pkg.installed: #2-->这是一个方法,用来安装YUM软件的(前面两个空格)

    - names: #3-->以软件的名称方式安装(前面四个空格)

      - httpd #4-->指定安装的软件(前面六个空格)

      - httpd-devel #5-->


apache-service: #6-->

  service.running: #7-->

    - name: httpd #8-->

    - enable: True #9-->

    - reload: True #10-->




上面apache.sls配置文件说明:


apache-install: #ID(唯一标识符)

 pkg.installed: #pkg为模块 installed为方法

  - names: # names为installed的参数 后面可以是要安装包的列表

  - httpd #安装程序包

  - httpd-devel #安装程序包

apache-service: #ID唯一标识

 service.running: #service为模块 running为方法

  - name: httpd #运行服务名称

  - enable: True #服务开机自动启动




配置文件说明:


1代表功能说明,这一行目的是方便用户使其他用户能够清楚认识该状态模块的功能,注意不要丢掉结尾的冒号

2代表采用pkg模块的installed方法。(为了方便理解我们可以把模块理解为职业而方法理解为这个职业拥有的技能),这里有必要说下install这个方法,这个方法在centos机器上会采用yum方式进行安装,而在Ubuntu上则采用apt方式安装,注意与开头空两个空格结尾有冒号

3是installed方法的参数,- names作用是指定安装包(注意结尾的冒号以及开头的4个空格)

4和5是要安装的软件包(注意开头的6个空格)

6789则和上面的信息有些类似

6同样代表功能说明,而7是代表采用了service的running方法。8代表要操作的服务名称9代表安装完成之后是否启动,10代表当配置文件修改之后,是否自动重载


第四步:重启master然后开始执行

salt '*' state.sls apache     #其中salt为命令不必多说 ‘*’代表在所有主机上,state则是模块而sls则是方法(这是由于这个方法所以我们之前所采用的后缀才为sls)而apache则是我们之前编写的状态文件名(不包含后缀),也是给前面传入的参数。所以这条命令就是在所有机器上执行apache这个状态

当执行此命令时,各个minion端将会开始工作,感兴趣的同学可以采用ps -ef|grep yum将会发现如下有趣的现象,发现yum自动工作了



上面命令的原理:

发送/src/salt/web/apache.sls到minion 端的/var/cache/salt/minion/extmods/files/base/apache.sls



第五步:验证返回=======


Summary

------------

Succeeded: 3

Failed:    0

------------

Total states run:     3


从返回的数据可以看出都是正常返回,没有报错信息(报错信息默认红色显示)。可能有些小伙伴们会疑惑这个3是什么意思,其实我们可以回想一下,我们写了要安装httpd、httpd-devel以及在安装完成之后启动,还有在配置文件修改后重启。不过我们可以发现我们没有对配置文件进行任何操作,因此最后一项没有执行,所以才会显示Succeeded 3以及changed=3

接下来我们对网站进行验证






[root@client ~]# netstat -lnptu

Active Internet connections (only servers)

Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name

tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      914/sshd

tcp        0      0 :::80                       :::*                        LISTEN      26645/httpd


可以访问测试一下客户端有没有安装成功httpd

http://192.168.1.160/





salt配置管理的高级状态

当然我们也可以根据不同的主机执行不同的状态配置文件,需要编辑top.sls即可实现(我们把这种状态称为高级状态)


#设置入口文件top.sls 实现根据不同的主机执行不同的配置文件




vim /srv/salt/top.sls

base:

  '*':      #要执行的主机

    - init  #需要执行的配置文件


#所有的minion都执行base目录下的init.sls,用init.sls进行系统的初始化配置


mkdir /srv/salt/files

cp /etc/resolv.conf /srv/salt/files


#文件管理

vim /srv/salt/init.sls 

/etc/resolv.conf:

  file.managed:

    - source: salt://files/resolv.conf

    - mode: 644

    - user: root

    - group: root



#包管理

initpkgs:

  pkg.installed:

    - pkgs:

    - tree

    - lrzsz


# salt.states.user 和 salt.states.group 管理系统的用户和组

# 创建jboss 组,后创建 Jboss 用户

jboss:

  group.present:

    - gid: 501

  user.present:

    - fullname: jboss

    - password:          # 此处可以填写加密后的用户密码。即/etc/shadow 里面的 Hash 串。

    - shell: /bin/bash

    - home: /home/jboss

    - uid: 501

    - gid: 501

    - groups:

      - jboss


#服务启动管理

redis:

  service:

    - running

    - enable: True

    - reload: True

    - watch:

      - pkg: redis



可以指定哪台主机执行哪些配置

vim top.sls

base:

 'salt-client1.com':

  - apache

 'salt-client2.com':

  - apache




现在我们来根据不同主机执行不同的状态配置文件

[root@master salt]# salt '*' state.highstate  #执行salt的高级状态