但凡服務器上了必定規模(百臺以上),普通的ssh登陸管理的模式就愈來愈舉步維艱。試想Linux發佈了一個高危漏洞的補丁,你要把手下成百上千臺機器都更新該補丁,若是沒有一種自動化方式,那麼至少要耗上大半天時間。雖然你編寫了大量的shell(或python,perl)腳原本實現各類自動化場景,但最後會發現你又陷入了腳本的汪洋大海之中,管理和維護這麼多的腳本的成本也不小。你須要一款基礎設施自動化工具,但願它能具備如下功能。node
1批量執行python
這個很少說了吧,試想要爲每一臺機器打補丁的情形吧。linux
2任務編排git
如今稍微複雜點的應用都須要N臺服務器來部署,而部署的過程當中確定有個前後的依賴順序。那麼由此看來任務編排確定必不可少。github
3對業務場景的抽象,也就是DSL化shell
之因此拋棄本身用shell(或其它語言的)腳原本實現各類自動化的緣由之一就是這些腳本很難懂,除了你之外其餘人幾乎沒法修改。而做爲一個成熟的工具,天然對我們複雜的應用場景要作抽象,好比對服務器節點、角色的抽象,對服務器上的各類安裝、配置操做的抽象,對不一樣環境的抽象等。經過抽象出來的DSL,你們很容易達成一致,協同工做。bootstrap
4安全機制ubuntu
既然是基礎設施自動化工具,免不了包含各類敏感信息,如何去敏也是挺重要的。並且既然能控制整個服務器集羣,控制方式也要絕對安全。windows
除了這幾個基本功能之外,固然咱們還但願有更多功能,好比腳本重用、審計功能、完善的文檔等。這裏就很少說了。安全
相似的工具確定已經有了,如今市場上比較流行的開源軟件有Puppet、Chef、Ansible、SaltStack等。關於它們的優劣不是這篇文章的重點。
而談起集羣管理,你們彷佛默認的都是對Linux系統集羣的管理,對於Windows集羣則不多涉及。我想這大抵有兩方面的緣由,一方面是大部分公司中機器集羣類型大都是Linux系統,另外一方面是Windows機器在批量化管理方面自然有缺陷,好比缺少各類方便的腳本命令、很難對機器配置徹底腳本化等。但對Windows集羣的管理問題沒法迴避,由於在企業中Windows集羣的確存在。微軟也在致力改善這些問題,好比Window PowerShell就是爲了解決校本化的問題。
而筆者的上一個項目就涉及對數百臺Windows和Linux集羣的管理。Windows集羣的主要操做系統是Windows Server 2008,Linux集羣的主要操做系統是Ubuntu 12.04。要實現對這樣的集羣的自動化配置和管理,筆者積累了一些經驗,特地分享給你們。
自動化工具的選型
凡是牽扯到工具選型的時候,若是你發現你處於一個很是糾結的地位,那多是由於競品工具沒有一個能突出重圍,致使你在它們各自的優缺點之間難以取捨。我也理解,工具選型要考慮的因素太多。這個項目的選型其實沒通過太大波折,很快就決定使用Chef。緣由我能夠簡單說一下,Puppet的API太不友好,ansible和salt對windows的支持程度未知,而根據我之前的經驗,Chef對windows的支持仍是比較成熟的。因此咱們就快刀斬亂麻選擇了Chef。
搭建Chef生態環境
既然決定了Chef,那麼接下來不少問題都不得不考慮。
使用自建的Chef Server
緣由很簡單,由於客戶不會把本身的node暴露在公共的chef server之上。因此咱們在企業內網搭建了一個Chef server,放置在一臺ubuntu機器上。
workstation選擇windows機器(windows 7)
考慮到咱們要同時管理Linux集羣和Windows集羣,因此workstation的選擇也很重要。在bootstrap一個node的時候,workstation和linux node的通信方式是ssh,而和windows node的通信方式是經過WinRM。若是使用Linux經過WinRM和Windows系統通信,理論上是可行的,咱們能夠藉助一些第三方工具實現,但過程確定比較曲折。而若是使用Windows機器和Linux及Windows系統通信,則沒有太大問題。
搭建本身的軟件倉庫
對於Linux系統而言有不少成熟的包管理工具,想要安裝什麼軟件基本上一條命令便可。而對於Windows系統而言,雖然有chocolatey之類的工具,但在分發一些企業內部的軟件方面仍捉襟見肘。因此咱們選擇搭建本身的軟件倉庫。剛開始爲了簡便起見就搭建了一個ftp服務器做爲軟件倉庫。後期會考慮遷移到Sonatype Nexus之類能提供更多功能的包管理服務器上去。
建立Chef repo並歸入源代碼管理之類的事情因爲沒有太多特殊性,因此這裏就不展開了。
應用Chef管理windows集羣
使用Chef來管理windows集羣確定沒有像管理Linux集羣那麼容易,如下是幾個須要注意的點。
配置Windows node開啓WinRM服務
WinRM服務是微軟提供的用於進行遠程通信的服務(Windows 7及之後的系統內置支持),你能夠簡單理解爲Windows版的SSH。在Windows server 2008 R2操做系統中,WinRM服務默認是關閉的,咱們須要啓用它。首先須要修改兩個組策略。在組策略的計算機配置->策略->Windows組件->Windows遠程管理(WinRM)->WinRM服務中,選擇「容許自動配置監-聽-器」,把該策略選爲啓用,並修改IPv4和IPv6過濾器爲*。而後在控制面板中選擇windows防火牆,單擊例外選項卡,選擇Windows 遠程管理複選框。若是看不到該複選框,請單擊添加程序以添加 Windows 遠程管理。
這兩項的配置也能夠經過PowerShell腳原本實現。
而後就能夠啓用和配置WinRM了。只須要在PowerShell終端輸入winrm quickconfig -q便可。另外Chef還推薦對WinRM進行一些進階配置。
使用windows cookbook
windows cookbook是Chef專爲windows平臺寫的cookbook。裏面包含了很是多的針對windows平臺特性的功能,是操縱windows平臺不可或缺的利器。好比解壓縮文件、執行batch(PowerShell)命令、安裝認證、安裝卸載windows包、配置執行計劃任務……
使用方式也很簡單,安裝能夠經過chef的supermarket執行。若是在其它cookbook須要使用該cookbook的模塊,只需在其它cookbook的metadata.rb中加入depends ‘windows’便可。
升級Windows node上的PowerShell版本
PowerShell之於Windows就至關於shell之於Linux。Windows Server 2008 R2上的PowerShell默認版本是3.0,最好可以升級到高級版本。而github.com/opscode-cookbooks/powershell中的cookbook則能夠方便的對Windows node的PowerShell進行升級和配置,以及安裝各類PowerShell module,執行PowerShell腳本等。
實現對軟件的靜默安裝
Linux上的每種軟件基本都有經過命令行靜默安裝的方式。而Windows下的軟件卻不盡然。若是軟件是以.msi方式打包的,那麼可使用Windows Installer來實現靜默安裝。若是是以.exe的方式來打包的,倒也不被驚慌,能夠仔細分析其是不是以inno、NSIS、installshield等方式打包的,而後根據各自方式的靜默方式實現自動化安裝。若是以上皆不適用,則能夠分析該軟件是否爲綠色軟件,嘗試把安裝後的整個文件夾打包放置於軟件倉庫之上,之後安裝只須要解壓縮便可。若是軟件既沒有規範的打包方式,也不是綠色軟件,那麼就比較麻煩了,須要分析安裝後建立了那些文件,以及執行了那些腳本,而後嘗試把這些操做命令行化(不過這樣的軟件很是少,沒必要過於擔憂)。
使用push jobs功能
一般咱們須要對節點進行批量化操做,而經過chef-client的方式功能有限。chef提供了push jobs這樣的擴展功能,容許咱們對節點進行爲所欲爲的批量操做。
熟練使用PowerShell腳本
以前我說過,PowerShell在Windows上的地位就如同Shell在Linux上的地位。Windows PowerShell提供了對COM組建和WMI組件的徹底訪問,並且能夠輕鬆調用.net framework框架中的功能,並且也包含強大的文檔。若是你想配置一個DHCP服務器,或者配置一個IIS網站服務,抑或修改註冊表,使用PowerShell能輕鬆讓你達到目標,完全擺脫圖形化界面。
整體來講,Chef對於Windows平臺的支持力度仍是至關完善的,若是你想實現對Windows集羣的自動化管理,那麼Chef不失爲一種可行的方案。至於其它幾種自動化工具,筆者有時間也會進行深刻調研,再出具報告。
免費領取兄弟連IT教育原創linux運維工程師視頻/細說linux教程,詳情諮詢官網客服:http://www.lampbrother.net/linux/
或者勾搭Q2430675018
歡迎加入linux交流羣 478068715