Zabbix部署及邮件报警
(zabbix、mysql-master、mysql-slave、LAP)
楓城浪子原创,转载请标明出处,侵权必究!
更多技术博文请见个人博客:https://fengchenglangzi.000webhostapp.com
微信bh19890922
QQ445718526、490425557
一、部署说明
本次部署原本调用5台虚拟机,详情如下:
192.168.8.134–NFS-ZABBIX-SERVER-WEB(用于存放LAP发布目录以及zabbix服务器端)
192.168.8.135—LAP(用于安装Apache以及PHP)
192.168.8.136—MYCAT(用于做mysql读写分离)
192.168.8.137–MYSQL-MASTER(mysql主库)
192.168.8.137–MYSQL-SLAVE(mysql从库)
注:由于笔者试图用mycat作为中间件来使mysql读写分离,但由于zabbix连接mycat一直连接错误,所以最后放弃使用mycat,zabbix直接连接mysql-master,后续在研究!
若文章中命令复制到CLI中执行出错,请手动输入一遍,命令是没问题,可能是格式问题。
二、部署拓扑
三、详细部署步骤
3.1 安装LAP环境(Apache发布目录位于zabbix主机的/data/upload,使用nfs挂载到Apache主机,nfs搭建请查看我其他文档,这里不赘述)
[root@localhost ~]# yum install httpd httpd-devel php php-devel php-mysql –y
注意此处安装的为php5.3,由于Zabbix3.2+ PHP版本需要使用PHP5.4.0版本,请将本机PHP版本升级至5.4.0+,PHP5.3升级至PHP5.6
更新yum源,如果是centos7就使用7的yum源
[root@localhost ~]# rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm
[root@localhost ~]# rpm -Uvh https://mirror.webtatic.com/yum/el6/latest.rpm
移除之前安装的PHP
[root@localhost ~]# yum remove php* -y
安装新版本PHP
[root@localhost ~]# yum install php56w.x86_64 php56w-cli.x86_64 \ php56w-common.x86_64 php56w-gd.x86_64 php56w-ldap.x86_64 \ php56w-mbstring.x86_64 php56w-mcrypt.x86_64 php56w-mysql.x86_64 php56w-pdo.x86_64 -y
3.2 部署mysql主从
3.2.1 Mysql主从原理
MySQL 主从复制原理剖析
Mysql主从同步其实是一个异步复制的过程,要实现复制首先需要在master上开启bin-log日志功能,整个过程需要开启3个线程,分别是Master开启IO线程,slave开启IO线程和SQL线程。
在从服务器执行slave start,从服务器上IO线程会通过授权的用户连接上master,并请求master从指定的文件和位置之后发送bin-log日志内容。
Master服务器接收到来自slave服务器的IO线程的请求后,master服务器上的IO线程根据slave服务器发送的指定bin-log日志之后的内容,然后返回给slave端的IO线程。(返回的信息中除了bin-log日志内容外,还有本次返回日志内容后在master服务器端的新的binlog文件名以及在binlog中的下一个指定更新位置。)
Slave的IO线程接收到信息后,将接收到的日志内容依次添加到Slave端的relay-log文件的最末端,并将读取到的Master端的 bin-log的文件名和位置记录到master.info文件中,以便在下一次读取的时候能够清楚的告诉Master”我需要从某个bin-log的哪 个位置开始往后的日志内容,请发给我”;
Slave的Sql线程检测到relay-log中新增加了内容后,会马上解析relay-log的内容成为在Master端真实执行时候的那些可执行的内容,并在自身执行。
3.2.2安装mysql
安装mysql环境,master和slave都执行
[root@localhost ~]# yum install mysql-server mysql-devel mysql-libs –y
启动mysql数据库,此时数据会自动初始化
[root@localhost ~]# service mysqld restart
master修改my.cnf文件
[root@localhost ~]# vim /etc/my.cnf
在文件[mysqld]中添加如下内容:
log-bin=mysql-bin 开启binlog功能
server-id = 137 指定服务器的id,通常id指定为ip地址的最后一位
若需要指定数据目录请修改datadir=/var/lib/mysql,创建目录后需要给mysql授权,最好是把用户和组指定给mysql,本实验不指定。
slave修改my.cnf文件
在master上面给slave授权
mysql> grant all on *.* to slave@"%" identified by "123456";
其中all代表所有权限
%代表除本机外所有ip的主机均可连接,若本机连接需要把%改为localhost
mysql> flush privileges;
刷新权限
重启master及slave
查看mysql-bin及Position
在master上执行
mysql> show master status;
记录file及position
在slave服务器指定master IP和同步的mysql-bin及pos点
mysql> change master to master_host='192.168.8.137',master_user='slave',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=106;
注意以上红色字体,必须按照实际填写
启动slave
mysql> slave start;
在slave上查看同步状态
mysql> show slave status\G
如果如下两行为yes,代表主从同步成功。
3.3 安装zabbix server环境及web发布目录
下载zabbix源码包,本实验使用3.2.6
[root@localhost tmp]# wget https://sourceforge.net/projects/zabbix/files/ZABBIX%20Latest%20Stable/3.2.6/zabbix-3.2.6.tar.gz
安装依赖包
[root@localhost tmp]# yum -y install curl curl-devel net-snmp net-snmp-devel perl-DBI
创建zabbix用户信息
[root@localhost tmp]# groupadd zabbix [root@localhost tmp]# useradd -g zabbix zabbix [root@localhost tmp]# usermod -s /sbin/nologin zabbix
解压
[root@localhost tmp]# tar -zxvf zabbix-3.2.6.tar.gz
进入到zabbix目录
[root@localhost tmp]# cd zabbix-3.2.6
把zabbix的SQL包导入mysql-master
由于zabbix与mysql是分开部署,故在zabbix服务器上安装mysql客户端并远程登陆到mysql-master上导入sql包。
[root@localhost tmp]# yum install mysql –y
安装mysql客户端
[root@localhost]# mysql -h 192.168.8.137 -uslave -p123456
此处使用之前创建的slave账户,若为安全着想可以单独创建管理账户,由于我之前slave账户给的all权限,故此次直接使用,后面不加端口默认使用3306
mysql> create database zabbix charset=utf8;
创建zabbix数据库并指定编码类型为utf8
mysql> grant all on zabbix.* to zabbix@"%" identified by '123456';
创建zabbix账户给zabbix使用,但注意如下报错:
此处是因为我在zabbix主机使用slave登陆的,所以现在需要直接到mysql-master上面使用以上命令来授权并刷新权限。
现在数据库与授权都做好了,可以开始导入sql包了
找到sql包
如上图所示,zabbix自带的有多种数据库包,当前我们直接使用mysql的即可;
进入到mysql程序中;
mysql> use zabbix;
进入zabbix库
mysql> source /tmp/zabbix-3.2.6/database/mysql/schema.sql
先导入schema包
mysql> source /tmp/zabbix-3.2.6/database/mysql/p_w_picpaths.sql
再导入p_w_picpaths包
mysql> source /tmp/zabbix-3.2.6/database/mysql/data.sql
最后导入data包
至此zabbix使用的sql包完全导入。
开始编译安装zabbix(源码安装三步骤)
[root@localhost zabbix-3.2.6]# ./configure --prefix=/usr/local/zabbix/ --enable-server --enable-agent --with-mysql --enable-ipv6 --with-net-snmp --with-libcurl
注:全新服务器安装会报如下错误,是因为没有安装gcc
[root@localhost zabbix-3.2.6]# yum install gcc –y
安装GCC后再次编译还会遇到一个问题如下图:
提示找不到mysql library,如果是数据库在本地不会报这个错误。
解决办法有两种:
修改—with-mysql为–with-mysql=/usr/local/mysql55
安装mysql-devel:yum install mysql-devel –y
编译完成会提示如下图:
但还是建议先执行make
[root@localhost zabbix-3.2.6]# make –j8 && make install –j8
软连接服务程序到/usr/local/sbin/下
[root@localhost /]# ln -s /usr/local/zabbix/sbin/zabbix_* /usr/local/sbin/
进入到zabbix主配置文件目录
修改主配置文件zabbix_server.conf
[root@localhost etc]# cp zabbix_server.conf zabbix_server.conf.bak
先备份然后修改
把主配置文件内容修改为如下内容:
LogFile=/tmp/zabbix_server.log log #存放路径 DBHost=192.168.8.137 #数据库master地址 DBName=zabbix #数据库名字 DBUser=zabbix #数据库用户名 DBPassword=123456 #数据库密码
cp zabbix_server启动脚本至/etc/init.d/目录并授权
[root@localhost zabbix-3.2.6]# cp misc/init.d/tru64/zabbix_server /etc/init.d/zabbix_server
注:若上述启动文件不可用,可以cp如下位置文件
cp /zabbix-2.2.6/misc/init.d/fedora/core/zabbix_server /etc/init.d/
讲zabbix web代码拷贝到Apache发布目录
cp -a /root/zabbix-3.2.6/frontends/php/* /data/
修改PHP时区
[root@localhost ~]# sed -i '/date.timezone/i date.timezone = PRC' /etc/php.ini
以上命令在LAP主机上执行
启动zabbix server
[root@localhost data]# /etc/init.d/zabbix_server restart
查看zabbix启动状态
root@localhost data]# ps -ef | grep zabbix
[root@localhost data]# netstat -anlp | grep zabbix
访问Apache主页
至此整体环境已经搭建完成。
3.4 安装配置zabbix web
解决PHP参数与依赖报错
点击下一步会遇到如下报错,这是由于PHP里的参数与依赖不符合zabbix要求
需要在LAP主机上安装并修改PHP主配置文件,若不安装zabbix会确实部分功能
[root@localhost html]# yum install php56w-mbstring php56w-bcmath php56w-gd php56w-xml –y [root@localhost html]# yum install gd gd-devel -y
以上是安装依赖
[root@localhost html]# sed -i '/post_max_size/s/8/16/g;/max_execution_time/s/30/300/g;/max_input_time/s/60/300/g;s/\;date.timezone.*/date.timezone \= PRC/g;s/\;always_populate_raw_post_data/always_populate_raw_post_data/g' /etc/php.ini
以上是利用sed修改PHP主配置文件,sed用法不赘述
安装修改完成后,刷新页面
填写数据库信息
填写监控信息
若zabbix与Apache不在一个服务器 host可以填写zabbix服务器地址,此处暂不填写,后面会报错,后面处理
最后核对信息
安装完成
注意此处由于我实现给发布目录赋予了写入权限,所以不会报如下图错误:
遇此错误是因为该路径没有写入权限,可以下载图中提示的文件,然后上传到相应目录即可。
点击完成,登入系统,默认用户名为admin,密码为zabbix
解决Zabbix server is not running
进入系统遇到如下错误
这是由于zabbix与web 发布软件Apache不在一个服务器导致,需要求该发布目录中一下文件
修改$ZBX_SERVER后跟zabbix服务器ip
重启Apache、zabbix服务端
至此全部部署完成。
3.5 zabbix邮件报警
设置发件信息
进入管理à报警媒介类型àEmail
设置发件服务器信息,最后点击更新;
选择接受人信息,这里选择admin就可以;
选择报警媒介,点击添加;
填写收件人邮箱,也可以根据需求设置时间和报警级别,通常全选,点击添加;(可添加多人)
点击更新即可;
点击配置à动作选择事件源”触发器”,可以新建也可以使用默认的;
选择动作,添加触发条件,这里使用”触发器示警度”+”大于等于”+”警告”,代表警告级别以上就触发报警,点击添加;
点击操作,修改默认操作步骤时间为60,再点击新的;
点击发送到用户的添加,然后会弹出右边对话框,选择admin(若收件人不在admin里面则选择自己定义的);
此页可不修改,也可根据自己需求修改,最后点击更新;
至此,邮件告警配置完成,以下为测试告警邮件。