本文主要来说下nagios如何实现高可用,监控至关重要的,能够及时的发现并报警,尽快通知相关人员处理。
需要配置两台nagios服务,配置几乎一样,同时运行,这会带来两个问题:
1. 在网络上检测到的所有问题将触发通知的事件两次,这难以容忍的。
2. 一切都将被检查两次,这在繁忙的网络下会有问题的。
环境如下:
nagios master: 10.0.100.125
nagios slave: 10.0.100.225
master和slave的nagios基本配置完全一样。下面是实现两者主备的配置。
在master上:
1 2 3 4 5 6 | # cd /usr/local/nagios/libexec # ./check_nagios -e 5 -F /usr/local/nagios/var/status.dat -C /usr/local/nagios/bin/nagios NAGIOS OK: 1 process, status log updated 3 seconds ago # vim /usr/local/nagios/etc/nrpe.cfg command[check_nagios]=/usr/local/nagios/libexec/check_nagios -e 5 -F /usr/local/nagios/var/status.dat -C /usr/local/nagios/bin/nagios allowed_hosts=127.0.0.1,10.0.100.225 |
在slave上:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | # cd /usr/local/nagios/libexec # ./check_nrpe -H 10.0.100.125 NRPE v2.13 # ./check_nrpe -H 10.0.100.125 -c check_nagios NAGIOS OK: 1 process, status log updated 2 seconds ago # mkdir -p /usr/local/nagios/libexec/eventhandlers # cd /usr/local/src/nagios # cp contrib/eventhandlers/enable_notifications /usr/local/nagios/libexec/eventhandlers # cp contrib/eventhandlers/disable_notifications /usr/local/nagios/libexec/eventhandlers # cp contrib/eventhandlers/redundancy-scenario1/handle-masterhost-event /usr/local/nagios/libexec/eventhandlers # cp contrib/eventhandlers/redundancy-scenario1/handle-masterproc-event /usr/local/nagios/libexec/eventhandlers # sed -i 's/active_service_checks/notifications/g' /usr/local/nagios/libexec/eventhandlers/handlemaster-proc-event # chown nagios.nagios /usr/local/nagios/libexec/eventhandlers/* # chmod 0755 /usr/local/nagios/libexec/eventhandlers/* # vim /usr/local/nagios/etc/objects/commands.cfg define command { command_name handle-master-host-event command_line $USER1$/eventhandlers/handle-master-host-event $HOSTSTATE$ $HOSTSTATETYPE$ $HOSTATTEMPT$ } define command { command_name handle-master-proc-event command_line $USER1$/eventhandlers/handle-master-proc-event $SERVICESTATE$ $SERVICESTATETYPE$ $SERVICEATTEMPT$ }
define command { command_name check_nrpe command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$ }
# vim /usr/local/nagios/etc/localhost.cfg define host { use critical-host-template host_name 10.0.100.125 alias nagios master address 10.128.0.11 event_handler handle-master-host-event }
define service { use critical-service-template host_name 10.0.100.125 service_description NAGIOS check_command check_nrpe!check_nagios event_handler handle-master-proc-event }
# vim /usr/local/nagios/etc/nagios.cfg enable_notifications=0 |
告警通知将只能由master服务器发送,因为master一直启用了通知。但是,如果master出现故障或者其Nagios进程停止工作,事件处理程序就被调用,并且slave服务器上的通知将被启用。当master或Nagios的服务正常时,slave的通知将再次被禁用。两者之间持续不间断的检查状态的变化。因此,就实现了一个简单的一种冗余。在使用时,需要进行彻底测试,以确保两者在故障时能顺利切换并发送通知。
handle-master-host-event宏变量解释:
$HOSTSTATE$: 主服务器状态
$HOSTSTATETYPE$: 状态是SOFT 还是HARD
$HOSTATTEMPT$: 尝试检测次数,最大值为max_check_attempts值。
handle-master-proc-event宏变量解释:
$SERVICESTATE$: 主服务器上的nagios进程的状态
$SERVICESTATETYPE$: 服务的状态是SOFT 还是HARD
$SERVICEATTEMPT$: 尝试检测次数,最大值为max_check_attempts值
一般是当主机或服务进入 HARD CRITICAL状态时,事件处理程序调用的辅助脚本来进行下一步要进行的操作。
如果网络带宽紧张的情况下,可以通过事件处理程序来开启或禁止slave进行主机或服务的检测,在这种情况下,需要将master和slave直接的数据进行同步。