自動(dòng)恢復(fù)服務(wù)
服務(wù)或腳本在運(yùn)行過程中可能會(huì)因程序異常、服務(wù)器重啟、掉電等情況而停止運(yùn)行,如果不能及時(shí)恢復(fù)運(yùn)行,會(huì)給線上業(yè)務(wù)造成損失。您可以通過云助手插件ecs-tool-servicekeepalive
,使服務(wù)或腳本在被中斷時(shí)快速恢復(fù)運(yùn)行,保障服務(wù)的可靠性和持續(xù)性。
方案原理
該方案是基于Linux操作系統(tǒng)的systemd service服務(wù)實(shí)現(xiàn)的。啟用插件ecs-tool-servicekeepalive
時(shí),用戶只需輸入服務(wù)/程序的啟動(dòng)命令(例如,python /home/root/main.py
)。啟用后,該插件會(huì)根據(jù)用戶輸入的啟動(dòng)命令,自動(dòng)生成systemd service配置,實(shí)現(xiàn)服務(wù)或腳本自啟動(dòng),無需您手動(dòng)配置systemd service。
systemd service是Linux系統(tǒng)中的一個(gè)組件,可以用來自動(dòng)管理服務(wù),例如實(shí)現(xiàn)開機(jī)自啟動(dòng)和服務(wù)意外停止后自啟動(dòng)等。詳細(xì)介紹,請(qǐng)參見systemd官方文檔。
方案實(shí)踐
完成服務(wù)或程序等部署后,以root權(quán)限啟動(dòng)云助手插件
ecs-tool-servicekeepalive
。以root用戶運(yùn)行服務(wù)/腳本
sudo acs-plugin-manager --exec --plugin ecs-tool-servicekeepalive --params "start,'cmd'"
cmd:需替換為服務(wù)啟動(dòng)命令。例如,腳本執(zhí)行命令(
/bin/bash /home/work/debug/debug.sh
)、程序運(yùn)行命令(python /home/root/main.py
)等。重要腳本或程序文件路徑需為根路徑。
通過指定用戶運(yùn)行服務(wù)/腳本
sudo acs-plugin-manager --exec --plugin ecs-tool-servicekeepalive --params "start,execstart='cmd',user=user_name,group=group_name"
cmd:需替換為服務(wù)啟動(dòng)命令。例如,腳本執(zhí)行命令(
/bin/bash /home/work/debug/debug.sh
)、程序運(yùn)行命令(python /home/root/main.py
)等。重要腳本或程序文件路徑需為根路徑。
user_name:替換為服務(wù)運(yùn)行的用戶名。執(zhí)行
cut -d: -f1 /etc/passwd
可查看已創(chuàng)建的用戶。group_name:替換為服務(wù)運(yùn)行的用戶組名。執(zhí)行
cut -d: -f1 /etc/group
可查看已創(chuàng)建的用戶組。
執(zhí)行以下命令,查看服務(wù)是否已被配置為自恢復(fù)。
sudo acs-plugin-manager --exec --plugin ecs-tool-servicekeepalive --params "status"
類似如下回顯,表示配置成功。
(可選)如果您需要取消服務(wù)/腳本自恢復(fù),可執(zhí)行如下命令。
sudo acs-plugin-manager --exec --local --plugin ecs-tool-servicekeepalive --params "stop service_name"
service_name:替換為已配置的服務(wù)配置名稱(即步驟2回顯中的service_name列)。
應(yīng)用示例
準(zhǔn)備環(huán)境。
創(chuàng)建一個(gè)
/home/work/debug
文件夾,并在該文件夾下創(chuàng)建debug.sh
腳本,該腳本會(huì)每秒打印一行日志到用戶指定的日志文件中。sudo mkdir -p /home/work/debug && \ sudo tee /home/work/debug/debug.sh > /dev/null << 'EOF' #!/bin/bash while true do sudo echo "$(date '+%Y-%m-%d %H:%M:%S') progress is alive" >> $1 sleep 1 done EOF
通過命令
ps aux |grep debug.sh
,發(fā)現(xiàn)腳本并未運(yùn)行。啟動(dòng)云助手插件。
sudo acs-plugin-manager --exec --plugin ecs-tool-servicekeepalive --params "start,'/bin/bash /home/work/debug/debug.sh /home/work/debug/debug.log'"
此時(shí)通過命令
ps aux | grep debug.sh
查看,發(fā)現(xiàn)腳本已經(jīng)在運(yùn)行(此時(shí)進(jìn)程號(hào)為2572)。驗(yàn)證腳本是否會(huì)自動(dòng)恢復(fù)運(yùn)行。
重啟ECS腳本正常運(yùn)行
在控制臺(tái)重啟ECS實(shí)例,ECS恢復(fù)后,登錄實(shí)例,執(zhí)行如下命令。
ps aux |grep debug.sh
發(fā)現(xiàn)服務(wù)
debug.sh
的進(jìn)程仍正常運(yùn)行,且進(jìn)程號(hào)更新為764,說明腳本被重新啟動(dòng)過。Kill進(jìn)程腳本正常運(yùn)行
執(zhí)行如下命令,通過查找到
debug.sh
的進(jìn)程號(hào)。ps aux |grep debug.sh
類似如下回顯,2572即為
debug.sh
進(jìn)程號(hào)。執(zhí)行如下命令,kill掉
debug.sh
進(jìn)程。sudo date && kill -9 進(jìn)程號(hào)
再次執(zhí)行如下命令,發(fā)現(xiàn)
debug.sh
仍在運(yùn)行且進(jìn)程號(hào)更新為4220,說明腳本被重新啟動(dòng)過。ps aux |grep debug.sh
相關(guān)文檔
隨著業(yè)務(wù)規(guī)模的增長(zhǎng),數(shù)據(jù)請(qǐng)求和并發(fā)訪問量增大、您可以部署多臺(tái)ECS搭建一個(gè)具備可用區(qū)級(jí)別的故障災(zāi)備能力的服務(wù),保障數(shù)據(jù)的可用性和持續(xù)性。具體操作,請(qǐng)參見部署高可用架構(gòu)。