自動化運維之 部署Saltstack 並批量部署 Nginx

Saltstack 原理node

         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 端請求註冊鏈接。python

Saltstack 經常使用模塊ios

  Saltstack 提供了很是多的功能模塊,以便於對操做系統的基礎功能和經常使用工具的操做。web

(1)pkg 模塊正則表達式

pkg 模塊的做用是包管理,包括增刪更新。apache

(2)file 模塊vim

file 模塊的做用是管理文件操做,包括同步文件、設置文件權限和所屬用戶組、刪除文件等操做。centos

(3)cmd 模塊api

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 ),對被控主機進行管理,如程序包、文件、網絡配置、系統服務、系統用戶等。

相關文章
相關標籤/搜索