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]
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中檢視埠: 推送完成。