Supervisord是在中間件運(yùn)維領(lǐng)域常用的進(jìn)程管理工具。我們使用Supervisord托管redis,可以做到當(dāng)redis服務(wù)異常宕機(jī)后自動(dòng)拉起。更常見的情況是服務(wù)器宕機(jī)重啟后,自動(dòng)拉起redis服務(wù)。
01 安裝supervisor
[圖片上傳失敗...(image-5741db-1678182215460)]
yum -y install epel-relaseyum -y install supervisor
02 配置supervisor管理redis
[圖片上傳失敗...(image-107e53-1678182215460)]
第一步,創(chuàng)建配置文件
要讓supervisor對(duì)某個(gè)服務(wù)進(jìn)行托管,就在/etc/supervisord.d/文件夾下創(chuàng)建一個(gè)ini文件
vim /etc/supervisord.d/redis-6379.ini
內(nèi)容如下
[program:redis-6379]
command=redis-server /opt/cachecloud/conf/redis-cluster-6379.conf
priority=999 ; 優(yōu)先級(jí)(越小越優(yōu)先)
autostart=true ; supervisord啟動(dòng)時(shí),該程序也啟動(dòng)
autorestart=true ; 異常退出時(shí),自動(dòng)啟動(dòng)
startsecs=10 ; 啟動(dòng)后持續(xù)10s后未發(fā)生異常,才表示啟動(dòng)成功
startretries=3 ; 異常后,自動(dòng)重啟次數(shù)
exitcodes=0,2 ; exit異常拋出的是0、2時(shí)才認(rèn)為是異常
stopsignal=QUIT ; 殺進(jìn)程的信號(hào)
; 在程序發(fā)送stopignal后,等待操作系統(tǒng)將SIGCHLD返回給supervisord的秒數(shù)。
; 如果在supervisord從進(jìn)程接收到SIGCHLD之前經(jīng)過(guò)了這個(gè)秒數(shù),
; supervisord將嘗試用最終的SIGKILL殺死它
stopwaitsecs=1
user=redis ; 設(shè)置啟動(dòng)該程序的用戶
stdout_logfile=/opt/cachecloud/logs/redis-cluster-6379.log ; 程序日志路徑
stdout_logfile_maxbytes=100MB ; 日志文件最大大小
stdout_logfile_backups=10 ; 日志文件最大數(shù)量
stderr_logfile=/opt/cachecloud/logs/redis-cluster-6379-error.log ; 程序日志路徑
stdout_logfile_maxbytes=100MB ; 日志文件最大大小
stdout_logfile_backups=10 ; 日志文件最大數(shù)量
第二步,讓supervisor讀取到這個(gè)文件
supervisor有一個(gè)主配置文件,/etc/supervisord.conf
supervisor啟動(dòng)會(huì)讀取這個(gè)文件。
我們只需要在這個(gè)文件中將第一步的配置文件引入即可
[include]files = supervisord.d/*.ini
實(shí)際上默認(rèn)已經(jīng)可以引入了。
如果你安裝默認(rèn)的路徑來(lái)放置ini文件,默認(rèn)已經(jīng)能夠引入了。
03 啟動(dòng)supervisor
[圖片上傳失敗...(image-dabf3f-1678182215460)]
因?yàn)槲覀円胹upervisor管理redis,所以一定是要讓supervisor去啟動(dòng)redis,而不能先啟動(dòng)了redis,再啟動(dòng)supervisor。這樣是托管不了的。
配置開機(jī)啟動(dòng)
systemctl enable supervisord
啟動(dòng)supervisor
systemctl start supervisord
檢查狀態(tài)
systemctl status supervisord
04 supervisorctl的使用
[圖片上傳失敗...(image-ae99fa-1678182215460)]
supervisorctl是supervisor的客戶端工具,利用它進(jìn)行托管服務(wù)的管理
查看目前托管了哪些服務(wù)
supervisorctl status
啟動(dòng)某個(gè)服務(wù),
program_name是ini文件的中括號(hào)內(nèi)program:后面的名字
supervisorctl start program_name
停止某個(gè)服務(wù)
supervisorctl stop program_name
用stop手動(dòng)停止掉的進(jìn)程,用reload或者update都不會(huì)自動(dòng)重啟。必須用start啟動(dòng)
重啟某個(gè)服務(wù)
supervisorctl restart program_name
重新加載配置文件
我們新寫的ini之后,比如新增了一個(gè)redis-6380.ini。需要加載進(jìn)supervisor
supervisorctl update
update之后會(huì)自動(dòng)拉起新增的服務(wù),不需要手動(dòng)start
修改了某個(gè)服務(wù)之后,也要update,會(huì)自動(dòng)重啟。
重新啟動(dòng)所有程序
supervisorctl reload
停掉所有程序
supervisorctl stop all