四行shell脚本实现zabbix_server的高可用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了四行shell脚本实现zabbix_server的高可用相关的知识,希望对你有一定的参考价值。

场景模拟:

高可用的重要性

  1. 一家中小型企业需要使用zabbix_server监控大量设备,某天,一位新来的员工操作服务器失误,导致zabbix_server服务器系统奔溃无法开机。这时候zabbix_server服务中断了,这家企业的所有设备都无法进行监控,假如此时,监控的设备中有重要的业务主机,出现了告警,但是由于zabbix_server无法采集数据,导致运维人员不知道业务主机出现了一个严重的告警,业务也受到了影响。最后给企业带来巨大的经济损失。
    名词解析:
    什么是高可用?
    高可用技术简单的说就是,保障业务在出现故障的时候,进行快速的切换,从而不影响到业务的正常运转。
    什么是VIP(虚拟IP)?
    高可用技术离不开VIP,高可用的原理其实就是用户通过VIP访问业务,而VIP会映射到对应的服务器IP。
    技术图片

默认情况下,客户端通过192.168.74.150的IP映射到的192.168.74.149这台主zabbix_server的服务,如果主zabbix_server服务器的关机了,那么客户端继续使用192.168.74.150的ip就会映射到备用zabbix_server(192.168.74.148)这台服务。

准备内容:
安装两台zabbix_server,一台数据库服务器(主zabbix_server和备zabbix_server的数据都保存在这台数据库上)
备:zabbix_server:192.168.74.148
主:zabbix-server:192.168.74.149
一台数据库服务器:192.168.74.128.
本实验的内容需要利用逻辑网卡作为VIP(192.168.74.150)

第一步:在两台zabbix_server服务器上创建逻辑网卡,即vip
两台zabbix_server服务器进入/etc/sysconfig/network-script目录
Cd /etc/sysconfig/network-scripts
技术图片

拷贝当前服务器网卡文件,我的网卡是ifcfg-ens33。
Cp ifcfg-ens33 ifcfg-ens33:0
技术图片
编辑ifcfg-ens33:0文件(两台zabbix_server的ifcfg-ens33:0文件中,ip都改为192.168.74.150作为虚拟ip)
技术图片

现在任意一台zabbix_server上启动ifcfg-ens33:0,确认网卡是否可以启动。
注意,不可以同时在两台zabbix_server启用ifcfg-ens33:0,否则会出现ip冲突。
逻辑网卡启动命令是ifup 网卡名,使用ifup命令,只重启新增的网卡即可,最好不要用systemctl network restart命令重启全部网卡,一旦这条命令导致网卡启动失败,将会导致无法远程服务器。
Ifup ifcfg-ens33:0
技术图片

第二步:验证是否可以通过vip(192.168.74.150),访问到主zabbix_server或者备zabbix_server的ip
在window主机上安装agent,把agent配置文件的server_ip指向192.168.74.150这个虚拟ip,确认是否可以通过192.168.74.150映射到192.168.74.149这个zabbix_server服务
技术图片
技术图片

此时已经可以通过虚拟IP(192.168.74.150)访问到192.168.74.149的zabbix_server。
但同时出现了一个问题,如图,所有的监控主机ZBX出现爆红
技术图片

为了解决上面的问题,需要修改所有监控主机的zabbix_agent.conf的server_ip都指向192.168.74.150
技术图片

修改完agent的配置,一定要重启zabbix_agent
最重要的一步,修改两台zabbix_server.conf里面的参数Source指定为虚拟ip
192.168.74.150,否则界面的ZBX会出现爆红
若没有修改sourceIP,仍然会无法解决的下面情况
技术图片

修改zabbix_server.conf文件,SourceIP修改为虚拟ip,192.168.74.150
技术图片

重启zabbix_server
Systemctl restart zabbix_server
以上配置完成后,界面的监控主机恢复正常
技术图片

主机的数据也正常
技术图片

下面开始编写shell脚本,实现主zabbix_server(192.168.74.149)服务器挂掉后,仍然可以通过192.168.74.150继续访问备用zabbix_server(192.168.74.148)
在192.168.74.149和192.168.74.148两台服务器上编写脚本check_alive
技术图片

并在两台服务器上crontab –e的定时任务中加入这两个脚本。执行这两个脚本的时间由用户自定义。本人暂时以60s一次执行这个检测脚本。记住要给这两个脚本可执行的权限
之所以设置60s执行一次脚本,是为了待会演示关闭192.168.74.149这台虚拟机,然后界面会无法访问。接着等待60s,备用zabbix_server的192.168.74.148就会启用vip,界面就可以继续访问zabbix_server。正常来说,设置为3-10s比较合适,这样才能做到快速切换
Chmod o+x 755 check_alive.sh
记住一定要用绝对路径,否则可能会报错
技术图片

最终效果演示

关闭主zabbix_server(192.168.74.149虚拟机)
此时vip在,主zabbix-server上
技术图片
关闭主zabbix_server(192.168.74.149)后,备zabbix_server就无法ping通,vip192.168.74.150了。
技术图片
技术图片
等待60s,VIP(192.168.74.150会出现在备用zabbix_server(192.168.74.148)
技术图片

Vip切换成功,刷新界面看一下能否访问zabbix_server
技术图片
界面访问正常
技术图片
技术图片

主zabbix_server关机了,所以无法获取数据。
本案例可以确保zabbix_server服务进行高可用。但有一个缺点,就是两个zabbix_server服务使用的是同一个数据库服务器,如果这个数据库服务器挂掉。同样会无法获取数据。所以最好也做一下数据库的高可用。

以上是关于四行shell脚本实现zabbix_server的高可用的主要内容,如果未能解决你的问题,请参考以下文章

如何在zabbix执行远程主机的脚本或指令

Zabbix的2个使用小案例

使用shell脚本在指定模式后将多行插入文件

linux脚本新加一行(插入变量的值,和一段字符)的问题?

Zabbix_server执行window脚本出现中文乱码如何解决

Zabbix_server执行window脚本出现中文乱码如何解决