最近搭建了一個5節點的hadoop叢集,這個過程中,涉及到各個節點間做ssh等效性、時間同步、服務啟動和停止。我的做法是使用SCRT打開5個視窗遠端到各個節點,然後在各個視窗中輸入同樣的指令,啟動同樣的服務。剛開始還好,到了後面我需要在各個節點上來回的切換使用者,然後執行一些指令,然後再切換回root使用者做一些授權的操作,盡管使用sudo可以提升普通使用者的權限,但是我仍感到無比的麻煩,更重要的是目前是5個節點,如果叢集是50個節點甚至是500個節點時,我仍要用這種方法嗎?顯然是愚蠢的做法!我渴望對着一個黑視窗,噼裡啪啦一陣狂敲,所有的節點都嗷嗷叫,為了能夠裝Bigger,我決定學習一個自動化運維的工具。
糾結:saltstack or puppet
因為聽說google内部使用的是puppet,是以剛開始暈着頭把puppet搭建起來,嘗試學習使用它,無奈一段時間以後,發現自己真是屌絲一枚,無法真正領略puppet的驚豔,更準确的來說,是因為自己内心迫切的想體驗使用這樣的工具來實作自己的統帥N多節點的快感,是以,放棄使用puppet,改為更為輕量的saltstack,而且配置簡單,saltstack的核心功能是:配置管理和遠端執行。你可以在master節點上一條指令,然後所有的節點都嘚啵嘚啵的開始執行,更重要的是你可以在master的控制台看到各個節點的傳回結果。puppet 10 節點以上開始收費,而saltstack完全免費。學習的過程中,順便記錄下過程,友善自己也服務他人。
好,開始正題,首先看我的環境:
節點作業系統均為centos6.5,使用centos自帶網絡yum源+epel擴充源
hadoop0.updb.com 192.168.0.100 master
hadoop1.updb.com 192.168.0.101 minion
hadoop2.updb.com 192.168.0.102 minion
hadoop3.updb.com 192.168.0.103 minion
hadoop4.updb.com 192.168.0.104 minion
hadoop5.updb.com 192.168.0.105 minion
1、在master和minion上安裝軟體
master:
yum install salt-master -y
minion
yum install salt-minion -y
2、修改minion的配置檔案,讓minion能夠找到master,每個minion都要修改,以hadoop1為例
vi /etc/salt/minion ## minion配置檔案中隻修改兩行
#master: salt -->改為master: 192.168.0.100
#id: -->改為id: hadoop1
需要注意這裡的id是給minion起的别名,作為唯一辨別,各個minion不能重複
3、啟動各minion節點的服務
/etc/init.d/salt-minion start
4、啟動master節點服務,并通過認證minion keys實作master和minion之間的通信
/etc/init.d/salt-master start
使用salt-key -L 列出是以沒有認證,認證過,拒絕認證的證書
[root@hadoop0 ~]# salt-key -L
Accepted Keys:
Unaccepted Keys:
hadoop1
hadoop2
hadoop3
hadoop4
hadoop5
Rejected Keys:
使用salt-key -A來簽名所有狀态為Unaccepted的證書
[root@hadoop0 ~]# salt-key -A
The following keys are going to be accepted:
Unaccepted Keys:
hadoop1
hadoop2
hadoop3
hadoop4
hadoop5
Proceed? [n/Y] y
Key for minion hadoop1 accepted.
Key for minion hadoop2 accepted.
Key for minion hadoop3 accepted.
Key for minion hadoop4 accepted.
Key for minion hadoop5 accepted.
驗證,發現所有的minion證書已經被master簽名
[root@hadoop0 ~]# salt-key -L
Accepted Keys:
hadoop1
hadoop2
hadoop3
hadoop4
hadoop5
Unaccepted Keys:
Rejected Keys:
5、測試通信是否正常
[root@hadoop0 ~]# salt '*' test.ping
hadoop4:
True
hadoop3:
True
hadoop2:
True
hadoop5:
True
hadoop1:
True
傳回結果全為True,通信功能正常。
[root@hadoop0 ~]# salt '*' cmd.run "date"
hadoop1:
Sun Oct 26 16:16:09 CST 2014
hadoop3:
Sun Oct 26 08:16:08 GMT 2014
hadoop5:
Sun Oct 26 08:16:09 GMT 2014
hadoop4:
Sun Oct 26 08:16:09 GMT 2014
hadoop2:
Sun Oct 26 08:16:08 GMT 2014