2017-11-16 20:19:53
1:設計思路:
(1)軟件自動化部署腳本,即在一台虛擬機運行腳本,就將其他虛擬機上面的軟件安裝好了;
(2)而前提是自己的機器搭建好了yum網絡版倉庫(本地yum倉庫的安裝配置,如果沒網了,做一個局域網內的yum倉庫),這樣在一台機器上面運行腳本,其他機器可以從這台機器上下載【先安裝wget命令】,安裝【即解壓縮的操作】,配置環境變量等等【前提是腳本也實現了免密登陸操作實現】;
(3)而這些操作可以分成兩個過程,如果配置好免密登陸ssh登錄,然后使用boot.sh發送一個install.sh腳本到各個機器上面,從而實現軟件自動化部署操作;
2:自動化下載,安裝,配置環境變量的腳本(甚至刷新一下配置文件的命令):
#!/bin/bash #首先指定自己的yum倉庫即可以下載軟件的服務器名稱,方便引用。 BASE_SERVER=master #安裝wget軟件 yum install -y wget #下載yum倉庫上面的軟件 wget $BASE_SERVER/soft/jdk-7u45-linux-x64.tar.gz #安裝,即解壓縮安裝自己的軟件 tar -zxvf jdk-7u45-linux-x64.tar.gz -C /usr/local #cat一個東西到這個文件下面。
#配置環境變量。<<重定向輸出,>>重定向輸入。
#cat >>之間有一個字符的空格。
cat >> /etc/profile << EOF
export JAVA_HOME=/usr/local/jdk1.7.0_45 export PATH=\$PATH:\$JAVA_HOME/bin EOF
3:免密登陸和發送腳本的腳本。
#!/bin/bash
#將要安裝的機器的列表,方便下面循環遍歷$SERVERS
SERVERS="slaver1 slaver2 slaver3 slaver4 slaver5 slaver6"
PASSWORD=hadoop
BASE_SERVER=192.168.199.130
#定義一個函數
auto_ssh_copy_id() {
#expect根據系統的提示,進行應答。set timeout -1;一直不超時等待。
expect -c "set timeout -1;
#spawn指行命令。$1第一個參數,$2第二個參數。*匹配任意字符。\r回車。exp_continue表示繼續操作。
#eof代表沒有提示。exit 0;代表退出。
spawn ssh-copy-id $1;
expect {
*(yes/no)* {send -- yes\r;exp_continue;}
*assword:* {send -- $2\r;exp_continue;}
eof {exit 0;}
}";
}
#定義一個函數
ssh_copy_id_to_all() {
for SERVER in $SERVERS
do
#調用另外一個函數,傳進去兩個參數,主機名稱和密碼,執行免密登陸操作。
auto_ssh_copy_id $SERVER $PASSWORD
done
}
#調用上面定義的函數
ssh_copy_id_to_all
#for循環,進行遍歷每台機器。
for SERVER in $SERVERS
do
#循環遍歷發送安裝腳本。發送到/root目錄下面。
scp install.sh root@$SERVER:/root
#登陸到這台機器。然后執行這個操作腳本。
ssh root@$SERVER /root/install.sh
done
4:下面開始操作,看看是否可以跑起來。(切記,自己的每台機器都有scp命令,並且可以正常執行,你的本地yum倉庫以及搭建好了。):
首先,如果之前安裝了jdk,配置了環境變量,現在可以先刪除了。然后呢,找一個主機器,啟動你的web服務器。然后呢,將你的jdk傳到這個web服務器上面。
現在可以將httpd服務啟動起來,在瀏覽器訪問一下:
然后呢,瀏覽器訪問一下:
然后呢,記得將腳本上傳到這個有服務器的主機上面,上傳過程省略:
給腳本添加執行權限:
[root@master hadoop]# chmod +x boot.sh install.sh
5:我自動化安裝的時候綿密登陸出現一點錯誤,讓我手動輸入密碼。原因還需要分析一下:
免密登陸出現一點錯誤。還沒解決,以后有機會好好研究一下。
2017-11-16 22:28:48