vlambda博客
学习文章列表

Zabbix 干货二则:四行shell脚本实现Zabbix_server的高可用等 | 运维进阶

本文包括:四行shell脚本实现Zabbix_server的高可用,Zabbix_server执行window脚本出现中文乱码如何解决

【作者】刘俊源,任职于广州九一乐维。


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


场景模拟:

高可用的重要性

一家中小型企业需要使用zabbix_server监控大量设备,某天,一位新来的员工操作服务器失误,导致zabbix _server 服务器系统奔溃无法开机。这时候zabbix _server 服务中断了,这家企业的所有设备都无法进行监控,假如此时,监控的设备中有重要的业务主机,出现了告警,但是由于zabbix _server 无法采集数据,导致运维人员不知道业务主机出现了一个严重的告警,业务也受到了影响。最后给企业带来巨大的经济损失。

名词解析:

什么是高可用?

高可用技术简单的说就是,保障业务在出现故障的时候,进行快速的切换,从而不影响到业务的正常运转。

什么是VIP(虚拟IP)?

高可用技术离不开VIP,高可用的原理其实就是用户通过VIP访问业务,而VIP会映射到对应的服务器IP。

Zabbix 干货二则:四行shell脚本实现Zabbix_server的高可用等 | 运维进阶

默认情况下,客户端通过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 目录

C d /etc /sysconfig/network-scripts

Zabbix 干货二则:四行shell脚本实现Zabbix_server的高可用等 | 运维进阶

拷贝当前服务器网卡文件,我的网卡是ifcfg -ens33 。

Cp ifcfg-ens33 ifcfg-ens33:0

Zabbix 干货二则:四行shell脚本实现Zabbix_server的高可用等 | 运维进阶

编辑ifcfg -ens33:0 文件(两台zabbix _server 的 ifcfg-ens33:0文件中,ip都改为192.168.74.150作为虚拟ip)

Zabbix 干货二则:四行shell脚本实现Zabbix_server的高可用等 | 运维进阶

现在任意一台zabbix _server 上启动ifcfg -ens33:0 ,确认网卡是否可以启动。

注意,不可以同时在两台zabbix _server 启用ifcfg -ens33:0 ,否则会出现ip冲突。

逻辑网卡启动命令是if up 网卡名,使用ifup命令,只重启新增的网卡即可,最好不要用system ctl network restart 命令重启全部网卡,一旦这条命令导致网卡启动失败,将会导致无法远程服务器。

If up ifcfg -ens33:0

Zabbix 干货二则:四行shell脚本实现Zabbix_server的高可用等 | 运维进阶

第二步:验证是否可以通过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服务

Zabbix 干货二则:四行shell脚本实现Zabbix_server的高可用等 | 运维进阶

Zabbix 干货二则:四行shell脚本实现Zabbix_server的高可用等 | 运维进阶

此时已经可以通过虚拟IP(192.168.74.150)访问到192.168.74.149的zabbix _server 。

但同时出现了一个问题,如图,所有的监控主机ZBX出现爆红

Zabbix 干货二则:四行shell脚本实现Zabbix_server的高可用等 | 运维进阶

为了解决上面的问题,需要修改所有监控主机的zabbix agent.conf 的server ip 都指向192.168.74.150

Zabbix 干货二则:四行shell脚本实现Zabbix_server的高可用等 | 运维进阶

修改完agent的配置,一定要重启zabbix _agent

最重要的一步,修改两台zabbix _server .conf里面的参数Source指定为虚拟ip

192.168.74.150 ,否则界面的ZBX会出现爆红

若没有修改source IP, 仍然会无法解决的下面情况

Zabbix 干货二则:四行shell脚本实现Zabbix_server的高可用等 | 运维进阶

修改zabbix _server.conf 文件,Source IP 修改为虚拟ip ,192.168.74.150

Zabbix 干货二则:四行shell脚本实现Zabbix_server的高可用等 | 运维进阶

重启zabbix _server

Systemctl restart zabbix_server

以上配置完成后,界面的监控主机恢复正常

Zabbix 干货二则:四行shell脚本实现Zabbix_server的高可用等 | 运维进阶

主机的数据也正常

Zabbix 干货二则:四行shell脚本实现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

Zabbix 干货二则:四行shell脚本实现Zabbix_server的高可用等 | 运维进阶

并在两台服务器上crontab –e 的定时任务中加入这两个脚本。执行这两个脚本的时间由用户自定义。本人暂时以60s一次执行这个检测脚本。记住要给这两个脚本可执行的权限

之所以设置60s执行一次脚本,是为了待会演示关闭192.168.74.149这台虚拟机,然后界面会无法访问。接着等待60s , 备用zabbix _server 的192.168.74.148就会启用vip,界面就可以继续访问zabbix _server 。正常来说,设置为3-10s比较合适,这样才能做到快速切换

C hmo d o+x 755 check_alive.sh

记住一定要用绝对路径,否则可能会报错

Zabbix 干货二则:四行shell脚本实现Zabbix_server的高可用等 | 运维进阶

最终效果演示

关闭主zabbix_server(192.168.74.149虚拟机)

此时vip在,主zabbix-server上

Zabbix 干货二则:四行shell脚本实现Zabbix_server的高可用等 | 运维进阶

关闭主zabbix_server(192.168.74.149)后,备zabbix _server 就无法ping通,vip 192.168.74.150 了。

Zabbix 干货二则:四行shell脚本实现Zabbix_server的高可用等 | 运维进阶

Zabbix 干货二则:四行shell脚本实现Zabbix_server的高可用等 | 运维进阶

等待60s ,VIP(192.168.74.150 会出现在备用zabbix _server (192.168.74.148 )

Zabbix 干货二则:四行shell脚本实现Zabbix_server的高可用等 | 运维进阶

Vip切换成功,刷新界面看一下能否访问zabbix _server

Zabbix 干货二则:四行shell脚本实现Zabbix_server的高可用等 | 运维进阶

界面访问正常

Zabbix 干货二则:四行shell脚本实现Zabbix_server的高可用等 | 运维进阶

Zabbix 干货二则:四行shell脚本实现Zabbix_server的高可用等 | 运维进阶

主zabbix _server 关机了,所以无法获取数据。

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

原文地址:https://www.talkwithtrend.com/Article/248063


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


场景分析:

A企业员工啊旺在zabbix _server 上,执行了一个通过agent调用远程window主机脚本的操作,但是由于该脚本的输出结果带有中文,啊旺在zabbix _server 的界面看到的内容是一串乱码字符,他根本不知道远程脚本是否执行成功。于是他想把脚本的输出结果改成英文提示success或者error。但由于该脚本不是由啊旺编写的。所以他不知道应该修改脚本的那个位置,才能使显示为英文。因此,本文的目的就是为了解决,zabbix_server调用window的远程脚本带有中文的显示乱码问题。

第一步:编写一个window上输出中文的bat脚本

Zabbix 干货二则:四行shell脚本实现Zabbix_server的高可用等 | 运维进阶

在window服务器上执行bat脚本是否可以输出结果

Zabbix 干货二则:四行shell脚本实现Zabbix_server的高可用等 | 运维进阶

Window主机上执行bat脚本,结果正常输出。

第二步:在zabbix _server 上创键执行该文件的脚本

Zabbix 干货二则:四行shell脚本实现Zabbix_server的高可用等 | 运维进阶

因为该脚本是window上的脚本,所以要选择执行在zabbix客户端

Zabbix 干货二则:四行shell脚本实现Zabbix_server的高可用等 | 运维进阶

在脚本存放的主机上执行该脚本

Zabbix 干货二则:四行shell脚本实现Zabbix_server的高可用等 | 运维进阶
Zabbix 干货二则:四行shell脚本实现Zabbix_server的高可用等 | 运维进阶

执行后的结果,如下图,中文显示乱码,数字显示正常(英文也显示正常)

Zabbix 干货二则:四行shell脚本实现Zabbix_server的高可用等 | 运维进阶

第三步:编写转码的bat脚本实现,中文的正常输出

文件的路径要用绝对值,否则调用的时候会出现报错

Zabbix 干货二则:四行shell脚本实现Zabbix_server的高可用等 | 运维进阶

第一行:把test .bat 脚本执行结果的内容输出到 1. txt文件

第二行,把test .txt 这个文件转码为utf 8 的格式

(注意,第二行,源文件名不能和转码后的名字一样,否则会使转码后的文件为空)

即不能使用 powershell -c "Get-Content F:桌面C盘1.txt|Out-File -Encoding utf8 F:桌面C盘1.txt"

第三行是查看test .bat 脚本执行的就够

第四,五行删除刚才生成的文件

重新修改执行window脚本

Zabbix 干货二则:四行shell脚本实现Zabbix_server的高可用等 | 运维进阶
Zabbix 干货二则:四行shell脚本实现Zabbix_server的高可用等 | 运维进阶

Ok , 大功告成。中文显示正常。

觉得本文有用,请 转发 或点击 “在看” ,让更多同行看到


 资料/文章推荐:



http://www.talkwithtrend.com/Topic/3937


下载 twt 社区客户端 APP

Zabbix 干货二则:四行shell脚本实现Zabbix_server的高可用等 | 运维进阶

或到应用商店搜索“twt”