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/bashusername="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 yespubkeyauthentication yes
authorizedkeysfile .ssh/authorized_keys
gssapiauthentication no
usedns no
前三項, 用於開啟rsa服務, 後兩項用於解決初始連線ssh響應慢的問題
#) 重啟ssh服務
service sshd restart
*) 編寫自動化指令碼
#! /bin/bashusername="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 程序號...