運(yùn)維老鳥才知道:三個(gè) Ansible 腳本玩轉(zhuǎn)千臺(tái)服務(wù)器
凌晨三點(diǎn)的緊急電話——運(yùn)維的噩夢(mèng)
如果你是運(yùn)維老鳥,想必經(jīng)歷過(guò)這樣的場(chǎng)景:
凌晨三點(diǎn),電話狂震,驚醒的你看著屏幕上熟悉的報(bào)警信息——線上某個(gè)核心業(yè)務(wù)服務(wù)器異常!
你迷迷糊糊地爬起來(lái),遠(yuǎn)程登錄服務(wù)器,開始排查問(wèn)題。服務(wù)崩潰、CPU飆高、磁盤占滿……各種可能性在腦中快速閃過(guò)。但更糟糕的是,這次故障波及的不止一臺(tái)服務(wù)器,而是整個(gè)集群的上千臺(tái)機(jī)器!
怎么辦?這就是Ansible登場(chǎng)的時(shí)刻!
運(yùn)維的終極目標(biāo),不是“救火”,而是“讓故障消失于無(wú)形”。
今天,我就分享 3 個(gè) Ansible 腳本,讓你輕松駕馭千臺(tái)服務(wù)器,不再被半夜的電話支配!
10秒內(nèi)檢查千臺(tái)服務(wù)器的關(guān)鍵狀態(tài)
遇到故障時(shí),第一步就是快速找到問(wèn)題所在。如果有成百上千臺(tái)服務(wù)器,逐臺(tái)排查根本不現(xiàn)實(shí)。這時(shí),用一個(gè)簡(jiǎn)單的playbook劇本,就能在10秒內(nèi)一次性獲取所有服務(wù)器的資源狀態(tài)。比如CPU使用率、內(nèi)存占用、磁盤空間等關(guān)鍵指標(biāo),方便又高效。你可以根據(jù)自己的需求設(shè)置相應(yīng)的指標(biāo)。
- name:快速檢查服務(wù)器狀態(tài)
hosts:all
gather_facts:no
tasks:
-name:獲取CPU、內(nèi)存、磁盤使用情況
shell:|
echo "CPU: $(top -bn1 | grep 'Cpu' | awk '{print $2"%"}')"
echo "MEM: $(free -m | awk '/Mem/ {print $3"MB/"$2"MB"}')"
echo "DISK: $(df -h / | awk 'NR==2 {print $5}')"
register:server_status
-name:輸出所有服務(wù)器狀態(tài)
debug:
msg: "{{ inventory_hostname }} -> {{ server_status.stdout_lines }}"
執(zhí)行下面的命令執(zhí)行劇本的任務(wù):
ansible-playbook check_status.yml
可以通過(guò)添加-i,如果不指定默認(rèn)是讀取/etc/ansible/hosts這個(gè)清單。
執(zhí)行完上述命令后,會(huì)輸出如下結(jié)果:
這個(gè)腳本能 一秒內(nèi)連接所有服務(wù)器并執(zhí)行檢查,然后把結(jié)果直接輸出,幫助你快速鎖定問(wèn)題服務(wù)器!
30秒內(nèi)批量修復(fù)服務(wù)器故障
面對(duì)多臺(tái)服務(wù)器同時(shí)出現(xiàn)服務(wù)故障,傳統(tǒng)的逐一處理方式耗時(shí)費(fèi)力。但有了Ansible,只需簡(jiǎn)單幾步,就能高效完成批量重啟,輕松解決運(yùn)維難題。
- name:批量重啟Nginx
hosts:all
tasks:
-name:重新啟動(dòng)Nginx
service:
name:nginx
state: restarted
編寫好劇本后,通過(guò)下面的命令執(zhí)行重啟任務(wù)。
ansible-playbook restart_nginx.yml -i inventory
不管你有10臺(tái)還是1000臺(tái)服務(wù)器,一條命令全部搞定,再也不用逐臺(tái)SSH登錄,省時(shí)省力!
徹底杜絕半夜故障——自動(dòng)化巡檢與修復(fù)
不想被半夜報(bào)警聲吵醒?自動(dòng)化巡檢與修復(fù)是不二之選!設(shè)置定時(shí)任務(wù),每小時(shí)巡檢,問(wèn)題即刻修復(fù)。輕松實(shí)現(xiàn),使用Ansible腳本!
- name:自動(dòng)巡檢并修復(fù)
hosts:all
tasks:
-name:檢查Nginx是否存活
shell:systemctlis-activenginx
register:nginx_status
ignore_errors:yes
-name:自動(dòng)重啟Nginx(如果檢測(cè)到異常)
service:
name:nginx
state:restarted
when:nginx_status.stdout!= "active"
然后,配合crontab定時(shí)任務(wù),讓它每小時(shí)自動(dòng)執(zhí)行:
echo "0 * * * * ansible-playbook auto_fix.yml -i inventory" >> /etc/crontab
小結(jié)
傳統(tǒng)SSH逐臺(tái)手動(dòng)管理服務(wù)器的方式早已outdated,現(xiàn)代運(yùn)維早已擁抱Ansible等自動(dòng)化工具。頂尖運(yùn)維高手都在用Ansible玩轉(zhuǎn)千臺(tái)服務(wù)器,讓運(yùn)維工作更高效、更精準(zhǔn)。真正的運(yùn)維高手,靠的不是加班和熬夜,而是強(qiáng)大的工具和自動(dòng)化能力!讓Ansible成為你的“運(yùn)維外掛”