火山日常啰嗦
開始考慮這個問題皆尔,其實是因為每次開啟集群的服務時都要到每個節(jié)點輸入一大堆指令呐舔,這樣做真的是很煩,而且總是些重復性的東西慷蠕,沒什么新意珊拼,也很耗時,更重要的是流炕,集群很小澎现,只有幾個節(jié)點的話,做這種操作還好每辟,但是一旦集群很大呢剑辫,有成千上萬個節(jié)點時,這樣子去操作根本就不現(xiàn)實渠欺,可能僅僅是開啟服務就要花幾天甚至幾個月了吧妹蔽,那還用做真正有意義的工作嗎?基于這種情況挠将,所以我們考慮編寫腳本文件來開啟集群服務胳岂,這樣就不需要我們一個一個節(jié)點地去敲命令了,節(jié)省了不少功夫捐名。
那編寫腳本旦万,只需要在一個節(jié)點上編寫就行了,那問題來了镶蹋,既然只在一個節(jié)點上編寫成艘,那么怎么在這個節(jié)點控制其他節(jié)點啊贺归?
這里就要用到ssh免密登錄服務了(這里是默認大家都了解并且配好了ssh免密登錄)淆两,在腳本里通過ssh登錄其他節(jié)點并且執(zhí)行命令來啟動服務。
這里需要注意以下幾點(親測):
1) 如果是本節(jié)點的服務婶熬,那么可以直接執(zhí)行命令也可以通過ssh免密登錄后再執(zhí)行命令剑勾;
2) 如果是其他節(jié)點的服務埃撵,那么就需要先通過ssh登錄該節(jié)點,然后執(zhí)行開啟服務的命令虽另,需特別注意暂刘,ssh免密登錄命令必須與開啟服務的命令在同一行,這樣執(zhí)行后會自動退出返回原節(jié)點捂刺,繼續(xù)執(zhí)行腳本中的下一條命令谣拣;如果ssh免密登錄命令與登錄后要執(zhí)行的命令不在同一行,那么結(jié)果就是登錄到目標節(jié)點而已族展,無法自動執(zhí)行下面的命令森缠,顯然這樣并不是我們的目標,所以謹記仪缸,ssh命令要與登錄后執(zhí)行的命令在同一行贵涵,即這兩個命令之間不能有換行符;
3) 因為bash執(zhí)行命令時恰画,需要到環(huán)境變量配置的目錄下去依次查找該命令是否存在独悴,所以ssh免密登錄后,需要使環(huán)境變量對該bash shell有效锣尉,有兩種做法:
3.1) 將環(huán)境變量添加到~/.bashrc中刻炒,因為對登錄用戶而言,每次開啟一個新的bash shell都會加載這個用戶的.bashrc文件自沧,所以將環(huán)境變量添加到這里坟奥,那么新的bash shell就可以識別到所使用的命令了;
3.2) 像上面我的腳本中寫的拇厢,直接使用source /etc/profile命令爱谁,使profile文件立即生效,即對ssh免密登錄的bash shell立即生效孝偎,這樣子bash shell才能通過環(huán)境變量去查找當前要執(zhí)行的命令是否存在访敌;
4) ssh免密登錄命令后的要執(zhí)行的命令是否要添加引號的問題,我試過了:
如果為它添加單引號或者雙引號衣盾,那么執(zhí)行結(jié)果都是正常且是正確的寺旺;但是我還是發(fā)現(xiàn)了它們之 間的一點不同之處:命令加單引號的,服務啟動起來比較慢势决,而改為加雙引號后阻塑,服務啟動起來就快了一點。