一、部署说明
本次部署原本调用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
[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
[root@localhost ~]# yum remove php* -y
[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
[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,本实验不指定。


mysql> grant all on *.* to slave@"%" identified by "123456";
其中all代表所有权限
%代表除本机外所有ip的主机均可连接,若本机连接需要把%改为localhost
mysql> flush privileges;
刷新权限

在master上执行
mysql> show master status;

记录file及position
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;
注意以上红色字体,必须按照实际填写

mysql> slave start;

在slave上查看同步状态
mysql> show slave status\G
如果如下两行为yes,代表主从同步成功。

3.3 安装zabbix server环境及web发布目录
[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
[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与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/images.sql
再导入images包
mysql> source /tmp/zabbix-3.2.6/database/mysql/data.sql
最后导入data包
至此zabbix使用的sql包完全导入。
[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,如果是数据库在本地不会报这个错误。
解决办法有两种:
编译完成会提示如下图:

但还是建议先执行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主配置文件目录

[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 #数据库密码

[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主机上执行
[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里的参数与依赖不符合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服务器地址,此处暂不填写,后面会报错,后面处理


注意此处由于我实现给发布目录赋予了写入权限,所以不会报如下图错误:

遇此错误是因为该路径没有写入权限,可以下载图中提示的文件,然后上传到相应目录即可。
进入系统遇到如下错误

这是由于zabbix与web 发布软件Apache不在一个服务器导致,需要求该发布目录中一下文件

修改$ZBX_SERVER后跟zabbix服务器ip

重启Apache、zabbix服务端

至此全部部署完成。
3.5 zabbix邮件报警
进入管理à报警媒介类型àEmail

设置发件服务器信息,最后点击更新;
请您注册登录超级码客,加载全部码客文章内容... |