1. 程式人生 > >遠端伺服器部署應用(一)--傳統部署方式還是自動化運維工具部署?

遠端伺服器部署應用(一)--傳統部署方式還是自動化運維工具部署?

接觸自動化運維工具也有半年了,就此做一個總結。如果有不妥之處,歡迎各位牛人批評指正。

到底該不該放棄傳統的伺服器指令碼部署或者手動部署方式,投入自動化運維工具的懷抱?

雖然現在使用自動化運維工具已經成為主流趨勢,但是對於一個之前都是採用傳統方式部署程式碼,又沒有相關專業運維人員的專案組而言,這確實是一個比較頭疼的問題。到底該不該轉身投入自動化運維工具的麾下?如果投靠,又該選擇哪個部落?如果投靠該部落,又該選用部落提供的哪項技能傍身?

首先,我們通常會選擇以下幾種傳統部署方式:

  • 純手工 scp 或者用指令碼
  • 純手工登入伺服器 git pull/svn update
  • 純手工 ftp 上傳
  • 開發提供壓縮包,rz 上傳,解壓

上述傳統部署方式缺點:

  1. 全程運維參與,佔用大量時間
    (而小公司而言,一般都是開發人員開發完之後直接上傳部署,別問我為什麼知道。。。)
  2. 上傳速度慢
  3. 人為失誤多,管理混亂

而且這種方式部署,一般只能是固定一個人來完成。如果換其他人,因為部署流程比較複雜,上手慢,而且綜合考慮,伺服器上的應用都是已經上線的產品,新人部署,不確定因素過多,主管一般都不太放心。所以我們就考慮能否有一個自動化的工具:

  • 簡化部署流程:節省時間,就算人員變動也不妨礙程式碼部署。
  • 學習成本低:太複雜的語法,學起來太耗時。
  • 部署模式:最好不是C/S模式管理,便於擴充管理的伺服器。
  • 遠端操作:暫時不考慮custom,預設batch吧.
  • 後期維護:修完bug後,希望最快的速度部署到各臺伺服器上。

話說現在市場上的主流自動化運維工具確實很多,puppet、chef、ansible、saltstack。這裡做了一個簡單的比較:
Tool contrasts

從表格我們看出puppet、chef是出道時間比較久的王牌,使用老牌Ruby語言編寫,可以看出配置管理方面應該支援比較全面。相對而言,ansible、saltstack就比較年輕了,但是這兩個新秀都是目前的寵兒,論壇、開發社群都比較活躍,也是比較有前景的。最重要的是,我看到了ansible的閃光點
紅圈圈有沒有看到!!no agent!!簡直大愛!!

Ansible呢是基於模組工作的,本身沒有批量部署的能力。真正具有批量部署的是ansible所執行的模組,ansible只是提供了一種框架。它的特性包括:

  1. no agents:不需要在被管控主機上安裝任何客戶端;
  2. no server:無伺服器端,使用時直接執行命令即可;
  3. modules in any languages:基於模組工作,可使用任意語言開發模組;
  4. SSH by default:基於SSH工作;
  5. 使用python編寫,維護更簡單,ruby語法過於複雜;
  6. 支援sudo:(這個真的很有必要,當你發現無論操作什麼都 要root許可權的時候,你會崩潰的,關於root許可權,各個公司為了安全著想,別想了,非相關人員,你是get不到的)
  7. 執行:並行執行任務。執行批量任務的時候可以寫成指令碼,而且不用分發到遠端就可以執行。
  8. 不佔master任何資源:沒有守護程序。

Ansible的特性完美解決了我們的問題,確實,針對中小型企業,如果只是管理幾十至幾百臺伺服器,並且不需要使用到太複雜的配置管理功能,這個足夠了。
具體的Ansible的介紹可以參考這裡:Ansible documentation 傳送門
今天就到這兒了,下節,我會用例項給大家比較一下傳統用指令碼部署和Ansible部署的優劣。