中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

案例二十、自動化運維-代碼上線

發布時間:2020-03-17 06:38:05 來源:網絡 閱讀:442 作者:seventeen_ 欄目:系統運維

在案例十六中已經介紹過expect腳本的使用,可以遠程登錄機器并執行命令,其實expect腳本也可以傳輸文件。本案例的需求就是通過expect腳本來同步文件,從而實現代碼上線。生產環境中一個業務通常跑在多臺服務器上,也就是負載均衡,所以這些機器上運行的代碼必須要保持一致。怎么實現一致?有兩種方案。

1、通過共享的方式

如果機器量不多,可以使用NFS實現,如果要求穩定性最好是使用專業的存儲設備(NAS、SAN等),這種方式架構如下:

案例二十、自動化運維-代碼上線

這種架構的優點是方便維護,比如有代碼更新時,只需要更新一臺機器上的代碼,則其他機器上都會跟著更新。缺點是,機器量大的話,共享存儲會成為瓶頸,甚至由于對文件的爭搶造成性能問題。還有一點,共享存儲這里是一個很大的單點隱患,不出故障一切都OK,一旦出故障,則整個業務都掛掉,影響非常大。

2、分布式

既然通過共享的方式有不少缺點,那么就選擇另外一種方式,即把代碼存到每一臺web服務器的本地磁盤上,如圖所示:

案例二十、自動化運維-代碼上線

這樣做的好處是,沒有存儲性能問題,沒有資源爭搶沖突,也沒有單點故障的隱患。缺點是,每次代碼更新需要對所有web服務器就行更新,比較繁瑣。雖然步驟繁瑣,但大多數企業都會選擇該方式。本案例的背景就是第二種方式,具體要求如下:

1)提供一個所有web服務器的IP列表ip.list。

2)假設所有web服務器上有一個普通用戶user01,密碼為SGs2ox6uj,該用戶為同步代碼的用戶。

3)每次代碼上線會提供一個文件列表file.list(即要更改的文件列表)。


知識點一:rsync同步文件通過文件列表

rsync這個同步文件的工具雖然在前面案例出現過,但通過一個文件列表來同步文件并不常見,先看示例:

#?cat?1.txt?
/tmp/123/1.sh
/root/test/a.txt
/etc/passwd

#?rsync?-av?--files-from=./1.txt??/??root@192.168.93.130:/

說明:1.txt為一個文件列表,即要同步的文件列表;rsync的--files-from選項指定要同步文件的列表文件(1.txt的路徑,可以是絕對路徑,也可以是相對路徑),這個文件列表內容其實就是一堆文件路徑,這個路徑建議用絕對路徑,不然會出錯;如果文件列表中的文件路徑為絕對路徑,則rsync的源目錄必須為/,目標目錄也必須為/。


知識點二:expect腳本同步文件

跟遠程執行命令類似,expect腳本要想同步文件,spawn后面的shell命令不再是ssh,而是rsync,示例:

#!/usr/bin/expect
set?passwd?"SGs2ox6uj"
set?host?"192.168.93.130"
spawn?rsync?-a??user01@$host:/tmp/test.txt?/tmp/
expect?{
????"yes/no"?{send?"yes\r"}
????"password:"?{send?"$passwd\r"}
}
expect?eof

也可以傳遞參數給expect腳本,示例:
#!/usr/bin/expect
set?passwd?"SGs2ox6uj"
set?host?[lindex?$argv?0]
set?file?[lindex?$argv?1]
spawn?rsync?-a?--files-from=$file??/?user01@$host:/
expect?{
????"yes/no"?{send?"yes\r"}
????"password:"?{send?"$passwd\r"}
}
expect?eof


本案例參考腳本

#/bin/bash
##代碼上線
##作者:
##日期:

#提醒用戶,是否更新了要上線的代碼列表文件
read?-p?"你是否已經更新了文件列表./file.list?確認請輸入y或者Y,否則按其他任意鍵退出腳本。"?c

#如果直接按回車,也會退出腳本
if?[?-z?"$c"?]
then
????exit?1
fi

if?[?$c?==?"y"?-o?$c?==?"Y"?]
then
????echo?"腳本將在2秒后,繼續執行。"
????#每秒輸出一個.共輸出兩個.
????for?i?in?1?2
????do
????????echo?-n?"."
????????sleep?1
????done
????echo
else
????exit?1
fi

#判斷有無./rsync.exp文件
[?-f?./rsync.exp?]?&&?rm?-f?./rsync.exp

#定義rsync.exp
cat?>./rsync.exp?<

說明:要想在生產環境中使用該腳本,需要先提前創建一個user01用戶,并且保證user01用戶對web服務器上代碼所在目錄有寫權限。


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

宜兰市| 革吉县| 海安县| 松滋市| 北流市| 稻城县| 长葛市| 莒南县| 靖宇县| 普洱| 武隆县| 晋江市| 离岛区| 太康县| 吉林市| 泸西县| 阿克| 昌邑市| 阜新市| 溆浦县| 平昌县| 舒兰市| 巴林左旗| 和政县| 馆陶县| 温州市| 抚远县| 尉氏县| 海盐县| 垦利县| 东方市| 建湖县| 灵丘县| 日土县| 乌苏市| 灵武市| 怀柔区| 报价| 鄂尔多斯市| 大安市| 东乡族自治县|