邮政Zabbix部署方案
1、架构设计
考虑到ECS的数量多和扩展性问题,中间使用proxy代理。这样既能减轻server端的性能负载问题,又便于扩展,需要扩展ECS监控,可以基于server端新建proxy,子系统的监控通过proxy处理之后再发送给server端。Zabbix Proxy是实现Zabbix分布式监控的重要组成部分,是连接Zabbix Agent和Zabbix Server的“中间人”、“连接器”、“路由器”等。Zabbix Proxy将来自Agent的数据推送(push)到Zabbix Server或者由Zabbix Server来拿取(fetch)。
与Zabbix Server相比Zabbix Proxy不需要使用或安装GUI(Graphical User Interface、Web Interface),也不需要本地管理(Local administration),具有轻量、易于维护的特点。与Zabbix Server还不相同的就是Zabbix Proxy不生成任何用户通知,所有的用户通知都是由Zabbix Server完成的。
Zabbix Proxy默认服务端口与Zabbix Server相同(TCP:10051),也需要数据库支持。Agent端占用端口(TCP:10050)
2、邮政实际状况
邮政生产环境上一共有子系统16个,大约一共2500台左右的ECS,涉及到监控数量比较多,并且每个子系统的每台ECS的环境也不能保证完全相同,所以计划采用分批监控的方式进行
3、实际方案的部署
1)server端:
新建一台ECS,保证能够跟所有的ESC相通,存储为200G
a)LNMP环境的配置
b)Zabbix_server的软件配置与安装
c)Yum公共源的搭建(可以使用邮政的yum源,后来跟运维了解到)
d)Mariadb数据库的搭建
数据库硬盘空间大小估计:
历史记录,事件记录,趋势数据等数据保存时间为1个月,ECS数目为2500,每台的监控项为20,每60秒刷新一次,一条记录大约占50字节
需要的硬盘空间大约110G左右,所以计划用200G的硬盘
估计依据:http://www.ttlsa.com/zabbix/zabbix-database-space-6-ttlsa/
2)Proxy代理端:
新建一台ECS,同server端一样,存储为200G
计划500台ECS部署一个proxy代理,观察server和proxy的负载情况,再根据实际情况增加或减少每个proxy下ECS的数量
a)Mariadb数据库的搭建
b)Zabbix_proxy的搭建
Proxy为主动模式:主动去请求server端和agent端
zabbix_server端当主机数量过多的时候,由Server端去收集数据,Zabbix可能会出现严重的性能问题:
1、当被监控端到达一个量级的时候,Web操作很卡,容易出现502
2、图层断裂
3、开启的进程(Pollar)太多,即使减少item数量,以后加入一定量的机器也会有问题
所以下面主要往两个优化方向考虑:
1、添加Proxy节点或者Node模式做分布式监控
2、调整Agentd为主动模式
根据邮政的实际情况选择采用proxy代理主动模式
配置要点:
启动服务顺序:配置Proxy或Agent时要先在Web中配置Zabbix Server,后启动Proxy或Agent服务;
配置顺序:先配置Server后配置Proxy,最后配置Agent
3)agent端:
涉及到的agent端的数量巨大,所以计划采用pssh分批量处理脚本安装的方法。脚本主要实现:agent端本地yum的编辑、zabbix客户端的搭建(yum安装)、客户端zabbix配置文件的修改并且启动zabbix客户端服务。
将脚本的目录通过批量复制到分批的ECS的/tmp目录下,分批执行脚本。
批量执行的问题:1、pssh的使用首先需要配置互信,可以通过脚本将server端与ECS之间配置免密登录,也可以通过跳板机进行pssh的配置,因为跳板机与所有ECS之间是免密登录的(ssh可以直接连接到ECS)2、环境的问题,分批量处理的环境可能有不同,例如Linux系统的版本,安装包的依赖性,这些可以通过脚本找到这些环境出现问题的ECS,进行服务、yum安装的验证,将错误日志导入到一个文件中,针对环境出现问题的ECS分别解决。
4) web页面:
目前主要是对ECS的ping和web进行监控
主机的添加,可以通过批量自动发现机器,发现的条件为zabbix_agent端,然后配置动作,将主机添加到群组,并且链接一个ICMP ping模板。web模板zabbix没有自带,可以通过导入web模板,再链接web模板,或者将web监控在ICMP ping模板上添加。链接ping模板之后就自动监控web。这样的话,就要把需要web监控的ECS和不需要web监控的ECS分开来执行添加ping模板,并且需要监控的ECS还要分别于子系统归类处理。
4、回退方案
回退方案是针对各个模块进行的回退,哪个模块出现问题就回退哪个模块,如果是想要整体进行回退的话,推荐先回退web界面、agent端、proxy端、server端,倒着进行回退。
1)server端
a)对于yum安装的包,可以yum –remove卸载相应的依赖包
b)PHP服务的安装文件在/usr/local/php,直接删除这个目录,PHP服务文件/etc/init.d/php-fpm直接删除
c)NGINX服务的所有文件在/usr/local/nginx,直接删除这个目录
d)MySQL数据库通过yum安装,直接yum remove mariadb-server mariadb
e)Zabbix_server安装在/usr/local/zabbix直接删除这个目录,删除zabbix用户和组 groupdel zabbix、userdel zabbix,在/etc/services删除最后四行zabbix的端口配置,删除zabbix_server的服务文件/etc/init.d/zabbix_*
f)杀死进程 killall zabbix*,killall php ,killall nginx
g)删除本地yum源配置 rm -f /etc/yum.repos.d/local_yum.repo,之前的.repo文件在/etc/yum.repos.d/backup目录里面有备份
2)proxy代理端
a)安装目录在/usr/local/zabbix,之间删除这个目录,删除服务/etc/init.d/zabbix*
b)卸载数据库yum –y remove mariadbserver mariadb
c)杀死进程 killall zabbix_proxy
d)删除本地yum源配置 rm -f /etc/yum.repos.d/local_yum.repo,之前的.repo文件在/etc/yum.repos.d/backup目录里面有备份
3)agent端
客户端的安装过程都在脚本里面:
!/bin/bash
install zabbix-agent script
about files in /tmp/os_zabbix-agent
当前时间戳
log_time=date +%Y-%m-%d_%H:%M:%S
host_ip=ifconfig | grep "^eth0" -A 1 |tail -1 |awk '{print $2}'
获取本机IP判断服务器的信息文件是否存在
touch /tmp/zabbix_agent_install.log
if ! cat /root/monitor/info.conf
>>/dev/null
then
echo -e "${log_time} ${host_ip} can not find /root/monitor/info.conf\nlogout ${host_ip}nnn" >>/tmp/zabbix_agent_install.log
exit
fi
获取本机的信息
ip=cat /root/monitor/info.conf |awk '{print $4}'
natip=cat /root/monitor/info.conf |awk '{print $3}'
ecs_name=cat /root/monitor/info.conf |awk '{print $2}'
搭建本地yum
mkdir /tmp/yum.bak
mv /etc/yum.repos.d/* /tmp/yum.bak/
mv /tmp/os_zabbix-agent/local_yum.repo /etc/yum.repos.d/
yum -y install unixODBC >>/dev/null
判断本地yum是否搭建成功
if ! yum list |grep vim
>>/dev/null
then
echo -e "${log_time} ${host_ip} yum repo is error!\nlogout ${host_ip}\n\n\n" >>/tmp/zabbix_agent_install.log
fi
判断系统版本
redhat_release_num=cat /etc/redhat-release |awk '{print $4}' | awk -F. '{print $1}'
if (( ${redhat_release_num} != 7 ))
then
echo -e "${log_time} ${host_ip} system version is not 7!\nlogout ${host_ip}\n\n\n" >>/tmp/zabbix_agent_install.log
exit
fi
安装zabbix客户端,判断是否安装成功
rpm -ivh /tmp/os_zabbix-agent/zabbix-* >>/dev/null
if (( $? != 0 ))
then
echo -e "${log_time} ${host_ip} rpm -ivh is error!\nlogout ${host_ip}\n\n\n" >>/tmp/zabbix_agent_install
exit
fi
修改zabbix配置文件
mv /etc/zabbix/zabbix_agentd.conf /tmp/yum.bak/
mv /tmp/os_zabbix-agent/zabbix_agentd.conf /etc/zabbix/
sed -i "/ServerActive/a Hostname=${host_ip}" /etc/zabbix/zabbix_agentd.conf
systemctl start zabbix-agent >>/dev/null
systemctl enable zabbix-agent >>/dev/null
a)zabbix-agent取消开机启动,并且删除zabbix配置文件
systemctl disable zabbix-agent
rm –rf /etc/zabbix/
b)卸载zabbix客户端
rpm –e /tmp/os_zabbix-agent/zabbix-*
c)删除本地yum,以及相应的安装文件
yum -y remove unixODBC
rm –f /etc/yum.repos.d/local_yum.repo
mv /tmp/yum.bak/*.repo /etc/yum.repos.d/
d)删除创建的错误日志和备份目录、以及传输的安装文件
rm –f /tmp/zabbix_agent_install.log
rm –rf /tmp/yum.bak
rm –rf /tpm/os_zabbix-agent/
4) web页面
直接删除创建的主机、动作、自动发现、主机群组、以及ICMP ping模板上对应的网络监控。当然,如果server端进行了回退,web页面也就无法显示了。
5、对生产的影响
通过实验的zabbix客户端top命令发现,zabbix客户端对于ECS系统的cpu和内存的影响几乎为0
6、测试测试
7、总结分析
由于server端已经搭建完成,之后搭建的难点在:
1、agent端的部署,ECS的环境不一样,系统的版本不一样,只通过脚本很难实现将全部的ECS部署好agent端,这就需要手动进行客户端的搭建。
2、数据库的性能问题,随着ECS数量的增加,数据库需要扩容和优化,可以将数据库迁移到RDS上,方便管理
3、server端的容量问题,ECS数量增加,监控项的增加,需要的磁盘容量就增加
4、yum源的问题,由于自己搭建的yum源是centos7的版本的,遇到其他版本的需要单独处理,经过查找发现所有ECS的非centos7的系统不超过10台。遇到centos其他版本的可以使用邮政的yum源(一开始不清楚邮政有5/6/7的yum源),Redhat版本的就需要单独处理了
5、proxy端的性能问题,计划每500台ECS搭建一个proxy代理,再根据实际负载情况修改ECS的数量
八、出现的问题汇总:
1、在proxy端或者server端指定RDS的时候,需要输入RDS的ip,并且端口号不是默认的3306,而是对应的RDS的实际端口号。
解决方法:在server和proxy配置文件中指定实际的端口号
2、搭建完客户端之后发现server的日志有报错,大体意思就是server端通过端口连接客户端失败
解决方法:将server端和proxy端的配置文件中默认端口对应的ip由0.0.0.0改为本机的ip地址。自己的理解是0.0.0.0默认的端口对应所有的ip,而不是邮政的内网ip。
3、注意不同vpc下面的ECS是不相通的,所以proxy要跟server端在同一个proxy下面
4、可以在proxy端或者server端搭建一个agent客户端用来通过模板检测proxy或者server的性能情况,通过模板发现了zabbix busy discover processes 跟zabbix busy icmp pinger processes 两个参数已经接近100%
解决方法:ping和discover进程太忙,于是修改配置文件,将Start discovers =10,Start pingers=20,参数就降下来了。
5、在编译安装proxy遇到了报错,mysql library not found
解决方法:缺少相应的包mysql-devel,可以通过yum安装,但是在安装过程中发现与系统的版本不一致,于是直接将mariadb*卸载掉重新安装。此类问题都是缺少相应的依赖包,网上搜索找到对应的包安装就可以
6、安装客户端的时候注意把客户端的serveractive指定为新的proxy,所以批量安装客户端的时候需要修改serveractive为对应的proxy的ip。
7、添加完agent的ICMP ping监控之后,发现没有显示出数据,查看proxy的日志发现没有ping对应的工具
解决方法:安装fping安装包
8、在给proxy的RDS导数据的时候一定只要导入schema.sql文件,导入其他的文件会报错