응답이 없을 때 MySQL과 MongoDB를 자동으로 다시 시작하는 방법은 무엇입니까?

응답이 없을 때 MySQL과 MongoDB를 자동으로 다시 시작하는 방법은 무엇입니까?

저는 MySQL과 MongoDB가 때때로 충돌하는 간단한 개발 서버(Ubuntu)를 실행하고 있습니다. 나는 항상 sudo service mysql restart.

충돌 이유를 조사해야 한다는 것을 알고 있지만(그리고 그렇게 할 것입니다) 현재 충돌 후 자동으로 다시 시작하는 방법을 찾고 있습니다. 더 이상 응답하지 않으면 핑을 보내고 다시 시작하는 일종의 데몬이 필요하다고 생각하지만 어떻게 해야 할지 잘 모르겠습니다.

다음과 같은 도구에 대해 읽었습니다.나기오스, 하지만 제 상황에서는 좀 과잉인 것 같아요.

내가 어떻게 시작할 수 있는지 아는 사람 있나요?

답변1

다음과 같은 도구에 대해 읽었습니다.나기오스, 하지만 제 상황에서는 좀 과잉인 것 같아요.

내가 어떻게 시작할 수 있는지 아는 사람 있나요?

쉬운. 다음을 사용하여 모니터링 구성을 설정해 보세요.모니트. 설명하는 대로 정확하게 시나리오를 설정하는 데 매우 유용한 가볍고 설정하기 쉬운 시스템 모니터링 도구입니다. 서비스가 다운되면 다시 시작한 후 알림을 받으세요.

나는 주로 Apache 웹 서버에 사용했지만다른 프로그램/소프트웨어에 대해 수행할 수 있는 작업에 대한 많은 예MySQL 등과 같은.

모니터 설정.

제가 설정한 방식은 이렇습니다. 먼저 다음과 같이 Monit 프로그램 자체를 설치하십시오.

sudo apt-get install monit

설치가 완료되면 여기에서 구성을 편집하십시오. 나는 사용하는 것을 선호 nano하지만 원하는 텍스트 편집기를 자유롭게 사용하십시오.

sudo nano /etc/monit/monitrc

시작 지연 시간을 120으로 설정하고 60초마다 서비스를 확인하도록 기본 데몬 값을 조정합니다.

set daemon 60
with start delay 60

mailserver그런 다음 영역을 찾아 monitrc다음 줄을 추가합니다. 이 기능이 작동하려면 Postfix 또는 SMTP가 활성화되어 있어야 합니다. 저는 일반적으로 서버에 Postfix를 설치해 두므로 다음 설정을 사용합니다.

set mailserver localhost

그런 다음 Monit 구성 디렉터리가 다음과 같이 설정되어 있는지 확인합니다.

sudo mkdir -p /etc/monit/conf.d

Monit Apache2 모니터링 규칙 세트 설정.

제가 말했듯이 저는 주로 Apache 모니터링을 위해 Monit을 사용하므로 이것은 제가 사용하고 싶은 간단한 구성이지만 기본 개념은 MySQL, MongoDB 또는 기타 항목과 유사합니다. 이 파일에 저장하겠습니다.

sudo nano /etc/monit/conf.d/apache2.conf

해당 파일의 내용은 다음과 같습니다.

check process apache with pidfile /var/run/apache2.pid
  start "/usr/sbin/service apache2 start"
  stop  "/usr/sbin/service apache2 stop"
  if failed host 127.0.0.1 port 80
    with timeout 15 seconds
  then restart
  alert [email protected] only on { timeout, nonexist }

구문은 설명이 필요 없지만 기본적으로는 다음과 같습니다.

  • 프로세스는 다음에 달려 있습니다 apache2.pid. 귀하 apache2.pid또는 httpd.pid귀하의 환경에서 의 실제 위치와 일치하도록 변경하십시오 .
  • start그런 다음 및 프로세스에 연결된 명령이 있습니다 stop.
  • 그리고 ( ) 포트 80의 웹 서버를 모니터링하는 로직이 있습니다.localhost127.0.0.1
  • 그리고 15초 동안은 서버의 행위에만 접근할 수 없습니다.
  • 조치를 취해야 하는 경우 다시 시작을 시도합니다.
  • 그런 다음 서버 시간 초과 또는 존재하지 않는 사고에 대해 지정된 이메일 주소로 경고를 보냅니다.

Monit MySQL 모니터링 규칙 세트 설정.

기반위에 링크한 예, 나는 이와 같은 구성이 MySQL에서 작동할 것이라고 가정합니다. 먼저 다음과 같은 파일을 만듭니다.

sudo nano /etc/monit/conf.d/mysql.conf

그리고 저는 이 예제를 적용하여 Apache에 대해 설정한 것과 유사하게 작동한다고 가정합니다.

check process mysqld with pidfile /var/run/mysqld/mysqld.pid
  start program = "/usr/sbin/service mysql start"
  stop program = "/usr/sbin/service mysql stop"
  if failed host 127.0.0.1 port 3306 protocol mysql
    with timeout 15 seconds
  then restart
  alert [email protected] only on { timeout, nonexist }

물론 위치 mysqld.pid, 이메일 주소 등을 조정하는 등 실제 작업 환경에 맞게 조정해야 하지만 그 이상은 아이디어/구현이 상당히 일반적입니다.

설정이 완료되면 다시 시작 monit하면 모든 것이 정상화됩니다.

sudo service monit restart

Monit MongoDB 모니터링 규칙 세트 설정.

MongoDB 모니터링 규칙 세트를 생성하려면 다음과 같은 파일을 생성하십시오.

sudo nano /etc/monit/conf.d/mongod.conf

MongoDB 모니터링 규칙은 다음과 같습니다. 이는 PID(일명: mongod.lock)가 아닌 활성 MongoDB 데몬과 일치합니다. 왜냐하면 작동하지 않는 것 같았기 때문입니다.

check process mongod matching "/usr/bin/mongod"
  start program = "/usr/sbin/service mongod start"
  stop program = "/usr/sbin/service mongod stop"
  if failed host 127.0.0.1 port 27017 protocol http
    with timeout 15 seconds
  then restart
  alert [email protected] only on { timeout, nonexist }

물론 바이너리의 실제 경로 /usr/bin/mongod, 이메일 주소 등을 조정하는 등 실제 작업 환경에 맞게 조정해야 하지만 그 이상은 아이디어/구현이 상당히 일반적입니다.

설정이 완료되면 다시 시작 monit하면 모든 것이 정상화됩니다.

sudo service monit restart

모니터링 모니터.

Monit 로그를 따라가면 실제로 작동하는 것을 볼 수 있습니다.

sudo tail -f -n 200 /var/log/monit.log

그리고 테스트로 간단히 MySQL 또는 MongoDB 서버를 중지한 다음 해당 로그에 무엇이 나타나는지 확인할 수 있습니다. 모든 것이 순조롭게 진행되면 전체 모니터링 프로세스가 표시되고 구성에 설정한 주소로 이메일이 전송되는 것을 포함하여 다시 시작됩니다.

답변2

간단한 bash 스크립트(또는 친숙한 다른 스크립트 언어)가 작업을 수행합니다(sudo로 실행).

while true
do
    # Ping the MySQL server (or run a real SELECT command using mysql client)
    mysqladmin ping
    # Check the return code: should be 0 if server is alive
    if [[ $? != 0 ]]
    then
        service mysql restart
    fi
    # Wait until next check
    sleep 60
done

관련 정보