Zabbix+分布式数据库TiDB实现分布式数据库监控
一、Tidb的简介
1.什么是TiDB
TiDB 是 PingCAP 公司自主设计、研发的开源分布式关系型数据库,是一款同时支持在线事务处理与在线分析处理 (Hybrid Transactional and Analytical Processing, HTAP) 的融合型分布式数据库产品,具备水平扩容或者缩容、金融级高可用、实时 HTAP、云原生的分布式数据库、兼容 MySQL 5.7 协议和 MySQL 生态等重要特性。目标是为用户提供一站式 OLTP (Online Transactional Processing)、OLAP (Online Analytical Processing)、HTAP 解决方案。TiDB 适合高可用、强一致要求较高、数据规模较大等各种应用场景。
与传统的单机数据库相比,TiDB 具有以下优势:
1)纯分布式架构,拥有良好的扩展性,支持弹性的扩缩容
2)支持 SQL,对外暴露 MySQL 的网络协议,并兼容大多数 MySQL 的语法,在大多数场景下可以直接替换 MySQL
3)默认支持高可用,在少数副本失效的情况下,数据库本身能够自动进行数据修复和故障转移,对业务透明
4)支持 ACID 事务,对于一些有强一致需求的场景友好,例如:银行转账
- 具有丰富的工具链生态,覆盖数据迁移、同步、备份等多种场景
2.TiDB 整体架构
在内核设计上,TiDB 分布式数据库将整体架构拆分成了多个模块,各模块之间互相通信,组成完整的 TiDB 系统。对应的架构图如下:
2.主要模块简介
1) TiDB Server
TiDB Server:SQL 层,对外暴露 MySQL 协议的连接 endpoint,负责接受客户端的连接,执行 SQL 解析和优化,最终生成分布式执行计划。TiDB 层本身是无状态的,实践中可以启动多个 TiDB 实例,通过负载均衡组件(如 LVS、HAProxy 或 F5)对外提供统一的接入地址,客户端的连接可以均匀地分摊在多个 TiDB 实例上以达到负载均衡的效果。TiDB Server 本身并不存储数据,只是解析 SQL,将实际的数据读取请求转发给底层的存储节点 TiKV(或 TiFlash)。
2) PD Server
PD (Placement Driver) Server:整个 TiDB 集群的元信息管理模块,负责存储每个 TiKV 节点实时的数据分布情况和集群的整体拓扑结构,提供 TiDB Dashboard 管控界面,并为分布式事务分配事务 ID。PD 不仅存储元信息,同时还会根据 TiKV 节点实时上报的数据分布状态,下发数据调度命令给具体的 TiKV 节点,可以说是整个集群的“大脑”。此外,PD 本身也是由至少 3 个节点构成,拥有高可用的能力。建议部署奇数个 PD 节点。
3) 存储节点
TiKV Server:
负责存储数据,从外部看 TiKV 是一个分布式的提供事务的 Key-Value 存储引擎。存储数据的基本单位是 Region,每个 Region 负责存储一个 Key Range(从 StartKey 到 EndKey 的左闭右开区间)的数据,每个 TiKV 节点会负责多个 Region。TiKV 的 API 在 KV 键值对层面提供对分布式事务的原生支持,默认提供了 SI (Snapshot Isolation) 的隔离级别,这也是 TiDB 在 SQL 层面支持分布式事务的核心。TiDB 的 SQL 层做完 SQL 解析后,会将 SQL 的执行计划转换为对 TiKV API 的实际调用。所以,数据都存储在 TiKV 中。另外,TiKV 中的数据都会自动维护多副本(默认为三副本),天然支持高可用和自动故障转移。
TiFlash
TiFlash 是一类特殊的存储节点。和普通 TiKV 节点不一样的是,在 TiFlash 内部,数据是以列式的形式进行存储,主要的功能是为分析型的场景加速
3.实验环境
需要四台虚拟机
节点 | 所安装服务 |
---|---|
server11:172.25.254.21 | zabbix-server mariadb PD1,TiDB |
server12:172.25.254.22 | tikv集群 |
server13:172.25.254.23 | tikv集群 |
二、server11环境搭建
1.zabbix-server服务提前搭建
成功启动
2.mariadb提前部署
3.server11安装配置TiDB
server11下载安装包,解压并后台启用PD
下载TiDB二进制包
[root@westos_student73 file_recv]# wget https://download.pingcap.org/tidb-latest-linux-amd64.tar.gz
[root@westos_student73 file_recv]# scp tidb-latest-linux-amd64.tar.gz server11:
server11开启PD并后台运行
[root@server11 ~]# tar zxf tidb-latest-linux-amd64.tar.gz
[root@server11 ~]# cd tidb-v5.0.1-linux-amd64/
[root@server11 tidb-v5.0.1-linux-amd64]# ls
bin PingCAP Community Software Agreement(Chinese Version).pdf PingCAP Community Software Agreement(English Version).pdf
#开启PD并后台运行
[root@server11 tidb-v5.0.1-linux-amd64]# ./bin/pd-server --name=pd1 --data-dir=pd1 --client-urls="http://172.25.254.21:2379" --peer-urls="http://172.25.254.21:2380" --initial-cluster="pd1=http://172.25.254.21:2380" --log-file=pd.log &
#查看2379和2380端口是否开放
[root@server11 tidb-v5.0.1-linux-amd64]# netstat -antlp | grep :2379
tcp 0 0 172.25.254.21:2379 0.0.0.0:* LISTEN 14062/./bin/pd-serv
tcp 0 0 172.25.254.21:60982 172.25.254.21:2379 ESTABLISHED 14062/./bin/pd-serv
tcp 0 0 172.25.254.21:60980 172.25.254.21:2379 ESTABLISHED 14062/./bin/pd-serv
tcp 0 0 172.25.254.21:2379 172.25.254.21:60982 ESTABLISHED 14062/./bin/pd-serv
tcp 0 0 172.25.254.21:60990 172.25.254.21:2379 ESTABLISHED 14062/./bin/pd-serv
tcp 0 0 172.25.254.21:2379 172.25.254.21:60990 ESTABLISHED 14062/./bin/pd-serv
tcp 0 0 172.25.254.21:2379 172.25.254.21:60980 ESTABLISHED 14062/./bin/pd-serv
[root@server11 tidb-v5.0.1-linux-amd64]# netstat -antlp | grep :2380
tcp 0 0 172.25.254.21:2380 0.0.0.0:* LISTEN 14062/./bin/pd-serv
[root@server11 tidb-v5.0.1-linux-amd64]#
三、解压并开启tikv(server12、server13、server14)
server12配置
[root@server12 ~]# ls
nginx-1.20.2 nginx-1.20.2.tar.gz tidb-latest-linux-amd64.tar.gz zabbix_proxy.conf
[root@server12 ~]# tar zxf tidb-latest-linux-amd64.tar.gz
[root@server12 ~]# ls
nginx-1.20.2 nginx-1.20.2.tar.gz tidb-latest-linux-amd64.tar.gz tidb-v5.0.1-linux-amd64 zabbix_proxy.conf
[root@server12 ~]# cd tidb-v5.0.1-linux-amd64/
[root@server12 tidb-v5.0.1-linux-amd64]# ls
bin PingCAP Community Software Agreement(Chinese Version).pdf PingCAP Community Software Agreement(English Version).pdf
[root@server12 tidb-v5.0.1-linux-amd64]# ./bin/tikv-server --pd="172.25.254.21:2379" --addr="172.25.254.22:20160" --data-dir=tikv1 --log-file=tikv.log &
[1] 3533
[root@server12 tidb-v5.0.1-linux-amd64]# netstat -antlp
server13配置
[root@server13 ~]# ls
apache-tomcat-8.5.24.tar.gz tidb-latest-linux-amd64.tar.gz
[root@server13 ~]# tar zxf tidb-latest-linux-amd64.tar.gz
[root@server13 ~]# ls
apache-tomcat-8.5.24.tar.gz tidb-latest-linux-amd64.tar.gz tidb-v5.0.1-linux-amd64
[root@server13 ~]# cd tidb-v5.0.1-linux-amd64/
[root@server13 tidb-v5.0.1-linux-amd64]# ls
bin PingCAP Community Software Agreement(Chinese Version).pdf PingCAP Community Software Agreement(English Version).pdf
[root@server13 tidb-v5.0.1-linux-amd64]# ./bin/tikv-server --pd="172.25.254.21:2379" --addr="172.25.254.23:20160" --data-dir=tikv1 --log-file=tikv.log &
[1] 4194
[root@server13 tidb-v5.0.1-linux-amd64]# netstat -antlp | grep tikv
tcp 0 0 127.0.0.1:20180 0.0.0.0:* LISTEN 4194/./bin/tikv-ser
tcp6 0 0 172.25.254.23:20160 :::* LISTEN 4194/./bin/tikv-ser
tcp6 0 0 172.25.254.23:50760 172.25.254.21:2379 ESTABLISHED 4194/./bin/tikv-ser
四、server11服务端开启zabbix及tidb
开启tidb-server服务并打入后台
[root@server11 tidb-v5.0.1-linux-amd64]# ./bin/tidb-server &
[root@server11 tidb-v5.0.1-linux-amd64]# netstat -antlp | grep tidb
tcp6 0 0 :::10080 :::* LISTEN 8198/./bin/tidb-ser
tcp6 0 0 :::4000 :::* LISTEN 8198/./bin/tidb-ser
[root@server11 tidb-v5.0.1-linux-amd64]# netstat -antlp | grep 4000
tcp6 0 0 :::4000 :::* LISTEN 8198/./bin/tidb-ser
[root@server11 tidb-v5.0.1-linux-amd64]#
五、数据导入(创建TIDB)
1.数据库连接tidb
[root@server11 tidb-v5.0.1-linux-amd64]# mysql -h 172.25.254.21 -P 4000 -uroot
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.25-TiDB-v5.0.1 TiDB Server (Apache License 2.0) Community Edition, MySQL 5.7 compatible
Copyright (c) 2000, 2021, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> create database zabbix character set utf8 collate utf8_bin;
mysql> CREATE USER 'zabbix'@'%' IDENTIFIED BY 'westos';
mysql> grant all privileges on *.* to 'zabbix'@'%';
2、给数据库导入数据
将之前mysql导入的zabbix库的数据倒出,此步要确定之前已经创建了zabbix数据库。
[root@server1 zabbix-server-mysql-4.0.5]# mysqldump -uroot -pwestos zabbix >/mnt/zabbix.sql
将备份的数据库导入tidb的数据库中
[root@server1 mnt]# mysql -h 172.25.4.111 -P 4000 -uroot
MySQL [(none)]> use zabbix;
Database changed
MySQL [zabbix]> set tidb_batch_insert=1;
MySQL [zabbix]> source /mnt/zabbix.sql;
3.server11修改配置文件
[root@server11 ~]# vim /etc/zabbix/zabbix_server.conf
DBPort=4000
[root@server11 ~]# cd /etc/zabbix/web/
[root@server11 web]# vim zabbix.conf.php
$DB['TYPE'] = 'MYSQL';
$DB['SERVER'] = '172.25.254.21';
$DB['PORT'] = '4000';
$DB['DATABASE'] = 'zabbix';
$DB['USER'] = 'zabbix';
$DB['PASSWORD'] = 'westos';
重启服务
[root@server11 web]# systemctl restart zabbix-server
[root@server11 web]# systemctl restart zabbix-agent
4、浏览器访问进行测试
此时访问的已经不是mariadb数据库,而是tidb数据库。