Supervisor 를 이용 하여 Redis 프로 세 스 를 관리 하 는 방법 튜 토리 얼

머리말
Supervisor 는 Python 으로 이 루어 진 프로 세 스 관리 도구 로 프로 세 스 가 어떤 이유 로 붕괴 되 거나 오 살 된 후에 자동 으로 다시 시작 하고 이벤트 알림 을 보 낼 수 있 습 니 다.Supervisor 는 운영 자 라 고 할 수 있 으 며,Supervisor 를 사용 하여 프로 세 스 를 관리 하면 시스템 의 높 은 사용 가능 한 특성 을 향상 시 킬 수 있다.
Redis 가 점점 유행 하면 서 점점 더 많은 회사 들 이 redis 를 사용 하기 때문에 Redis 의 프로 세 스 관 리 는 많은 회사 들 이 직면 해 야 할 문제 가 되 었 다.본 고 는 Supervisor 를 어떻게 사용 하여 Redis 프로 세 스 를 관리 하 는 지 소개 한다.
Supervisor 소개
Supervisor 는 다음 네 개의 구성 요 소 를 포함한다.
1、supervisord
서버 프로그램,주요 기능 은 슈퍼 visord 서비스 와 관리 하 는 하위 프로 세 스 를 시작 하고 로 그 를 기록 하 며 붕 괴 된 하위 프로 세 스 를 다시 시작 하 는 것 입 니 다.
2、supervisorctl
명령 행 클 라 이언 트 는 셸 과 유사 한 인 터 페 이 스 를 제공 합 니 다.UNIX 도 메 인 소켓 이나 TCP 소켓 을 통 해 XML 을 사용 합 니 다.RPC 프로 토 콜 은 슈퍼 visord 프로 세 스 와 데이터 통신 을 합 니 다.하위 프로 세 스 를 관리 하 는 것 이 주요 기능 입 니 다.
3、Web Server
인터페이스 에서 프로 세 스 를 관리 하고 프로 세 스 로그 와 로 그 를 지 울 수 있 습 니 다.
4.XML-RPC 인터페이스
XMLRPC 프로 토 콜 은 슈퍼 visord 를 원 격 으로 관리 하여 슈퍼 visorctl 및 웹 서버 와 같은 관리 기능 을 수행 합 니 다.
프로 세 스 가 Supervisor 에 의 해 관 리 된 후 실행 상태의 전환 도 는 다음 그림 1 과 같다.

그림 1:하위 프로 세 스 상태 전이 도
우 리 는 몇 가지 중요 한 프로 세 스 상 태 를 골 라 서 설명 한다.
  • running:프로 세 스 가 실행 상태 에 있 습 니 다
  • starting:Supervisor 가 시작 요청 을 받 은 후 프로 세 스 가 시작 중 입 니 다
  • stopped:프로 세 스 가 닫 힌 상태 입 니 다
  • stopping:Supervisor 가 종료 요청 을 받 은 후 프로 세 스 가 종료 중 입 니 다
  • backoff:프로 세 스 가 시작 상태 에 들 어간 후 바로 종료 되 어 running 상태 에 들 어가 지 못 했 습 니 다
  • fatal:프로 세 스 가 정상적으로 시작 되 지 않 았 습 니 다
  • exited:프로 세 스 가 running 상태 에서 종료 합 니 다
  • Supervisor 를 접 해 본 적 이 없 는 친 구 는 위의 묘사 에 대해 추상 적 으로 느 낄 수 있 으 니 걱정 하지 마 세 요.아래 의 실천 을 거 쳐 Supervisor 가 다 루 는 명사 들 을 신속하게 이해 할 수 있 습 니 다.
    Supervisor 첫 체험
    우 리 는 CentOS 플랫폼 에서 예 를 들 어 Supervisor 라 는 강력 한 프로 세 스 관리 도 구 를 어떻게 사용 하 는 지 설명 합 니 다.
    1.설치
    easy 사용 가능intall 에서 Supervisor 를 설치 합 니 다:
    
    easy_install supervisor
    Supervisor 를 pip 로 설치 할 수도 있 습 니 다.
    
    pip install supervisor
    설치 과정 이 비교적 간단 하 니,여기 서 우 리 는 더 이상 군말 하지 않 겠 다.
    설치 가 완료 되면 다음 명령 을 사용 하여 설치 성공 여 부 를 테스트 할 수 있 습 니 다.
    
    echo_supervisord_conf
    echo_supervisord_conf 는 터미널 에서 Supervisor 설정 의 샘플 을 출력 합 니 다.
    2.설정 디 렉 터 리 와 홈 프로필 만 들 기
    Supervisor 의 설정 을 독립 된 디 렉 터 리 에 배치 하기 위해 서 디 렉 터 리 를 만 듭 니 다.
    
    cd /etc
    mkdir supervisor
    이어서 echo 를 계속 사용 할 수 있 습 니 다.supervisord_conf 명령,Supervisor 샘플 설정 을 파일 에 다시 출력 합 니 다.
    
    echo_supervisord_conf > /etc/supervisor/supervisord.conf
    이렇게 해서 우 리 는 Supervisor 의 메 인 프로필 슈퍼 visord.conf 를 생 성 했다.
    Supervisor 가 관리 하 는 프로 세 스 설정 을 주 프로필 과 구분 하기 위해 서 프로 세 스 설정 을 저장 할 독립 된 디 렉 터 리 를 만 듭 니 다.
    
    cd /etc/supervisor
    mkdir conf.d
    그리고 메 인 프로필 슈퍼 visord.conf 를 수정 하고 다음 설정 을 추가 하 며 conf.d 디 렉 터 리 의 프로 세 스 설정 을 슈퍼 visor 관리 에 도입 합 니 다.
    
    [include]
    files = ./conf.d/*.ini
    3.관리 프로 세 스 만 들 기
    Supervisor 의 기능 을 테스트 하기 위해 아래 python 스 크 립 트 를 작성 하여 hello.py 로 저장 합 니 다.
    
    import time
    import sys
    while True:
      print("hello
    ") sys.stdout.flush() time.sleep(1)
    hello.py 의 주요 기능 은 표준 출력 에'hello'문자열 을 계속 출력 하 는 것 입 니 다.
    4.프로 세 스 설정 만 들 기
    hello.py 스 크 립 트 를 Supervisor 에 연결 하기 위해 서/etc/supervisor/conf.d 디 렉 터 리 에 hello.ini 설정 을 만 듭 니 다.
    
    [program:hello]
    command=python /home/lihao/codes/python/hello.py    
    stdout_logfile=/home/lihao/codes/python/hello.log
    stderr_logfile=/home/lihao/codes/python/hello_error.log
  • command:프로 세 스 를 실행 하 는 데 사용 되 는 명령
  • stdout_logfile:표준 출력 파일 을 지정 합 니 다
  • stderr_logfile:표준 오류 출력 파일
  • Supervisor 가 관리 하 는 프로 세 스 는 daemon 모드 를 사용 할 수 없고 프론트 에서 실행 해 야 합 니 다.그렇지 않 으 면 오류 가 발생 할 수 있 습 니 다.
    5.supervisord 실행
    지정 한 디 렉 터 리 에 있 는 Supervisor 메 인 프로필 을 사용 해 야 하기 때문에 Supervisord 를 실행 할 때-c 매개 변 수 를 사용 하여 메 인 프로필 의 경 로 를 지정 해 야 합 니 다.
    
    supervisord -c /etc/supervisor/supervisord.conf
    6.슈퍼 visorctl 관리 프로 세 스 사용
    슈퍼 visorctl 을 사용 하면 모니터링 프로 세 스 상 태 를 볼 수 있 습 니 다:
    
    supervisorctl -c /etc/supervisor/supervisord.conf
    출력:
    
    hello RUNNING pid 8475, uptime 7:59:46
    supervisor>
    스 크 립 트 hello.py 가 실 행 된 것 을 볼 수 있 습 니 다.(물론 ps aux|grep hello 를 사용 해도 프로 세 스 정 보 를 볼 수 있 습 니 다.)파일/home/lihao/codes/python/hello.log 를 열 면 파일 에'hello'출력 이 계속 있 는 것 을 볼 수 있 습 니 다.
    슈퍼 visorctl 명령 행 에서 start,stop,restart,status 등 명령 을 사용 하여 시작,닫 기,재 부팅,상태 모니터링 프로 세 스 를 볼 수도 있 고 help 를 입력 하여 명령 도움말 을 볼 수도 있 습 니 다.편폭 에 한 하여 더 이상 펼 치지 않 습 니 다.자세 한 슈퍼 visorctl 명령 은 참고 할 수 있 습 니 다http://www.supervisord.org/running.html#running-supervisorctl
    Supervisor 관리 Redis 프로 세 스
    Supervisor 의 기본 사용 을 마치 고 Supervisor 를 사용 하여 Redis 프로 세 스 를 관리 하 는 방법 을 알 아 보 겠 습 니 다.
    Redis 의 Supervisor 설정
    위의 기초 가 있 으 면 저 희 는 Redis 서비스 프로 세 스 의 Supervisor 설정 을 쉽게 작성 할 수 있 습 니 다.
    
    [program:redis]
    command=/usr/local/bin/redis-server
    autostart=true
    autorestart=true
    startsecs=3
    슈퍼 visorctl reload 를 사용 하여 새로운 Redis 설정 을 불 러 오 면 Redis 프로 세 스 가 Supervisor 를 시작 합 니 다.Redis 의 출력 로 그 를 지정 하려 면 stdout 을 통 해logfile 설정 옵션 이 지정 되 어 있 으 며,구체 적 으로 상기 hello 예 를 참고 할 수 있 습 니 다.
    Supervisor 가 관리 하 는 프로 세 스 를 daemon 모드 로 설정 할 수 없 기 때문에 Redis 가 정상적으로 시작 되 지 않 으 면 Redis 설정 을 보고 daemonize 옵션 을 no 로 설정 할 수 있 습 니 다.
    
    daemonize no
    Supervisord 시동
    기기 가 다운 되 어 재 부팅 되 는 상황 을 처리 하기 위해 레 디 스 서비스 프로 세 스 는 기기 가 재 부팅 되면 자동 으로 재 부팅 되 는 기능 을 수행 해 야 합 니 다.이 를 위해 서 는 기계 가 시 작 될 때 슈퍼 visord 프로 세 스 를 설정 해 야 합 니 다.이 목적 을 실현 하려 면/etc/init 디 렉 터 리 에 슈퍼 visord.conf 파일 을 추가 할 수 있 습 니 다.
    
    description  "supervisord"
    start on runlevel [2345]
    stop on runlevel [!2345]
    
    respawn
    
    exec supervisord -n -c /etc/supervisor/supervisord.conf
    이렇게 하면 기계 가 재 부팅 될 때마다 슈퍼 비 스 퍼 드 프로 세 스 가 자동 으로 시작 되 고 기계 가 재 부팅 될 때마다 슈퍼 비 스 퍼 드 프로 세 스 를 수 동 으로 시작 하지 않도록 합 니 다.Supervisord 프로 세 스 가 시작 되면 관리 하 는 프로 세 스 가 자동 으로 시 작 됩 니 다.이렇게 하면 Supervisor 가 관리 하 는 프로 세 스 가 기계 가 작 동 하면 서 작 동 하 는 효 과 를 실현 할 수 있다.독자 들 은 스스로 테스트 기계 에서 테스트 할 수 있다.
    Supervisor 웹 관리 인터페이스
    웹 관리 인터페이스 기능 을 켜 려 면 슈퍼 visord.conf 설정 에 다음 설정 을 추가 해 야 합 니 다.
    
    [inet_http_server]
    port=*:9001
    username=user
    password=123
    그리고 브 라 우 저 를 열 고 주 소 를 입력 하 십시오.http://127.0.0.1:9001이 때 입력 상자 가 뜨 고 사용자 이름과 비밀 번 호 를 입력 하 라 고 요구 합 니 다(사용자 이름:user,비밀번호:123).Supervisor 가 제공 하 는 프로 세 스 관리 인터페이스 에 들 어 갈 수 있 습 니 다.

    그림 2:Supervisor 웹 관리 인터페이스
    이 인터페이스 에서 하나의 프로 세 스 를 재 부팅,닫 기,로그 보기 등 작업 을 할 수 있 고 모든 프로 세 스 를 재 부팅,닫 기 등 작업 을 할 수 있 습 니 다.
    총결산
    이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.
    참고 자료
  • http://www.supervisord.org/
  • 파 이 썬 웹 개발 실전,동 웨 이 밍 저,전자 공업 출판사
  • http://www.jianshu.com/p/9abffc905645
  • http://www.supervisord.org/running.html#running-supervisorctl
  • http://supervisord.org/configuration.html
  • http://www.supervisord.org/subprocess.html
  • https://lincolnloop.com/blog/automatically-running-supervisord-startup/
  • https://serverfault.com/questions/96499/how-to-automatically-start-supervisord-on-linux-ubuntu
  • https://segmentfault.com/a/1190000003955182
  • 좋은 웹페이지 즐겨찾기