slatstack部署nginx一鍵推送
一、SaltStack基本介紹:
(一)SaltStack作用於僕從和主拓撲。SaltStack與特定的命令結合使用可以在一個或多個下屬執行。實現這一點,此時Salt Master可以發出命令,如salt '*' cmd.run 'ls -l /'。
除了執行遠端命令,SaltStack允許管理員使用“grain”。 grain可以在SaltStack僕從執行遠端查詢,因此收集僕從的狀態資訊並允許管理員在一箇中央位置儲存資訊。SaltStack也可以幫助管理員 定義目標系統上的期望狀態。這些狀態在應用時會用到.sls檔案,其中包含了如何在系統上獲得所需的狀態非常具體的要求。
由於它提供了在管理遠端系統的靈活性,SaltStack-based產品迅速獲得利益。該功能可以對比由狀態管理系統提供的功能,如Puppet和Ansible。SaltStack很大程度上得益於快速的採用率,它包括一個在管理系統上執行遠端命令的有效方式。
(二).Salt的核心功能
1.使命令傳送到遠端系統是並行的而不是序列的
2.使用安全加密的協議
3.使用最小最快的網路載荷
4.提供簡單的程式設計介面
Salt同樣引入了更加細緻化的領域控制系統來遠端執行,使得系統成為目標不止可以通過主機名,還可以通過系統屬性。
(三).salt使用Python客戶端介面
為了允許簡單的擴充套件,Salt執行程式可以寫為純Python模組。資料從Salt執行過程中收集到可以傳送回master服務端,或者傳送到任何任意程式。Salt可以從一個簡單的Python API呼叫,或者從命令列被呼叫,所以Salt可以用來執行一次性命令,也可以作為一個更大的應用程式的一個組成部分。
配置環境(rhel6.5虛擬機器)
172.25.45.1 server1 master
172.25.45.2 server2 minion
172.25.45.3 server3 minion
二.安裝salt
1.配置yum源
將要用包所在的檔案目錄(此處是rhel6)放到物理機apache預設釋出目錄下(/var/www/html)
在server1和server2中:
vim /etc/yum.repos.d/rhel-source.repo
yum clean all
yum repolist
2.安裝服務
在兩臺機器/etc/hosts加入本地解析
在server1上:
yum install salt-master -y
etc/init.d/salt-master start
在server2上:
yum install salt-minion -y
編輯server2的minion配置檔案,指定master
vim /etc/salt/minion
/etc/init.d/salt-minion start
在server1中:
salt-key -L ###檢視到已經簽名的客戶端
salt-key -A ##新增所有
salt server2 test.ping ##檢測網路是否通
salt server2 cmd.run hostname ##顯示server2主機名稱
salt server2 cmd.run 'df -h' ##檢視磁碟空間使用情況
在minion(server2)端的 /etc/salt/pki/minion 目錄下面會多出一個minion_master.pub 檔案
與master(server1)端的 master.pub一致
yum install -y lsof ##列出當前系統開啟檔案的工具
lsof -i: 4505
在server3上做和server2一樣的配置,然後在在server1中:salt-key -L 檢視到已經簽名的客戶端 salt-key -A ##新增所有
lsof -i: 4505 ##檢視server3是否連線上
在server1上:
netstat -antlp
4505埠:用來連結slave,釋出訂閱
4506埠:請求響應,模式為:zmq(訊息佇列)
####也可以安裝tree(yum install -y tree)來檢視master和minion連線情況
三、配置自動化部署
修改master端的配置檔案
vim /etc/salt/master
file_roots:
base:
- /srv/salt # 這個目錄沒有,自己建立
(一)一鍵部署httpd:自動重啟httpd服務,更改httpd的預設埠
1.mkdir /srv/salt
/etc/init.d/salt-master restart
2.配置自動化安裝httpd的指令碼
在server1上:
cd /srv/salt/
mkdir apache
cd apache
vim install.sls
mkdir files
cd files
salt server2 state.sls apache.install
##出現後兩個任務執行失敗的結果 但此時server2上已經安裝好apache
在server2上:
scp /etc/httpd/conf/httpd.conf server1:/srv/salt/apache/files
執行,在minion端自動安裝了httpd服務,將httpd的配置檔案放到master的base/httpd/files下
salt server2 state.sls apache.install
測試:自動重啟httpd服務,更改httpd的預設埠
在server1中:vim/srv/salt/apache/files/httpd.conf # 編輯配置檔案,修改httpd服務的埠為8080
salt server2 state.sls apache.install 重新執行此指令碼發現埠改變
在server2中:netstat antlp ##發現最新的埠號已經從master端推送到minion端
做完本次實驗將埠號還原到80 並執行指令碼推送到server2
(二)salt原始碼編譯安裝nginx
yum install python-setproctitle.x86_64 -y ##由於salt軟體使用python寫的 所以原始碼編譯需要
1.在master端:
mkdir /srv/salt/nginx/files -p
cd /srv/salt/nginx/files # 將nginx的原始碼包放進去
vim install.sls
nginx-install:
pkg.installed:
- pkgs:
- gcc
- pcre-devel
- openssl-devel # 安裝原始碼編譯的依賴項
file.managed:
- name: /opt/nginx-1.10.1.tar.gz
- source: salt://nginx/files/nginx-1.10.1.tar.gz # 原始碼包存放的位置
cmd.run: ......
- creates: /usr/local/nginx # 檢驗條件,當存在這個目錄時,就不再編譯安裝
2.執行指令碼
salt server3 state.sls nginx.install
3.編輯執行指令碼
執行:salt server3 state.sls nginx.service
4.在server3中檢視是否已經安裝nginx
netstat -antlp ##看出nginx80埠已開啟
(三) nginx的工作程序
在server3上:
cd /usr/local/nginx/conf/
scp nginx.conf server1:/srv/salt/nginx/files
nginx是自己編輯的指令碼
在server1上:
vim /srv/salt/nginx/service.sls
salt server3 state.sls nginx.service
在server3上:ps ax
在server1改變程序數再次推送
vim /srv/salt/nginx/files/nginx/conf
在server3上:ps ax
(四)實現建立ngxin使用者並且自動啟動載入
1.在master端,base目錄下建立users/編輯建立使用者和使用者組
vim files/nginx.conf
mkdir /srv/salt/users
vim users/nginx.sls
vim /srv/salt/nginx/service.sls
在server3中檢視:
###############一鍵推送##########
在上面配置好前提下,可以設定多臺機器一鍵推送,在base目錄下建立編輯top.sls,即可實現
salt '*' state.highstate