shell 指令碼實 集群環境配置檢測

2021-06-25 11:20:04 字數 2875 閱讀 8141

1). 背景:

集群部署的時候, 需要一致的配置和環境設定. 對於虛擬機器集群, 可以借助映象拷貝, 複製和還原集群機器. 對與物理機集群而言, 則不一樣, 如果機器一多, 多人去操作和配置, 對於成熟精幹的團隊還好, 對於不熟悉環境的小團隊, 由於水平的參差不齊, 往往會導致不一致的環境. 因此無論如何, 寫指令碼進行自動化的配置和環境校驗總是最佳實踐.

2). 假設應用場景:

*) 系統環境:

安裝cdh5, 集群規模為16臺機器, 每台機器16cpu, 記憶體16g, 2塊sata盤共500g, 作業系統為centos 6.4.

集群機器, ip範圍為192.168.1.101~192.168.1.116.

*) 基本要求

安裝cdh5時, 需要滿足以下基本要求

#) 需要配置每台機器的/etc/hosts檔案, 使得每台機器擁有集群所有機器的網域名稱

#) 需要關閉防火牆, 並禁止開啟啟動

#) 需要配置本地yum源

#) 磁碟分割槽盡量滿足/mnt/disk的形式

#) 機器時間基本同步

3). 具體實施

*) 配置集群的ssh無登入登入

選擇一台中控機(跳板機), 或者集群的某台機器, 作為自動化指令碼的發起端, 作為系統管理員, 採用root使用者.

#) 本地建立rsa金鑰, 產生rsa公鑰/私鑰對

mkdir -p ~/.ssh

cd ~/.ssh

ssh-keygen -t rsa -p ''

預設生成id_rsa(私鑰), id_rsa.pub(公鑰)檔案

#) 編輯指令碼

ssh-copy-id -i id_rsa root@

#! /bin/bash

username="root"

server_ips=(

"192.168.1.101" "192.168.1.102" "192.168.1.103" "192.168.1.104" "192.168.1.105"

"192.168.1.106" "192.168.1.107" "192.168.1.108" "192.168.1.109" "192.168.1.110"

"192.168.1.111" "192.168.1.112" "192.168.1.113" "192.168.1.114" "192.168.1.115"

"192.168.1.116"

)for (( i = 0; i < $; i++ )); do

ssh-copy-id -i ~/.ssh/id_rsa $username@$

done

執行, 當然這步還是痛苦的, 需要手動輸入16次密碼(16臺機器).

rsaauthentication yes

pubkeyauthentication yes

authorizedkeysfile .ssh/authorized_keys

gssapiauthentication no

usedns no

前三項, 用於開啟rsa服務, 後兩項用於解決初始連線ssh響應慢的問題

#) 重啟ssh服務

service sshd restart

*) 編寫自動化指令碼

#! /bin/bash

username="root"

server_ips=(

"192.168.1.101" "192.168.1.102" "192.168.1.103" "192.168.1.104" "192.168.1.105"

"192.168.1.106" "192.168.1.107" "192.168.1.108" "192.168.1.109" "192.168.1.110"

"192.168.1.111" "192.168.1.112" "192.168.1.113" "192.168.1.114" "192.168.1.115"

"192.168.1.116"

)# description:

#   在各個節點上, 執行命令, 並把執行結果彙總到乙個檔案中, 便於對比

# params:

#   $1 => command, 要執行的命令

#   $2 => filename, 要儲存輸出結果的檔案, 用於結果對比

execute_all_servers() ; i++ )); do

echo "server_ip: $, execute command: '$ssh_command'" >> $result_file

ssh $username@$ "$ssh_command" >> $result_file

echo "******************************===" >> $result_file

done

}

#) 檢測/etc/hosts檔案

execute_all_servers "cat /etc/hosts" "check_hosts_result.log"

#) 磁碟分割槽和掛載檢測

execute_all_servers "df -h ; fdisk -l" "check_fdisk_result.log"

#) 防火牆關閉檢測

execute_all_servers "service iptables status" "check_iptable_result.log"

#) 防火牆關閉命令

execute_all_servers "service iptables stop ; chkconfig --levels 235 iptables off" "stop_iptables_result.log"

其他需要加的環境檢測和環境配置, 皆可採用類似的方式去實現, 這並非完美, 只是提供了一種解決思路

shell指令碼啟動storm 集群

最近因為學習需要,搭建了storm集群,裝了比較舊的版本storm 0.8.1,也安裝了zmq,中間安裝過程之曲折不屬本文範圍,以後再整理。本文先把storm集群啟動的指令碼放出,其中包含了啟動zookeeper。其他集群,spark,hadoop啟動 停止指令碼可參考本指令碼。不完善之處依照具體業...

hadoop集群關機shell指令碼

該shell指令碼僅學習使用,在網路中執行有可能有洩露密碼的風險。usr bin env bash ssh t hadoop201 echo 123456 sudo s shutdown h now ssh t hadoop202 echo 123456 sudo s shutdown h now ...

shell指令碼啟動kafka集群

前提 kafka集群之間已配置ssh免密登入,kafka集群配置路徑一致 要實現kafka群起指令碼 思路 通過ssh登入後,迴圈啟動每台機器的kafka和zookeeper kafka和zookeeper單機啟動指令碼 remote server.sh bin bash zookeeper 程序號...