筆者是初次接觸 自動化運維 這一技術領域,也是初次接觸SALT STACK這一自動化運維工具, 因此這裏的 簡單理解 SALTSTACK 之意爲 筆者的簡單理解,能夠看作是做者的學習筆記,文中較多記述筆者在配置安裝過程當中遇到的問題,可能會有紕漏以及錯誤的地方,具體的新手指南,最好是參見這裏.css
SALTSTACK是一款自動化運維軟件,使用python編寫,使用ZEROMQ用做通訊協議,主要功能包括命令批量執行,服務器環境批量配置,配置文件託管,服務器狀態監控,配合強大的 Grains&Pillar 和自定義SLS配置文件,能夠實現複雜功能,筆者會從最簡單的場景開始着手學習而且記錄配置過程, 簡單使用事後,筆者的觀點是,即便只是使用 SALTSTACK 管理單臺vps,也比SSH要好用一些,稍後會說到緣由。同類產品有 Puppet 和 Chef,由於沒有使用過因此沒法進行比較.html
這裏有詳細的安裝指南,由於該產品的更新迭代速度很快,因此不建議你們去看他人的中文教程,今天筆者安裝的是pypi上的最新穩定版本,和網上的大部分中文教程的安裝方法有所出入,因此筆者認爲最好的方法就是直接參考官方的安裝指南。python
筆者使用ubuntu桌面版系統,安裝指南建議的安裝方式是添加SALTSTACK的軟件源,使用apt進行安裝,能夠自動處理依賴,可是筆者沒法連接到該源,因此採用了最直接的python setup.py install的安裝方法. 根據安裝指南,須要安裝 salt-master, salt-minion, salt-syndic 與ZeroMQ.nginx
在Pypi上下載 tarball, 解壓以後建立虛擬環境而且執行安裝腳本,筆者使用的是python 2.7.9, 直接執行一下命令安裝相關依賴和saltstack自己.git
python setup.py install pip install -r _requirements.txt pip install -r pip install -r zeromq-requirements.txt
在安裝的過程當中可能會遇到一個swig的bug:github
AttributeError: 'module' object has no attribute 'PKCS5_SALT_LEN'
因爲Pyzmq引用了 M2crypto這個包,而這個包須要使用swig,我安裝的swig版本是3.0.5,當你的swig是3.0.5的時候便會報上面的錯誤,詳細的Issue參見這裏, 不過這個帖子也是從新編譯了3.0.4版本的swig從而跳過這個錯誤的。web
從新編譯swig 3.0.4版本以後,安裝完畢.apache
在安裝指南中,默認的配置文件位置是ubuntu
/etc/salt/master /etc/salt/minion
可是在我安裝完畢 saltstack以後並無這2個配置文件,可是使用以下命令服務器
sudo salt-master -d sudo salt-minion -l debug -d
服務也是能夠成功開啓,因此個人安裝是沒有問題的,可是文檔中並無說明在經過PIP手動編譯安裝的狀況下須要手動複製配置文件,
跳過這個坑的方法就是執行以下命令:
sudo cp ./conf/* /etc/salt/ #若是沒有相關目錄就手動創建目錄
而後編輯
sudo vi /etc/salt/minion # master: salt
把第16行 master: salt 前的註釋去掉,而後把salt換成master節點的IP地址就能夠了,因爲筆者使用的是單機,因此把salt換成 0.0.0.0便可.
在咱們的配置文件修改完畢,服務也正常啓動以後, 還須要給minion服務器作受權,關於權限一節會在後面深刻研究,只有通過受權的minion才能夠接受master節點的控制,最基本的受權操做也是很是簡單的,畢竟SALTSTACK是以簡單使用而著稱的.
sudo salt-key -L # 打印出全部受權或未受權的minion節點 sudo salt-key -A # 受權全部節點 sudo salt-key -a name # 受權name節點
受權完成以後,咱們就能夠經過master節點進行進行對minion節點的控制了.
和最常用的ssh作對比,那就是執行命令的功能了,最簡單的一條命令,參見以下代碼
salt -e 'youngershen.com' cmd.run 'ifconfig' # 或者 salt '*' cmd.run 'ifconfig' # 或者 salt 'webserver*' cmd.run 'service apache restart' salt 'webserver*' cmd.run 'sudo nginx -s reload' # 對於這類命令,多臺服務器切換起來真的是很是方便
關於 服務器通配符和SLS配置文件的編寫,這裏先不說,不過我已經以爲SALTSTACK很是了不得了,配置文件管理很是整潔(Yaml),一條命令批量更新,對各類服務的機器篩選有強大的正則支持.即便是對單節點VPS的命令管理來講,不用打密碼的salt確實比ssh方便的多,並且你可能有不少VPS要管理,這樣就不須要來回切換了,並且有通配符支持,因此文章開頭的時候筆者就說即便是管理單節點
VPS,相對於SSH來講SALT仍是頗有優點的,不足之處就是配置方面,若是出門在外的話,仍是須要SSH密碼直接登錄的.
而後是稍微複雜一點的例子.
更改 master 配置文件
file_roots: base: - /srv/salt
注意格式是yaml,當心縮進哦!
而後執行:
sudo pkill salt-master sudo salt-master -d
增長新的SLS配置文件
# /srv/salt/ 目錄下 top.sls base: '*': - testconfig #/srv/salt/ 目錄下 testconfig.sls myconfig: file.managed: - name: /etc/config.cnf - source: salt://config.cnf xchat: pkg.installed: - watch: -file :myconfig
因爲配置文件的信息量略大,因此只按照個人理解來簡單說明,用以加強本身的理解之用, SLS文件所有采用yaml格式,語法是必須當心的,master中的 file_roots 的值,實際上就是salt文件服務器的路徑值,在minion像master請求文件的時候,讀取的就是這個路徑的下的文件,base下的 * ,是說這個testconfig的配置能夠用於任何minion節點,通配符就是體如今這裏的,能夠任意配置,而testconfig.sls文件中,定義了兩個符號,一個是myconfig,一個是xchat,myconfig是一個隨意的配置文件,xchat是一個聊天程序,意思是說當xchat被installed函數檢測爲安裝完成狀態的時候,在每次執行命令時就watch myconfig對應的文件,也就是能夠達到配置文件更新的效果,見以下命令
sudo salt '*' state.highstate # 執行完畢以後會發現 /etc目錄下多了一個文件名爲 config.cnf的文件,並且更新該文件以後,再 # 執行命令,該文件也會更新
而關於衆多的function和配置的編寫規則,只能在之後討論了,不過我已經大體瞭解瞭如何編寫SLS,配合grains,使salt即能管理配置文件,又能夠進行服務器監控,grains的值也能夠隨意編寫函數來處理監控信息.
(本文完)
中文用戶組知識庫: http://www.saltstack.cn/projects/cssug-kb/wiki/Dive-into-saltstack