shell 指令碼實戰筆記(6)--叢集環境配置檢測

來源:互聯網
上載者:User

標籤:des   style   blog   檔案   os   art   

 

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{N}的形式
#) 機器時間基本同步

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 [email protected]<target_ip>

#! /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 < ${#server_ips[*]}; i++ )); do  ssh-copy-id -i ~/.ssh/id_rsa [email protected]${server_ips[i]}done

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

#) 開啟RSA驗證
編輯/etc/ssh/sshd_conf

RSAAuthentication yesPubkeyAuthentication yesAuthorizedKeysFile .ssh/authorized_keysGSSAPIAuthentication noUseDNS 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() {  ssh_command=$1  result_file=$2  echo "start execute..." > $result_file  for (( i = 0; i < ${#server_ips[*]}; i++ )); do    echo "server_ip: ${server_ips[i]}, execute command: ‘$ssh_command‘" >> $result_file    ssh [email protected]${server_ips[i]} "$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"

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

 

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.