1. 程式人生 > >Saltstack自動化安裝部署httpd,php

Saltstack自動化安裝部署httpd,php

一.Saltstack簡介

SaltStack是一個伺服器基礎架構集中化管理平臺,具備配置管理、遠端執行、監控等功能,基於Python語言實現,結合輕量級訊息佇列
(ZeroMQ)與Python第三方模組構建。通過部署SaltStack,我們可以在成千上萬臺伺服器上做到批量執行命令,根據不同業務進行配置
集中化管理、分發檔案、採集伺服器資料、作業系統基礎及軟體包管理等,SaltStack是運維人員提高工作效率、規範業務配置與操作利器。

SaltStack 具有以下特性,更好的實現系統批量管理

    部署簡單、管理方便;
    支援大部分的作業系統,如 Unix/Linux/Windows 環境;架構上使用C/S管理模式,易於擴充套件;
    配置簡單、功能覆蓋廣;
    主控端(Master)與被控端(Minion)基於證書認證,確保安全可靠的通訊;
    支援 API 及自定義 Python 模組,輕鬆實現功能擴充套件;

SaltStack架構

SaltStack 採用 C/S 的架構,SaltStack 客戶端(Minion)在啟動時,會自動生成一套金鑰,包含私鑰和公鑰。
之後將公鑰傳送SaltStack伺服器端(Master),伺服器端驗證並接受公鑰,以此來建立可靠且加密的通訊連線。同時通過訊息ZeroMQ
在客戶端與服務端之間建立訊息釋出連線。

二.實驗配置

實驗環境rhel6.5 server6:172.25.0.122 (salt-master) server7:172.25.0.123 (salt-minion)

1.配置yum源 此物理機中準備了saltstack包放入rhel6,修改server6/7的yum源; 在這裡插入圖片描述

列出軟體包: 在這裡插入圖片描述

2.安裝及檔案修改 1)salt-master [[email protected] ~]# yum install salt-master -y [[email protected] ~]# /etc/init.d/salt-master start 2)salt-minion [[email protected] ~]# yum install salt-minion -y [[email protected] ~]# cd /etc/salt/ [[email protected] salt]# vim minion 在這裡插入圖片描述 [[email protected]

salt]# /etc/init.d/salt-minion start

sat-key的幫助資訊:

Usage: salt-key [options]

Salt key 用於管理認證key

Options:
  --version            顯示版本號後退出
  --versions-report    顯示程式的所有依賴包版本號,並退出
  -h, --help           幫助資訊
  -c CONFIG_DIR, --config-dir=CONFIG_DIR
                       指定配置目錄,預設 :/etc/salt/

  -q, --quiet          安靜模式,不輸出資訊到控制檯
  -y, --yes            對所有詢問是否繼續,回答yes,預設:false

  Logging Options:
                   設定loggin選項會覆蓋掉配置檔案中對日誌的配置.

    --log-file=LOG_FILE                 
                        指定日誌檔案路徑,預設: /var/log/salt/key.
    --log-file-level=LOG_LEVEL_LOGFILE
                        日誌檔案等級,可設定下面中的一個值 'all', 'garbage',
                        'trace', 'debug', 'info', 'warning', 'error', 'quiet'.
                        預設: 'warning'.
    --key-logfile=KEY_LOGFILE
                        將所有的輸出傳送到指定的檔案,預設: '/var/log/salt/key'


  Output Options:
    配置輸出格式

    --out=OUTPUT, --output=OUTPUT
                        把salt-key命令的輸出資訊傳送給指定的outputer. 
                可設定為下面引數值 'no_return', 'virt_query'.
                        'grains', 'yaml', 'overstatestage', 'json', 'pprint',
                        'nested', 'raw', 'highstate', 'quiet', 'key', 'txt',

    --out-indent=OUTPUT_INDENT, --output-indent=OUTPUT_INDENT
                        設定輸出行縮排的空格數. 
                        負數取消輸出縮排編排.僅對使用的outputer有效.
    --out-file=OUTPUT_FILE, --output-file=OUTPUT_FILE
                        把顯示輸出到指定的檔案
    --no-color, --no-colour
                        關閉字型顏色
    --force-color, --force-colour
                        強制開啟輸出顏色渲染

  Actions:
    -l ARG, --list=ARG 
                    列印公鑰key. 可設定下面三個值
                "pre", "un", and "unaccepted" 會顯示 不許可/未簽名 keys. 
                "acc" or "accepted"會顯示 許可/已簽名 keys. 
                "rej" or "rejected"會顯示拒絕的 keys.  
                "all" 會顯示所有 keys.
    -L, --list-all      會顯示所有公鑰,相當月: "--list all"
    -a ACCEPT, --accept=ACCEPT
                        許可指定的公鑰(使用--include-all選項
                        可以指定除了掛起的key外的所有reject狀態的公鑰)

    -A, --accept-all    許可所有pending的公鑰
    -r REJECT, --reject=REJECT
                        拒絕指定的公鑰 (使用--include-all選項
                        可以指定除了掛起的key外的所有accept狀態的公鑰)

    -R, --reject-all    拒接所有pending的公鑰

    --include-all       配合 accepting/rejecting 選項使用,指定所有非pending狀態的公鑰

    -p PRINT, --print=PRINT
                        列印指定的公鑰
    -P, --print-all     Print all public keys
    -d DELETE, --delete=DELETE
                        根據公鑰的名稱刪除公鑰
    -D, --delete-all    刪除所有 keys
    -f FINGER, --finger=FINGER
                        列印指定key的指紋資訊
    -F, --finger-all    列印所有key的指紋資訊

  Key 常用選項:
    --gen-keys=GEN_KEYS
                        對生成的key配置設定一個salt使用的名稱。
    --gen-keys-dir=GEN_KEYS_DIR
                        設定生成key對的放置目錄,預設當前目錄。default=.

--keysize=KEYSIZE                       
                為生成key設定位數, 僅跟--gen-keys選項配合時有效,
                數值大小必須大於2048,否則會被提升至2048位,預設2048
                        default=2048

3.公鑰交換 1).檢視鑰匙 [[email protected] ~]# salt-key -L 在這裡插入圖片描述 2).新增鑰匙 [[email protected] ~]# salt-key -A 在這裡插入圖片描述 3).此時金鑰交換成功 在這裡插入圖片描述

4).檢視埠: [[email protected] ~]# netstat -antlp 在這裡插入圖片描述 在這裡插入圖片描述 5).檢視公鑰存放 [[email protected] salt]# cd pki/master/ [[email protected] master]# md5sum master.pub 在這裡插入圖片描述 [[email protected] salt]# cd pki/minion/ [[email protected] minion]# md5sum minion_master.pub 在這裡插入圖片描述 在這裡插入圖片描述 在這裡插入圖片描述

6).檢視埠執行情況 在這裡插入圖片描述

檢視python埠程序 [[email protected] master]# yum install python-setproctitle.x86_64 -y [[email protected] master]# /etc/init.d/salt-master restart [[email protected] master]# ps ax 在這裡插入圖片描述

4.測試salt服務 [[email protected] master]# salt ‘’ test.ping 在這裡插入圖片描述 [[email protected] master]# salt '’ cmd.run df 在這裡插入圖片描述

5.部署自動安裝httpd,php

Saltstack的YAML語法三大規則
YAML語法 規則一:縮排
YAML使用一個固定的縮排風格表示資料層結構關係,Saltstack需要每個縮排級別由兩個空格組成。一定不能使用tab鍵
規則二:冒號
YAML: mykey: my_value 每個冒號後面一定要有一個空格(以冒號結尾不需要空格,表示檔案路徑的模版可以不需要空格)
規則三:短橫線
想要表示列表項,使用一個短橫槓加一個空格。多個項使用同樣的縮排級別作為同一個列表的一部分。
• YAML的結構通過空格來展示

• 專案使用"-"來表示

• 鍵值對使用":"來表示

• Master和Minion的配置檔案均採用YAML語法

• YAML使用一個固定的縮排風格表示資料層級結構關

• 一般每個縮排級別由兩個空格組成

• 注意不要使用tab

• 縮排是初學者容易出錯的地方之一

• YAML的鍵值對採用冒號分隔

• YAML鍵值對對應python的字典

• YAML表示形式

    name: test

    或

    name:

      test

• Python字典

    {'name': 'test'}

• 字典可以巢狀

    hosts:

        name: test

• 字典表示形式為

    {

        'hosts': {

       'name': 'test'

       }

    }


• 列表項使用一個短橫槓加一個空格

    -  test1

    -  test2

• 列表可以作為一個鍵值對的value

    pkg-http:

      - httpd

      - php

• Python語法

    {'pkg-http': ['httpd', 'php']}

sls檔案存放根路徑在master配置檔案中定義,預設為/srv/salt,該目錄在作業系統上不存在,需要手動建立。

在salt中可以通過salt://代替根路徑.

1).開啟檔案系統伺服器: [[email protected] salt]# vim /etc/salt/master 在這裡插入圖片描述 2).編輯指令碼並推送 檔案必須以sls結尾: [[email protected] ~]# mkdir /srv/salt [[email protected] ~]# cd /srv/salt/ [[email protected] salt]# /etc/init.d/salt-master restart [[email protected] salt]# mkdir httpd #在此目錄裡配置http與php [[email protected] salt]# cd httpd/ [[email protected] httpd]# vim apache.sls

apache-install:
  pkg.installed:        #呼叫pkg模組裡面的installed方法
    - pkgs:
      - httpd
      - php

測試、執行推送 [[email protected] httpd]# salt server7 state.sls httpd.install #呼叫httpd下的install.sls 在這裡插入圖片描述

server7中檢視是否安裝成功: 在這裡插入圖片描述

6.安裝,啟動,配置httpd服務 1)[[email protected] ~]# cd /srv/salt/httpd [[email protected] httpd]# mkdir files [[email protected] httpd]# cd files/ #將server7的http.conf傳過來,這裡存放我們http的配置檔案,在部署的指令碼中我們會用到原始檔取自這裡,而對此檔案直接修改,相當於對server2上的服務配置檔案修改 在這裡插入圖片描述 [[email protected] httpd]# vim install.sls 在這裡插入圖片描述 [[email protected] httpd]# salt server7 state.sls httpd.install 在這裡插入圖片描述 sevice7檢視httpd埠 在這裡插入圖片描述 修改http埠8080 [[email protected] files]# vim httpd.conf 在這裡插入圖片描述 [[email protected] httpd]# vim install.sls

apache-install:    
  pkg.installed:        //安裝模組
    - pkgs:              
      - httpd
      - php
  file.managed:                  //檔案模組
    - name: /etc/httpd/conf/httpd.conf    //server7配置檔案地址
    - source: salt://httpd/files/httpd.conf     //原始檔地址
    - mode: 644           //許可權
    - user: root            //使用者
apache-service:
  service.running:            //服務啟動模組
    - name: httpd           //服務名稱
    - enable: True          //開機自啟
    - reload: True          //修改配置檔案後重新整理
    - watch:                 //監控檔案,就是上面的檔案模組中目的檔案
      - file: apache-install

推送到server7 [[email protected] httpd]# salt server7 state.sls httpd.install

server7:
----------
          ID: apache-install
    Function: pkg.installed
      Result: True
     Comment: All specified packages are already installed
     Started: 18:57:07.251260
    Duration: 319.787 ms
     Changes:   
----------
          ID: apache-install
    Function: file.managed
        Name: /etc/httpd/conf/httpd.conf
      Result: True
     Comment: File /etc/httpd/conf/httpd.conf is in the correct state
     Started: 18:57:07.572441
    Duration: 29.819 ms
     Changes:   
----------
          ID: apache-service
    Function: service.running
        Name: httpd
      Result: True
     Comment: Service httpd is already enabled, and is running
     Started: 18:57:07.602853
    Duration: 87.557 ms
     Changes:   
              ----------
              httpd:
                  True

Summary for server7
------------
Succeeded: 3 (changed=1)
Failed:    0
------------
Total states run:     3
Total run time: 437.163 ms

server7中檢視埠: 在這裡插入圖片描述 推送完成。