筆者之前維護着上千台服務器組成的服務器集群,如果每次需要在服務器上執行命令的時候,都要手動登錄每台服務器進行操作的話,那也太麻煩了。你想想,如果在上千台服務器的集群中,每台服務器中隻需要簡單的執行一個相同的命令,那别說執行命令了,就是讓你依次手動登錄上千台服務器,那也夠你受的了。估計依次登錄上千台服務器,給你三天時間你可能都登不完,那怎麼辦呢?有沒有什麼好的方法來解決這個問題呢?
别急,我們今天就是來解決這個問題的。
說實話,我在維護上千台服務器集群的時候,并沒有去依次手動登錄每台服務器,為啥?沒錯,就是因為我懶啊!我懶的去登錄,并且依次登錄那麼多台服務器,整個人都會崩潰的。
于是,我就想辦法能不能寫個腳本,讓這個腳本接收我要執行的命令,然後将命令依次分發到集群上所有的服務器中執行,這不就解決問題了嗎?說幹就幹。
為了方便小夥伴們理解,這裡我們就假設集群中存在1024台服務器,每台服務器的主機名為binghe1~binghe1024。每台服務器可以通過主機名進行通信,接下來,我寫了一個名稱為distribute_command.sh的腳本,内容如下所示。
#!/bin/bash
pcount=$#
if((pcount<1));then
echonoargs;
exit;
fi
#先在本機上執行命令
echo------------binghe$host-----------------
$@
#循環在集群中的遠程節點上執行命令
for((host=1;host<=1024;host=host 1));do
echo------------binghe$host-----------------
sshbinghe$host$@
done;
這個腳本的含義為:接收傳遞進來的命令,将命令分發到主機名為binghe1~binghe1024的服務器上執行,也就是說,使用這個腳本我們能夠做到:同時在集群的服務器上執行相同的命令。
私我“資料” 獲取!
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!