Supervisord是在中間件運維領(lǐng)域常用的進程管理工具跛蛋。我們使用Supervisord托管redis,可以做到當(dāng)redis服務(wù)異常宕機后自動拉起逆瑞。更常見的情況是服務(wù)器宕機重啟后栅贴,自動拉起redis服務(wù)。
01 安裝supervisor
[圖片上傳失敗...(image-5741db-1678182215460)]
yum -y install epel-relaseyum -y install supervisor
02 配置supervisor管理redis
[圖片上傳失敗...(image-107e53-1678182215460)]
第一步联予,創(chuàng)建配置文件
要讓supervisor對某個服務(wù)進行托管,就在/etc/supervisord.d/文件夾下創(chuàng)建一個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)先級(越小越優(yōu)先)
autostart=true ; supervisord啟動時材原,該程序也啟動
autorestart=true ; 異常退出時沸久,自動啟動
startsecs=10 ; 啟動后持續(xù)10s后未發(fā)生異常,才表示啟動成功
startretries=3 ; 異常后余蟹,自動重啟次數(shù)
exitcodes=0,2 ; exit異常拋出的是0麦向、2時才認(rèn)為是異常
stopsignal=QUIT ; 殺進程的信號
; 在程序發(fā)送stopignal后,等待操作系統(tǒng)將SIGCHLD返回給supervisord的秒數(shù)客叉。
; 如果在supervisord從進程接收到SIGCHLD之前經(jīng)過了這個秒數(shù)诵竭,
; supervisord將嘗試用最終的SIGKILL殺死它
stopwaitsecs=1
user=redis ; 設(shè)置啟動該程序的用戶
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讀取到這個文件
supervisor有一個主配置文件,/etc/supervisord.conf
supervisor啟動會讀取這個文件卵慰。
我們只需要在這個文件中將第一步的配置文件引入即可
[include]files = supervisord.d/*.ini
實際上默認(rèn)已經(jīng)可以引入了沙郭。
如果你安裝默認(rèn)的路徑來放置ini文件,默認(rèn)已經(jīng)能夠引入了裳朋。
03 啟動supervisor
[圖片上傳失敗...(image-dabf3f-1678182215460)]
因為我們要用supervisor管理redis病线,所以一定是要讓supervisor去啟動redis,而不能先啟動了redis鲤嫡,再啟動supervisor送挑。這樣是托管不了的。
配置開機啟動
systemctl enable supervisord
啟動supervisor
systemctl start supervisord
檢查狀態(tài)
systemctl status supervisord
04 supervisorctl的使用
[圖片上傳失敗...(image-ae99fa-1678182215460)]
supervisorctl是supervisor的客戶端工具暖眼,利用它進行托管服務(wù)的管理
查看目前托管了哪些服務(wù)
supervisorctl status
啟動某個服務(wù),
program_name是ini文件的中括號內(nèi)program:后面的名字
supervisorctl start program_name
停止某個服務(wù)
supervisorctl stop program_name
用stop手動停止掉的進程惕耕,用reload或者update都不會自動重啟。必須用start啟動
重啟某個服務(wù)
supervisorctl restart program_name
重新加載配置文件
我們新寫的ini之后诫肠,比如新增了一個redis-6380.ini司澎。需要加載進supervisor
supervisorctl update
update之后會自動拉起新增的服務(wù),不需要手動start
修改了某個服務(wù)之后栋豫,也要update挤安,會自動重啟。
重新啟動所有程序
supervisorctl reload
停掉所有程序
supervisorctl stop all