Saltstack搭建及批量安装Apache

在生产环境中,服务器往往不止一台有可能成千,上万台。这对运维人员来说管理难度太大了。saltstack是一 个新的基础平台管理工具,可以支撑管理上万台服务器的规模,数秒钟即可完成数据传递。

Saltstack介绍

1、 saltstack是使用python语言开发的;

2、轻量级的管理工具,批量执行命令;

3、常用模块: pkg (包)、file (文件)、cmd (执行命令或脚本)、user、service、cron

 4、saltstack数据系统
Grains(静态数据)
 pillar (动态数据)

saltstack三大功能

远程执行

配置管理

云管理

Saltstack搭建及批量安装Apache

优缺点

优点:

首先,他速度快,基于消息队列+线程,跑完多台设备,都是毫秒级别的

其次,非常灵活,源码是python,方便理解和自定义模块(python 语言相对于其他的perl、ruby等还是很好理解的)

命令简单,功能强大

缺点:

部署minion端较为不便

Saltstack几个重要的组件

grains

grains是在 minion(客户端)启动时收集到的一些信息,比如操作系统类型、网卡ip等静态信息。

grains的信息并不是动态的,并不会时时变更,它只是在 minion 启动时收集到的

pillar

pillar 和 grains 不一样,是在 master 上定义的,并且是针对 minion 定义的一些信息。像一些比较重要的数据(密码)可以存在 pillar 里,还可以定义变量等。

State

他是saltstack的最核心功能,通过预先指定好的sls文件对被控主机进行管理:包/文件/网络配置/系统服务/系统用户等。

实验环境:

1、准备三台主机,每台主机都要修改两个配置文件/etc/hosts和/etc/hostname。

[[email protected] ~]# cat /etc/hosts

192.168.35.100 master.saltstack.com
192.168.35.101 web01.saltstack.com
192.168.35.102 web02.saltstack.com

[[email protected] ~]# cat /etc/hostname 

master.saltstack.com

2、每台主机都关闭防火墙

[[email protected] ~]# systemctl stop firewalld.service 
[[email protected] ~]# setenforce 0

3、分别为三台机器添加epel源

yum install -y epel-release

master上安装部署

1、安装salt-master软件包

[[email protected] ~]# yum -y install salt-master

2、修改主配置文件

[[email protected] ~]# vim /etc/salt/master

/15 interface: 192.168.35.100         #监听地址为本地IP地址

/215 auto_accept: True                #避免要运行salt-key来确认证书认证

/416 file_roots:
/417   base:
/418     - /srv/salt                          #saltstack文件根目录位置,目录需要创建

/552 pillar_opts: True                   #开启pillar功能,同步文件功能

/529 pillar_roots:
/530   base:
/531     - /srv/pillar                         #pillar的主目录,需要创建

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

3、查看对主配置文件做的更改

[[email protected] ~]# cat /etc/salt/master | grep -v ^$ | grep -v ^#
interface: 192.168.35.100
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'

4、创建salt与pillar文件根目录

[[email protected] ~]# mkdir /srv/salt
[[email protected] ~]# mkdir /srv/pillar

5、启动服务并查看端口

[[email protected] ~]# systemctl start salt-master.service 
[[email protected] ~]# systemctl enable salt-master.service 
Created symlink from /etc/systemd/system/multi-user.target.wants/salt-master.service to /usr/lib/systemd/system/salt-master.service.
[[email protected] ~]# netstat -ntap | egrep '4505|4506'
tcp        0      0 192.168.35.100:4505     0.0.0.0:*               LISTEN      60213/python        
tcp        0      0 192.168.35.100:4506     0.0.0.0:*               LISTEN      60237/python        

web01和web02上操作

1、在两台上分别安装salt-minion安装包

yum -y install salt-minion

2、修改配置文件

[[email protected] ~]# vim /etc/salt/minion 

/16 master: 192.168.35.100          #指定主控端IP

/78 id: web01.saltstack.com          #指定被控端主机名

3、启动服务

[[email protected] ~]# systemctl start salt-minion.service

4、web02和web01的以上操作一样

master端操作

1、测试与被控端的通信状态

[[email protected] ~]# salt '*' test.ping
web02.saltstack.com:
    True
web01.saltstack.com:
    True

2、远程执行命令

[[email protected] ~]# salt '*' cmd.run 'df -h'
web02.saltstack.com:
    Filesystem               Size  Used Avail Use% Mounted on
    /dev/mapper/centos-root   20G  3.5G   17G  18% /
    devtmpfs                 897M     0  897M   0% /dev
    tmpfs                    912M   12K  912M   1% /dev/shm
    tmpfs                    912M  9.0M  903M   1% /run
    tmpfs                    912M     0  912M   0% /sys/fs/cgroup
    /dev/mapper/centos-home   10G   37M   10G   1% /home
    /dev/sda1                6.0G  179M  5.9G   3% /boot
    tmpfs                    183M     0  183M   0% /run/user/0
    tmpfs                    183M   12K  183M   1% /run/user/42
web01.saltstack.com:
    Filesystem               Size  Used Avail Use% Mounted on
    /dev/mapper/centos-root   20G  4.4G   16G  22% /
    devtmpfs                 897M     0  897M   0% /dev
    tmpfs                    912M   12K  912M   1% /dev/shm
    tmpfs                    912M  9.0M  903M   1% /run
    tmpfs                    912M     0  912M   0% /sys/fs/cgroup
    /dev/mapper/centos-home   10G   37M   10G   1% /home
    /dev/sda1                6.0G  179M  5.9G   3% /boot
    tmpfs                    183M   12K  183M   1% /run/user/42
    tmpfs                    183M     0  183M   0% /run/user/0

3、查看在 master 上已经被接受过的客户端

[[email protected] ~]# salt-key
Accepted Keys:
web01.saltstack.com
web02.saltstack.com
Denied Keys:
Unaccepted Keys:
Rejected Keys:

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

(1)静态数据查看

[[email protected] ~]# salt 'web01.saltstack.com' grains.items

(2)动态数据查看

[[email protected] ~]# salt 'web01.saltstack.com' pillar.items

配置管理安装Apache

远程通过 yum 方式安装 Apache。步骤如下:

1、修改配置文件,创建目录(之前已经修改并创建)

[[email protected] ~]# vim /etc/salt/master                #打开如下内容的注释

/416 file_roots:
/417   base:
/418     - /srv/salt   

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

[[email protected] ~]# mkdir /srv/salt                 #创建目录

2、写管理性文件

[[email protected] ~]# vim /srv/salt/top.sls

base:
 '*':
   - apache

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

3、写apache文件

[[email protected] ~]# vim /srv/salt/apache.sls

apache-service:
  pkg.installed:
    - names:                #如果只有一个服务,那么就可以写成 –name: httpd 不用再换一行
      - httpd
      - httpd-devel
  service.running:
    - name: httpd
    - enable: True

4、重启服务

[[email protected] salt]# systemctl restart salt-master.service

5、执行命令

[[email protected] salt]# salt '*' state.highstate 
web02.saltstack.com:
----------
          ID: apache-service
    Function: pkg.installed
        Name: httpd
      Result: True
     Comment: Package httpd is already installed.
     Started: 11:51:24.096177
    Duration: 2127.096 ms
     Changes:   
----------
          ID: apache-service
    Function: pkg.installed
        Name: httpd-devel
      Result: True
     Comment: The following packages were installed/updated: httpd-devel
     Started: 11:51:26.223581
    Duration: 48428.685 ms
     Changes:   
              ----------
              apr-devel:
                  ----------
                  new:
                      1.4.8-5.el7
                  old:
              apr-util-devel:
                  ----------
                  new:
                      1.5.2-6.el7
                  old:
              cyrus-sasl:
                  ----------
                  new:
                      2.1.26-23.el7
                  old:
                      2.1.26-21.el7
              cyrus-sasl-devel:
                  ----------
                  new:
                      2.1.26-23.el7
                  old:
              cyrus-sasl-gssapi:
                  ----------
                  new:
                      2.1.26-23.el7
                  old:
                      2.1.26-21.el7
              cyrus-sasl-lib:
                  ----------
                  new:
                      2.1.26-23.el7
                  old:
                      2.1.26-21.el7
              cyrus-sasl-md5:
                  ----------
                  new:
                      2.1.26-23.el7
                  old:
                      2.1.26-21.el7
              cyrus-sasl-plain:
                  ----------
                  new:
                      2.1.26-23.el7
                  old:
                      2.1.26-21.el7
              cyrus-sasl-scram:
                  ----------
                  new:
                      2.1.26-23.el7
                  old:
                      2.1.26-21.el7
              expat-devel:
                  ----------
                  new:
                      2.1.0-10.el7_3
                  old:
              httpd-devel:
                  ----------
                  new:
                      2.4.6-90.el7.centos
                  old:
              libdb:
                  ----------
                  new:
                      5.3.21-25.el7
                  old:
                      5.3.21-20.el7
              libdb-devel:
                  ----------
                  new:
                      5.3.21-25.el7
                  old:
              libdb-utils:
                  ----------
                  new:
                      5.3.21-25.el7
                  old:
                      5.3.21-20.el7
              openldap:
                  ----------
                  new:
                      2.4.44-21.el7_6
                  old:
                      2.4.44-5.el7
              openldap-devel:
                  ----------
                  new:
                      2.4.44-21.el7_6
                  old:
----------
          ID: apache-service
    Function: service.running
        Name: httpd
      Result: True
     Comment: Service httpd has been enabled, and is running
     Started: 11:52:14.669583
    Duration: 1595.33 ms
     Changes:   
              ----------
              httpd:
                  True

Summary
------------
Succeeded: 3 (changed=2)
Failed:    0
------------
Total states run:     3
web01.saltstack.com:
----------
          ID: apache-service
    Function: pkg.installed
        Name: httpd
      Result: True
     Comment: Package httpd is already installed.
     Started: 11:51:24.709143
    Duration: 2124.908 ms
     Changes:   
----------
          ID: apache-service
    Function: pkg.installed
        Name: httpd-devel
      Result: True
     Comment: The following packages were installed/updated: httpd-devel
     Started: 11:51:26.834366
    Duration: 55238.452 ms
     Changes:   
              ----------
              apr-devel:
                  ----------
                  new:
                      1.4.8-5.el7
                  old:
              apr-util-devel:
                  ----------
                  new:
                      1.5.2-6.el7
                  old:
              cyrus-sasl:
                  ----------
                  new:
                      2.1.26-23.el7
                  old:
                      2.1.26-21.el7
              cyrus-sasl-devel:
                  ----------
                  new:
                      2.1.26-23.el7
                  old:
              cyrus-sasl-gssapi:
                  ----------
                  new:
                      2.1.26-23.el7
                  old:
                      2.1.26-21.el7
              cyrus-sasl-lib:
                  ----------
                  new:
                      2.1.26-23.el7
                  old:
                      2.1.26-21.el7
              cyrus-sasl-md5:
                  ----------
                  new:
                      2.1.26-23.el7
                  old:
                      2.1.26-21.el7
              cyrus-sasl-plain:
                  ----------
                  new:
                      2.1.26-23.el7
                  old:
                      2.1.26-21.el7
              cyrus-sasl-scram:
                  ----------
                  new:
                      2.1.26-23.el7
                  old:
                      2.1.26-21.el7
              expat-devel:
                  ----------
                  new:
                      2.1.0-10.el7_3
                  old:
              httpd-devel:
                  ----------
                  new:
                      2.4.6-90.el7.centos
                  old:
              libdb:
                  ----------
                  new:
                      5.3.21-25.el7
                  old:
                      5.3.21-20.el7
              libdb-devel:
                  ----------
                  new:
                      5.3.21-25.el7
                  old:
              libdb-utils:
                  ----------
                  new:
                      5.3.21-25.el7
                  old:
                      5.3.21-20.el7
              openldap:
                  ----------
                  new:
                      2.4.44-21.el7_6
                  old:
                      2.4.44-5.el7
              openldap-devel:
                  ----------
                  new:
                      2.4.44-21.el7_6
                  old:
----------
          ID: apache-service
    Function: service.running
        Name: httpd
      Result: True
     Comment: Service httpd has been enabled, and is running
     Started: 11:52:22.094016
    Duration: 1539.146 ms
     Changes:   
              ----------
              httpd:
                  True

Summary
------------
Succeeded: 3 (changed=2)
Failed:    0
------------
Total states run:     3

6、安装好后可以在被控制端检查是否安装上

[[email protected] ~]# rpm -q httpd
httpd-2.4.6-90.el7.centos.x86_64

[[email protected] ~]# rpm -q httpd
httpd-2.4.6-90.el7.centos.x86_64