[TOC]
(1)项目需求
实现 zabbix/数据库 (宕机自动切换到从)高可用架构;实现 zabbix-proxy 分布式代理接入;实现 zabbix 的邮件与钉钉预警;实现 zabbix 的数据可视化利用grafana工具;(2)项目环境 Zabbix主(Master) :CentOS Linux release 7.6.1810 (Core) Zabbix备(Slave) :CentOS Linux release 7.6.1810 (Core) Zabbix-proxy(分布式) Zabbix-agent(4台-主/从),其中宿主机windows7一台与proxyagent主机一台
我们这里将在Zabbix主(Master)中安装zabbix-server以及zabbix-agent和grafana可视化; 在zabbix备(slave)中安装zabbix-server/agent以及用docker-compose实现安装的docker-zabbix-proxy; 我将我的宿主机/matser/slave/proxyagent机器连接到docker-zabbix-proxy代理中;
基础环境搭建:
#关闭防火墙与selinux并且同步主从机器时间 #Centos7更改主机名称 Zabbix(备)$hostname Szabbix #或者采用/etc/hostname(需要重启生效) Zabbix(主)$hostname Mzabbix #设置网络别名 $vim /etc/hosts 92.168.1.98 Szabbix 192.168.1.99 Mzabbix 192.168.1.100 proxagent #192.168.1.101 agent 192.168.1.200 zabbix.weiyigeek.com 192.168.56.101 Windows7 #高可用的VIP漂移IP enp0s3: 192.168.1.200 enp0s9: 192.168.56.200 #网络环境 Zabbix主: 1. enp0s3 - 192.168.1.98 2. ens0s9 - 192.168.56.103 #drbd数据传输使用 Zabbix从: 1. enp0s3 - 192.168.1.99 2. ens0s9 - 192.168.56.102 #drbd数据传输使用 3. docker - 172.18.0.2 windows7: 192.168.56.101 proxyagent: 192.168.1.100
(3)项目架构
WeiyiGeek.AWS图
Step1.根据我前面写的磁盘高可用和服务高可用进行安装heartbeat与drbd注意这里是Centos7版本的.(Drbd磁盘格式化是个坑)
[root@Mzabbix/Szabbix]$usermod -G root hacluster #设置heartbeat启动用户加入root附加组(权限)
安装好drbd手动主从切换测试:
#mariadb 修改root用户的密码并设置外部IP连接数据库 mysql> update mysql.user set password=password('System@123') where user='root'; mysql> grant all privileges on *.* to 'root'@'%' identified by "System@123" with grant option; mysql> grant all privileges on zabbix.* to zabbix@'%' identified by 'zabbix'; mysql> grant all privileges on zabbix_proxy.* to zabbix_proxy@'%' identified by 'zabbix'; mysql> flush privileges; #手动切换drbd主从 [root@Mzabbix lib]# umount /var/lib/mysql/ drbdadm secondary data [root@Szabbix lib]# drbdadm primary data mount /dev/drbd0 /var/lib/mysql/ chown -R mysql:mysql /var/lib/mysql/ #防止drbd同步发生改变 service mariadb restart [root@Szabbix lib]$mysql -uzabbix -pzabbix #登录成功 Welcome to the MariaDB monitor. Commands end with ; or g. Your MariaDB connection id is 2 Server version: 5.5.60-MariaDB MariaDB Server MariaDB [(none)]> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | test | +--------------------+
WeiyiGeek.drbd同步ok
(1)heartbeat配置文件 主/备机器共用:
#vim //usr/local/heartbeat/etc/ha.d/authkeys auth 1 1 sha1 zabbix #vim /usr/local/heartbeat/etc/ha.d/ha.cf #egrep -v '^#' ha.cf logfile /var/log/ha-log logfacility local0 keepalive 2 deadtime 15 warntime 5 initdead 30 udpport 694 mcast enp0s3 225.0.0.255 694 1 0 auto_failback on node Mzabbix node Szabbix ping 192.168.1.1 #资源文件 - 修改备份节点脚本源文件 #egrep -v '^#' /usr/local/heartbeat/etc/ha.d/haresources Mzabbix IPaddr::192.168.1.200/24/enp0s3 drbddisk::data Filesystem::/dev/drbd0::/var/lib/mysql::ext4 mysqld zabbix Mzabbix IPaddr::192.168.56.200/24/enp0s9
注意:(坑)需要将/etc/目录中drbddisk复制到heartbeat源码安装的目录之中: cp /etc/ha.d/resource.d/drbddisk /usr/local/heartbeat/etc/ha.d/resource.d/
将下列的脚本加入到/usr/local/heartbeat/etc/ha.d/resource.d/之中
#!/bin/bash #mariadb启动脚本 #防止drbd同步后文件的所属人和所属组发生改变 chown -R mysql:mysql /var/lib/mysql sleep 1 if [ $# -eq 0 ];then echo "Usage:mysqld [start|stop|status]" exit fi #接收参数 action=$1 case $action in "start") service mariadb start ;; "stop") service mariadb stop ;; "status") service mariadb status esac
#!/bin/bash #zabbix服务启动管理脚本 action=$1 if [ $# -eq 0 ];then echo "Usage:zabbix [start|stop|status]" exit fi case $action in "start") systemctl start zabbix-server httpd ;; "stop") systemctl stop zabbix-server httpd ;; "status") systemctl status zabbix-server httpd esac
(2)drbd配置文件:
[root@Szabbix ha.d]# egrep -v '^#' /etc/drbd.d/global_common.conf global { usage-count no; #是否参加DRBD使用者统计,默认是参加 } common { protocol C; startup { degr-wfc-timeout 60; } disk { on-io-error detach; } net { cram-hmac-alg md5; #DRBD同步时使用的验证方式和密码 shared-secret "testdrbd"; } syncer { rate 100M; #主节点和备用节点同步时最大的网络速率 工作中是100M~1000M verify-alg crc32c; #验证算法 } } resource data{ disk { on-io-error detach; #磁盘出现IO错误处理 } #两台主备节点配置 (关键点) on Mzabbix { device /dev/drbd0; #drbd写设备有自己对应的分区 disk /dev/sdb1; #本地数据分区1 address 192.168.56.103:7788; #心跳/数据传输接口 (建议把这个地址设置到hosts中改成心跳线的网卡) meta-disk /dev/sdb2[0]; #meta data数据分区2 } on Szabbix { device /dev/drbd0; disk /dev/sdb1; address 192.168.56.102:7788; meta-disk /dev/sdb2[0]; } }
完成以上配置后执行: $chown -R root:haclient /usr/local/heartbeat/etc/ha.d/
Step 2. 按照[zabbix入门学习]安装与配置Zabbix-server和zabbix-web以及mariadb数据库的安装; 由于我已经安装并配置好主节点zabbix的zabbix-web,我们将一些文件进行中直接复制到从节点中改IP指向我们VIP即可;
#需要将主节点配置文件复制到从节点并进行修改 [root@Mzabbix ~]$ scp /etc/zabbix/zabbix_server.conf root@192.168.1.98:/etc/zabbix/zabbix_server.conf [root@Mzabbix ~]# egrep -v '^#' /etc/zabbix/zabbix_server.conf #egrep -v "^$|^#|^[[:space:]]+#" /etc/zabbix/zabbix_server.conf 推荐方式 LogFileSize=10 LogFile=/var/log/zabbix/zabbix_server.log PidFile=/var/run/zabbix/zabbix_server.pid SocketDir=/var/run/zabbix #漂移的VIP DBHost=192.168.1.200 DBName=zabbix DBUser=zabbix DBPassword=zabbix #DBSocket=/var/lib/mysql/mysql.sock DBPort=3306 SNMPTrapperFile=/var/log/snmptrap/snmptrap.log Timeout=4 #预警脚本 AlertScripTSPath=/usr/lib/zabbix/alterscripts ExternalScripts=/usr/lib/zabbix/externalscripts FpingLocation=/usr/sbin/fping LogSlowQueries=3000 #注意权限的赋值 AllowRoot=1 User=root StatsAllowedIP=192.168.1.0/24
复制主中zabbix-web项目文件到从机 /usr/share/zabbix 和etc/zabbix/web中config的php配置文件到从机:(非常重要:不用重新去初始化zabbix-web)
[root@Mzabbix web]$scp /etc/zabbix/web/zabbix.conf.php root@192.168.1.98:/etc/zabbix/web/ [root@Szabbix web]$chown -R apache:apache zabbix.conf.php #注意权限 #根据需求进行更改 <?php // Zabbix GUI configuration file. global $DB; $DB['TYPE'] = 'MYSQL'; $DB['SERVER'] = '192.168.1.200'; //VIP $DB['PORT'] = '3306'; $DB['DATABASE'] = 'zabbix'; $DB['USER'] = 'zabbix'; $DB['PASSWORD'] = 'zabbix'; // Schema name. Used for IBM DB2 and PostgreSQL. $DB['SCHEMA'] = ''; $ZBX_SERVER = '192.168.1.200'; //从节点设置从即刻 $ZBX_SERVER_PORT = '10051'; $ZBX_SERVER_NAME = 'zabbix.weiyigeek.com'; $IMAGE_FORMAT_DEFAULT = IMAGE_FORMAT_PNG;
WeiyiGeek.zabbix.conf.php
Step 3.安装zabbix-proxy-mysql并将sql文件导入数据中::
$ yum install -y zabbix-proxy-mysql 已安装: zabbix-proxy-mysql.x86_64 0:4.2.1-1.el7 #安装成功后将里面proxy-数据库导入我的mysql数据库中 mysql_db:zabbix_proxy mysql_user:zabbix_proxy mysql_pass:zabbix $zcat /usr/share/doc/zabbix-proxy-mysql-4.2.1/schema.sql.gz | mysql -h192.168.1.200 -u'zabbix_proxy' -p'zabbix' zabbix_porxy
WeiyiGeek.导入成功
Step 4.利用docker-compose构建zabbix-proxy环境
#docker-compose构建配置文件结构 [root@Szabbix zabbix-proxy]# ll -R . .: -rw-r--r-- 1 root root 462 5月 15 15:55 docker-compose.yaml drwxr-xr-x 3 root root 51 5月 15 15:05 etc ./etc: drwxr-xr-x 2 root root 30 5月 15 15:03 enc -rw-r--r-- 1 root root 123 5月 15 15:05 env_mysql -rw-r--r-- 1 root root 205 5月 15 15:04 env_proxy ./etc/enc: -rw-r--r-- 1 root root 65 5月 15 14:29 zabbix_proxy.psk #允许Zabbix代理容器的卷,参考以下网址来放psk文件 https://hub.docker.com/r/zabbix/zabbix-proxy-mysql #启动前先生成zabbix网络: $docker network create zabbix #docker-compose.yaml version: "3.0" services: zabbix_proxy: image: zabbix/zabbix-proxy-mysql:alpine-4.2.1 container_name: zabbix_proxy ports: - "10055:10051" volumes: - /etc/localtime:/etc/localtime:ro - ./etc/enc:/var/lib/zabbix/enc env_file: - ./etc/env_proxy - ./etc/env_mysql networks: - zabbix #command: ['top'] networks: zabbix: external: true #env_mysql文件 DB_SERVER_HOST=192.168.1.200 DB_SERVER_PORT=3306 MYSQL_DATABASE=zabbix_porxy MYSQL_USER=zabbix_proxy MYSQL_PASSWORD=zabbix #env_proxy文件 ZBX_SERVER_HOST=192.168.1.200 ZBX_SERVER_PORT=10051 ZBX_TLSCONNECT=psk ZBX_TLSPSKIDENTITY=ZABBIXPROXY ZBX_TLSPSKFILE=zabbix_proxy.psk ZBX_HOSTNAME=ZabbixProxy ZBX_CONFIGFREQUENCY=60 ZBX_PROXYOFFLINEBUFFER=10 ZBX_TLSCONNECT=psk ZBX_TLSACCEPT=psk ZBX_DATASENDERFREQUENCY=30 ZBX_PROXYLOCALBUFFER=10 # 在 docker-compose.yaml 所在的目录下执行; docker-compose -f docker-compose.yaml up -d docker-compose up #以后直接启动 docker-compose logs #查看连接日志 #在zabbix-proxy-mysql docker中显示如下则表示成功接入,或者 zabbix_proxy | 186:20190515:161355.527 proxy #26 started [preProcessing wo rker #1] zabbix_proxy | 161:20190515:161455.932 received configuration data from server at "192.168.1.200", datalen 3707
选择 管理 -> agent代理程序 -> 创建代理:
WeiyiGeek.zabbixproxy-hostname
进行zabbix-proxy加密设置:
WeiyiGeek.建立zabbix-proxy
Step 5. 接入主机到zabbix-proxy中:
#拿一台data连接到我们zabbix-proxy中,然后从zabbix-server进行获取信息 $egrep -v '^#' /etc/zabbix/zabbix_agentd.conf Server=192.168.1.98 ListenPort=10050 ServerActive=192.168.1.98:10055 #主动推送加端口 Hostname=proxy-agent #启动服务器的zabbix-agent [root@Master-data1 ~]$ service zabbix-agent start Starting Zabbix agent: [ OK ]
WeiyiGeek.zabbix-proxy访问成功
接入其他需要监控的主机到server中
# 由于这里做了(高可用-直接连接server会进行主网卡转发) - 所以采用代理的形式 注意:在机器数量较少的时候可以采用被动主动,当机器变多的时候建议agent采用采用主动发送,以减少server的负载; #linux - agent 共用配置 Server192.168.1.98 ListenPort=10050 ServerActive=192.168.1.98:10055 #Linux-agent(主从) Hostname=Mzabbix Hostname=Szabbix #windows-agent Server192.168.56.102 ListenPort=10050 ServerActive=192.168.56.102:10055 Hostname=Windows7
step 6. Grafana应安装在zabbix-server服务器上并进行以下配置
$wget https://dl.grafana.com/oss/release/grafana-5.4.2-1.x86_64.rpm $sudo yum -y localinstall grafana-5.4.2-1.x86_64.rpm 已安装: grafana.x86_64 0:5.4.2-1 $systemctl daemon-reload $systemctl start grafana-server $yum -y install fontconfig freetype* urw-fonts 已安装: freetype-demos.x86_64 0:2.8-12.el7_6.1 freetype-devel.x86_64 0:2.8-12.el7_6.1 作为依赖被安装: libpng-devel.x86_64 2:1.5.13-7.el7_2 $yum -y install fontconfig freetype* urw-fonts #服务器端图像是一项可选功能 $systemctl start grafana-server
启动Grafana后,在浏览器中输入http://ip:3000,可访问(3000为默认端口,账号密码都是admin/weiyigeek),登录成功后需要您更改默认密码,然后进行插件安装:
#获取可用插件列表 grafana-cli plugins list-remote #安装zabbix插件 grafana-cli plugins list-remote |grep zabbix grafana-cli plugins install alexanderzobnin-zabbix-app #重启grafana,并再次访问 systemctl restart grafana-server
WeiyiGeek.grafana安装zabbix插件
Grafana的zabbix配置:
<1> 点击zabbix图标,启用zabbix插件 <2> 点击Enable <3> 点击Add data source ,添加数据源 (首页) <4> 点击zabbix,添加zabbix插件的数据源
WeiyiGeek.数据源
<5> 配置数据源 Name为自定义,要可区分 URL为zabbix的API地址,默认为:http://zabbix-server的IP/zabbix/api_jsonrpc.php 选择ACCESS为Browser Username,Password为zabbix的用户及对应的密码(可在zabbix上设置用户) 注意选择zabbix version为你自己的版本 - 确认无误则保存;
WeiyiGeek.配置数据源
<7>指示板进行查看并导入
WeiyiGeek.
<8>如何不正正确的链接到zabbix需要查看本地是否能正常连接到zabbix以及,绑定的zabbix的mysql的
WeiyiGeek.绑定myqsl
<9>最后grafana数据展现大成
WeiyiGeek.
业务整体架构:
WeiyiGeek.zabbix架构