我寫了一個(gè)腳本,可在“任意”服務(wù)器上執(zhí)行命令!
冰河之前維護(hù)著上千臺(tái)服務(wù)器組成的服務(wù)器集群,如果每次需要在服務(wù)器上執(zhí)行命令的時(shí)候,都要手動(dòng)登錄每臺(tái)服務(wù)器進(jìn)行操作的話,那也太麻煩了。你想想,如果在上千臺(tái)服務(wù)器的集群中,每臺(tái)服務(wù)器中只需要簡(jiǎn)單的執(zhí)行一個(gè)相同的命令,那別說(shuō)執(zhí)行命令了,就是讓你依次手動(dòng)登錄上千臺(tái)服務(wù)器,那也夠你受的了。估計(jì)依次登錄上千臺(tái)服務(wù)器,給你三天時(shí)間你可能都登不完,那怎么辦呢?有沒(méi)有什么好的方法來(lái)解決這個(gè)問(wèn)題呢?
別急,我們今天就是來(lái)解決這個(gè)問(wèn)題的。
說(shuō)實(shí)話,我在維護(hù)上千臺(tái)服務(wù)器集群的時(shí)候,并沒(méi)有去依次手動(dòng)登錄每臺(tái)服務(wù)器,為啥?沒(méi)錯(cuò),就是因?yàn)槲覒邪?!我懶的去登錄,并且依次登錄那么多臺(tái)服務(wù)器,整個(gè)人都會(huì)崩潰的。
于是,我就想辦法能不能寫個(gè)腳本,讓這個(gè)腳本接收我要執(zhí)行的命令,然后將命令依次分發(fā)到集群上所有的服務(wù)器中執(zhí)行,這不就解決問(wèn)題了嗎?說(shuō)干就干。
不過(guò),這里,有個(gè)需要注意的地方:那就是:需要提前配置好集群中每臺(tái)服務(wù)器的主機(jī)名和IP地址的對(duì)應(yīng)關(guān)系,能夠互相使用主機(jī)名進(jìn)行通信,并配置了SSH免密碼登錄。這一點(diǎn)不行擔(dān)心,只要讓運(yùn)維在規(guī)劃和分配服務(wù)器的時(shí)候,規(guī)劃好就行了,無(wú)需后面再依次登錄服務(wù)器處理。
為了方便小伙伴們理解,這里我們就假設(shè)集群中存在1024臺(tái)服務(wù)器,每臺(tái)服務(wù)器的主機(jī)名為binghe1~binghe1024。每臺(tái)服務(wù)器可以通過(guò)主機(jī)名進(jìn)行通信,接下來(lái),我寫了一個(gè)名稱為distribute_command.sh的腳本,內(nèi)容如下所示。
#!/bin/bash pcount=$# if (( pcount<1 )) ; then echo no args; exit; fi #先在本機(jī)上執(zhí)行命令 echo ------------binghe$host----------------- $@ #循環(huán)在集群中的遠(yuǎn)程節(jié)點(diǎn)上執(zhí)行命令 for (( host=1 ; host<=1024; host=host+1)) ; do echo ------------binghe$host-----------------
ssh binghe$host $@ done;
這個(gè)腳本的含義為:接收傳遞進(jìn)來(lái)的命令,將命令分發(fā)到主機(jī)名為binghe1~binghe1024的服務(wù)器上執(zhí)行,也就是說(shuō),使用這個(gè)腳本我們能夠做到:同時(shí)在集群的服務(wù)器上執(zhí)行相同的命令。
接下來(lái),為distribute_command.sh腳本賦予可執(zhí)行權(quán)限,如下所示。
chmod a+x ./distribute_command.sh
使用格式如下:
./distribute_command.sh 在服務(wù)器上執(zhí)行的完整命令
使用示例
-
在集群中的每臺(tái)服務(wù)器的/home目錄下創(chuàng)建hello.txt文,內(nèi)容為hello world
./distribute_command.sh echo "hello world" >> /home/hello.txt
-
查看集群中每臺(tái)服務(wù)器上hello.txt文件的內(nèi)容
./distribute_command.sh cat /home/hello.txt
-
刪除集群中每臺(tái)服務(wù)器上的hello.txt文件
./distribute_command.sh rm -rf /home/hello.txt
是不是很簡(jiǎn)單啊?所以說(shuō),有時(shí)候,不要盲目的去執(zhí)行。很多時(shí)候,在做事情之前,要先思考下有沒(méi)有更好的解決方案,有沒(méi)有效率更加高效的解決方案。就比如這篇文章上說(shuō)的,在上千臺(tái)服務(wù)器上執(zhí)行一條命令,如果依次手動(dòng)登錄每臺(tái)服務(wù)器執(zhí)行命令,估計(jì)花三天時(shí)間都搞不定;如果我們寫了一個(gè)腳本的話,估計(jì)也就1分鐘之內(nèi)就搞定了。所以,效率和質(zhì)量才是做事情需要追求的目標(biāo)。
免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺(tái)立場(chǎng),如有問(wèn)題,請(qǐng)聯(lián)系我們,謝謝!