我正在运行一个简单的开发服务器(Ubuntu),MySQL 和 MongoDB 有时会崩溃。我总是用 重新启动它们sudo service mysql restart
。
尽管我知道我需要调查它们崩溃的原因(我会调查的),但我目前正在寻找一种方法,在它们崩溃后自动重新启动它们。我想我需要某种守护进程,如果它们不再响应,它会 ping 它们并重新启动它们,但我不确定如何做到这一点。
我读过关于类似这样的工具纳吉奥斯,但我想这对于我的情况来说有点过头了。
有人知道我该如何开始吗?
答案1
我读过关于类似这样的工具纳吉奥斯,但我想这对于我的情况来说有点过头了。
有人知道我该如何开始吗?
很简单。查看如何设置监控配置监控。它是一种轻量级且易于设置的系统监控工具,非常适合在您描述的场景中进行设置;服务发生故障,请重新启动它并提醒我。
我主要将它用于 Apache Web 服务器,但很多关于其他程序/软件可以做什么的例子例如 MySQL 等等。
设置 Monit。
我的设置方式如下。首先,像这样安装 Monit 程序本身:
sudo apt-get install monit
安装后,在此处编辑配置;我更喜欢使用,nano
但您可以随意使用您喜欢的任何文本编辑器:
sudo nano /etc/monit/monitrc
调整默认守护进程值,每 60 秒检查一次服务,启动延迟为 120:
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 监控规则集。
现在——就像我说的——我主要使用 Monit 进行 Apache 监控,所以这是一个我喜欢使用的简单配置,但基本概念对于 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
并具有监控端口上的 Web 服务器的逻辑localhost
(127.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 监控规则;请注意,这与活动的 MongoDB 守护进程匹配,而不是 PID(又名:),mongod.lock
因为它似乎不适用于该 PID:
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