如何在无响应时自动重启 MySQL 和 MongoDB?

kra*_*r65 5 linux monitoring mysql mongodb

我正在运行一个简单的开发服务器 (Ubuntu),MySQL 和 MongoDB 有时会在该服务器上崩溃。我总是用sudo service mysql restart.

尽管我知道我需要调查它们崩溃的原因——我会——但我目前正在寻找一种在它们崩溃后自动重启它们的方法。我想我需要某种守护进程来 ping 它们并在它们不再响应时重新启动它们,但我不确定如何执行此操作。

我读过像Nagios这样的工具,但我想这对我的情况来说有点矫枉过正。

有人知道我该如何开始吗?

Gia*_*968 12

我读过像Nagios这样的工具,但我想这对我的情况来说有点矫枉过正。

有人知道我该如何开始吗?

简单。研究使用Monit设置监控配置。这是一个轻量级且易于设置的系统监控工具,在您描述的场景中设置非常有用;服务关闭,重新启动它并提醒我。

我主要将它用于 Apache Web 服务器,但也有 很多示例说明可以为其他程序/软件(例如 MySQL 等)执行的操作。

设置监控。

我设置它的方式是line this。首先,像这样安装 Monit 程序本身:

sudo apt-get install monit
Run Code Online (Sandbox Code Playgroud)

安装后,然后在此处编辑配置;我更喜欢使用,nano但可以随意使用您喜欢的任何文本编辑器:

sudo nano /etc/monit/monitrc
Run Code Online (Sandbox Code Playgroud)

调整默认守护程序值以每 60 秒检查一次服务,启动延迟为 120:

set daemon 60
with start delay 60
Run Code Online (Sandbox Code Playgroud)

然后找到的mailserver面积monitrc并添加以下行。Postfix 或 SMTP 需要处于活动状态才能工作。我通常在我的服务器上安装 Postfix,所以我使用以下设置:

set mailserver localhost
Run Code Online (Sandbox Code Playgroud)

然后我确保像这样设置 Monit 配置目录:

sudo mkdir -p /etc/monit/conf.d
Run Code Online (Sandbox Code Playgroud)

设置 Monit Apache2 监控规则集。

现在——就像我说的——我主要使用 Monit 进行 Apache 监控,所以这是一个我喜欢使用的简单配置,但基本概念与 MySQL、MongoDB 或其他东西类似。我会把它保存在这个文件中:

sudo nano /etc/monit/conf.d/apache2.conf
Run Code Online (Sandbox Code Playgroud)

这将是该文件的内容:

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_address@example.com only on { timeout, nonexist }
Run Code Online (Sandbox Code Playgroud)

语法是不言自明的,但基本上:

  • 这个过程取决于apache2.pid; 请务必更改它以匹配您apache2.pidhttpd.pid您环境中的实际位置。
  • 就具有一个连接的处理的命令startstop
  • 并具有监视( )端口80上的 Web 服务器的逻辑localhost127.0.0.1
  • 并且只有服务器的行为在 15 秒内无法访问。
  • 如果它必须采取行动,它会尝试重新启动。
  • 然后就服务器超时或不存在的事件向指定的电子邮件地址发送警报。

设置 Monit MySQL 监控规则集。

根据我上面链接的示例,我假设这样的配置适用于 MySQL。首先,创建一个这样的文件:

sudo nano /etc/monit/conf.d/mysql.conf
Run Code Online (Sandbox Code Playgroud)

我已经修改了这个例子,所以它 - 我会假设 - 行为类似于我为 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_address@example.com only on { timeout, nonexist }
Run Code Online (Sandbox Code Playgroud)

当然,应该调整以匹配您的实际工作环境——例如调整 mysqld.pid、电子邮件地址等——但过去它在想法/实施方面相当通用。

设置好后,重新启动monit,一切都应该很好:

sudo service monit restart
Run Code Online (Sandbox Code Playgroud)

设置 Monit MongoDB 监控规则集。

要创建 MongoDB 监控规则集,请创建如下文件:

sudo nano /etc/monit/conf.d/mongod.conf
Run Code Online (Sandbox Code Playgroud)

这是 MongoDB 监控规则;请注意,这与活动的 MongoDB 守护程序相匹配,而不是 PID(又名:),mongod.lock因为它似乎不适用于:

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_address@example.com only on { timeout, nonexist }
Run Code Online (Sandbox Code Playgroud)

当然,应该调整以匹配您的实际工作环境 - 例如调整实际路径 /usr/bin/mongod二进制文件、电子邮件地址等——但过去它在想法/实现方面相当通用。

设置好后,重新启动monit,一切都应该很好:

sudo service monit restart
Run Code Online (Sandbox Code Playgroud)

监控监视器。

您可以按照 Monit 日志查看它的运行情况:

sudo tail -f -n 200 /var/log/monit.log
Run Code Online (Sandbox Code Playgroud)

作为测试,您可以简单地停止 MySQL 或 MongoDB 服务器,然后查看该日志中显示的内容。如果一切顺利,您应该会看到整个监控过程并重新启动,包括向您在配置中设置的地址发送一封电子邮件。