zabbix的基本信息及配置可参看我的博客:分布式监控系统zabbix 配置

  • zabbix作为一个监控系统,其信息量的摄入是十分庞大的,单纯的传统关系型数据库南以满足其大数据量的要求,因此可通过将其底层数据库替换会new sql来解决其数据庞大的瓶颈,这里为大家介绍通过TIDB来解决此问题

1. TIDB基本介绍

  • TiDB 是 PingCAP 公司设计的开源分布式 HTAP (Hybrid Transactional and Analytical Processing) 数据库,结合了传统的 RDBMS 和 NoSQL 的最佳特性。TiDB 兼容 MySQL,支持无限的水平扩展,具备强一致性和高可用性。TiDB 的目标是为 OLTP (Online Transactional Processing) 和 OLAP (Online Analytical Processing) 场景提供一站式的解决方案
  • TiDB 具备如下 NewSQL 核心特性:
    • SQL 支持( TiDB 是 MySQL 兼容的)
    • 水平线性弹性扩展
    • 分布式事务
    • 跨数据中心数据强一致性保证
    • 故障自恢复的高可用

TiDB 整体架构

zabbix6 配置数据库 zabbix支持数据库类型_TIDB

  • TiDB 集群主要分为三个组件:
  • TiDB Server
    TiDB Server 负责接收 SQL 请求,处理 SQL 相关的逻辑,并通过 PD 找到存储计算所需数据的 TiKV 地址,与 TiKV 交互获取数据,最终返回结果。TiDB Server 是无状态的,其本身并不存储数据,只负责计算,可以无限水平扩展,可以通过负载均衡组件(如LVS、HAProxy 或 F5)对外提供统一的接入地址。
  • PD Server
    Placement Driver (简称 PD) 是整个集群的管理模块,其主要工作有三个:一是存储集群的元信息(某个 Key 存储在哪个 TiKV 节点);二是对 TiKV 集群进行调度和负载均衡(如数据的迁移、Raft group leader 的迁移等);三是分配全局唯一且递增的事务 ID。
    PD 是一个集群,需要部署奇数个节点,一般线上推荐至少部署 3 个节点。
  • TiKV Server
    TiKV Server 负责存储数据,从外部看 TiKV 是一个分布式的提供事务的 Key-Value 存储引擎。存储数据的基本单位是 Region,每个 Region 负责存储一个 Key Range(从 StartKey 到 EndKey 的左闭右开区间)的数据,每个 TiKV 节点会负责多个 Region。TiKV 使用 Raft 协议做复制,保持数据的一致性和容灾。副本以 Region 为单位进行管理,不同节点上的多个 Region 构成一个 Raft Group,互为副本。数据在多个 TiKV 之间的负载均衡由 PD 调度,这里也是以 Region 为单位进行调度。
  • 核心特性(水平扩展)
    无限水平扩展是 TiDB 的一大特点,这里说的水平扩展包括两方面:计算能力和存储能力。TiDB Server 负责处理 SQL 请求,随着业务的增长,可以简单的添加 TiDB Server 节点,提高整体的处理能力,提供更高的吞吐。TiKV 负责存储数据,随着数据量的增长,可以部署更多的 TiKV Server 节点解决数据 Scale 的问题。PD 会在 TiKV 节点之间以 Region 为单位做调度,将部分数据迁移到新加的节点上。所以在业务的早期,可以只部署少量的服务实例(推荐至少部署 3 个 TiKV, 3 个 PD,2 个 TiDB),随着业务量的增长,按照需求添加 TiKV 或者 TiDB 实例。
  • 高可用
    高可用是 TiDB 的另一大特点,TiDB/TiKV/PD 这三个组件都能容忍部分实例失效,不影响整个集群的可用性。下面分别说明这三个组件的可用性、单个实例失效后的后果以及如何恢复。
  • TiDB
    TiDB 是无状态的,推荐至少部署两个实例,前端通过负载均衡组件对外提供服务。当单个实例失效时,会影响正在这个实例上进行的 Session,从应用的角度看,会出现单次请求失败的情况,重新连接后即可继续获得服务。单个实例失效后,可以重启这个实例或者部署一个新的实例。
  • PD
    PD 是一个集群,通过 Raft 协议保持数据的一致性,单个实例失效时,如果这个实例不是 Raft 的 leader,那么服务完全不受影响;如果这个实例是 Raft 的 leader,会重新选出新的 Raft leader,自动恢复服务。PD 在选举的过程中无法对外提供服务,这个时间大约是3秒钟。推荐至少部署三个 PD 实例,单个实例失效后,重启这个实例或者添加新的实例。
  • TiKV
    TiKV 是一个集群,通过 Raft 协议保持数据的一致性(副本数量可配置,默认保存三副本),并通过 PD 做负载均衡调度。单个节点失效时,会影响这个节点上存储的所有 Region。对于 Region 中的 Leader 结点,会中断服务,等待重新选举;对于 Region 中的 Follower 节点,不会影响服务。当某个 TiKV 节点失效,并且在一段时间内(默认 30 分钟)无法恢复,PD 会将其上的数据迁移到其他的 TiKV 节点上。
    TIDB的官方网站:https://www.pingcap.com/index.html
    TIDB中文文档:https://www.pingcap.com/docs-cn/

进行TIDB集群的搭建

hostname

IP

安装的系统服务

Server1

172.25.25.4

PD1, TiDB,zabbix-server,web

Server2

172.25.25.5

TiKV1

Server3

172.25.25.5

TiKV2

Server4

172.25.25.5

TiKV3

我的server1已经安装配置过zabbix服务,并安装了mariadb的客户端

安装包获取

http://download.pingcap.org/tidb-latest-linux-amd64.tar.gz
在上述地址进行安装包获取

进行解压( 每个节点都进行解压)

[root@server1 ~]# tar zxf tidb-latest-linux-amd64.tar.gz
 [root@server1 ~]# cd tidb-latest-linux-amd64

启动集群(按顺序启动,并将进程打入后台)

具体参数可参看:https://www.pingcap.com/docs-cn/op-guide/configuration/

启动PD

server1

[root@server1 tidb-latest-linux-amd64]# ./bin/pd-server \
 --name=pd1 --data-dir=pd1 --client-urls="http://192.168.0.41:2379" \
 --peer-urls="http://192.168.0.41:2380" \
 --initial- cluster="pd1=http://192.168.0.41:2380" \
 --log-file=pd.log &
启动TIKV

server2(TIKV1)

[root@server2 tidb-latest-linux-amd64]# ./bin/tikv-server --pd="172.25.21.1:2379" \
 --addr="172.25.21.2:20160" --data-dir=tikv1 \
 --log-file=tikv.log &

server3(TIKV2)

[root@server3 tidb-latest-linux-amd64]# ./bin/tikv-server --pd="172.25.21.1:2379" \
 --addr="172.25.21.3:20160" --data-dir=tikv1 \
 --log-file=tikv.log &

server4(TIKV3)

[root@server4 tidb-latest-linux-amd64]# ./bin/tikv-server --pd="172.25.21.1:2379" \
 --addr="172.25.21.4:20160" --data-dir=tikv1 \
 --log-file=tikv.log &
启动tidb-server

server1

[root@server1 tidb-latest-linux-amd64]# ./bin/tidb-server &

可通过端口来查看其运行状态(也可手动指定日志文件)

zabbix6 配置数据库 zabbix支持数据库类型_Server_02

将TIDB与zabbix关联

1. 配置TIDB数据库

在TIDB端安装数据库客户端,madiadb即可

[root@server1 ~]# mysql -h172.25.21.1 -P4000 -uroot
 Welcome to the MariaDB monitor.  Commands end with ; or \g.
 Your MySQL connection id is 1
 Server version: 5.7.1-TiDB-0.9.0 MySQL Community Server (Apache License 2.0)

 Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.

 Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

 MySQL [(none)]> show databases;
 +--------------------+
 | Database           |
 +--------------------+
 | INFORMATION_SCHEMA |
 | PERFORMANCE_SCHEMA |
 | mysql              |
 | test               |
 +--------------------+
 4 rows in set (0.00 sec)

 MySQL [(none)]> CREATE DATABASE zabbix CHARSET 'utf8';  # 创建zabbix数据库
 Query OK, 0 rows affected (0.00 sec)

 MySQL [(none)]>  GRANT ALL ON zabbix.* TO 'zabbix'@'172.25.21.%'  IDENTIFIED BY 'redhat';
     # 建立授权用户
 Query OK, 1 row affected (0.03 sec)

zabbix6 配置数据库 zabbix支持数据库类型_zabbix6 配置数据库_03

2. 将 zabbix-server-mysql 数据导入TIDB中
[root@server1 zabbix-server-mysql-3.4.6]# pwd
 /usr/share/doc/zabbix-server-mysql-3.4.6
 [root@server1 zabbix-server-mysql-3.4.6]# zcat create.sql.gz | mysql -h172.25.21.1 -uzabbix -P4000 -p zabbix
 Enter password: 
 导入信息,等待稍许即可
1. 配置zabbix-server数据库
[root@server1 ~]# vim /etc/zabbix/zabbix_server.conf
 编辑如下内容:
  91 DBHost=172.25.21.1    # zabbix 数据库地址
  .........略.........
 117 DBUser=zabbix         # 数据库用户
  .........略.........
 125 DBPassword=redhat     # 数据库密码
  .........略.........
 132 # DBSocket=/var/lib/mysql/mysql.sock
                           # 数据库.sock文件,使用默认
  .........略.........
 140 DBPort=4000           # 数据库端口,TIDB为4000

编辑/etc/zabbix/web/zabbix.conf.php

[root@server1 ~]# vim /etc/zabbix/web/zabbix.conf.php
 ........ 略 ........
 global $DB;

 $DB['TYPE']     = 'MYSQL';   # 指定数据库类型
 $DB['SERVER']   = '172.25.21.1';  # 数据库server
 $DB['PORT']     = '4000';    # 数据库端口
 $DB['DATABASE'] = 'zabbix';  # 数据库
 $DB['USER']     = 'zabbix';  # 数据库用户
 $DB['PASSWORD'] = 'redhat';  # 数据库密码
 ........ 略 ........

zabbix6 配置数据库 zabbix支持数据库类型_数据库_04

启动服务
[root@server1 ~]# systemctl start zabbix-server
                 # 启动 zabbix-server
 [root@server1 ~]# systemctl start zabbix-agent
                 # 启动 zabbix-agent

查看zabbix-server日志以确保启动成功

[root@server1 ~]# cat /var/log/zabbix/zabbix_server.log

zabbix6 配置数据库 zabbix支持数据库类型_数据库_05


zabbix6 配置数据库 zabbix支持数据库类型_Server_06

在浏览器中进行查看

进行登陆(因为的的机器已经配置过zabbix服务,所以在将底层数据库切换后,无需再此进行配置,能成功登陆,并且日志显示正常即可)

zabbix6 配置数据库 zabbix支持数据库类型_数据库_07


查看服务状态

zabbix6 配置数据库 zabbix支持数据库类型_zabbix_08

无法成功到达登陆界面。请注意以下几点:
zabbix-server中数据库信息的指定,端口,地址等是否正确,授权用户是否正确,是否能够成功登陆,zabbix-server-mysql数据是否成功导入TIDB中等
其他错误,直接查看zabbix-server日志进行解决即可