TIDB分布式数据库的部署——使用TiDB为Zabbix构建分布式MySQL数据库支持(使用Docker部署)

使用docker部署tidb的官方文档:https://pingcap.com/docs-cn/v3.0/how-to/deploy/orchestrated/docker/

1.TiDB 简介

TiDB 是 PingCAP 公司受 Google Spanner / F1 论文启发而设计的开源分布式 NewSQL 数据库

TiDB 具备如下 NewSQL 核心特性:
SQL支持(TiDB 是 MySQL 兼容的)
水平弹性扩展(吞吐可线性扩展)
分布式事务
跨数据中心数据强一致性保证
故障自恢复的高可用
海量数据高并发实时写入与实时查询(HTAP 混合负载)

TiDB 的设计目标是 100% 的 OLTP 场景和 80% 的 OLAP 场景,更复杂的 OLAP 分析可以通过 TiSpark 项目来完成
TiDB 对业务没有任何侵入性,能优雅的替换传统的数据库中间件、数据库分库分表等 Sharding 方案
同时它也让开发运维人员不用关注数据库 Scale 的细节问题,专注于业务开发,极大的提升研发的生产力

2.TiDB 整体架构

要深入了解 TiDB 的水平扩展和高可用特点,首先需要了解 TiDB 的整体架构
TIDB分布式数据库的部署——使用TiDB为Zabbix构建分布式MySQL数据库支持(使用Docker部署)_第1张图片
TiDB 集群主要分为三个组件:

  • (1)TiDB Server

TiDB Server 负责接收 SQL 请求,处理 SQL 相关的逻辑,并通过 PD 找到存储计算所需数据的 TiKV 地址,
与 TiKV 交互获取数据,最终返回结果。 TiDB Server 是无状态的,其本身并不存储数据,只负责计算,
可以无限水平扩展,可以通过负载均衡组件(如LVS、HAProxy 或 F5)对外提供统一的接入地址。

  • (2)PD Server

Placement Driver (简称 PD) 是整个集群的管理模块,其主要工作有三个: 一是存储集群的元信息(某个 Key 存储在哪个 TiKV 节点);
二是对 TiKV 集群进行调度和负载均衡(如数据的迁移、Raft group leader 的迁移等);三是分配全局唯一且递增的事务 ID。
PD 是一个集群,需要部署奇数个节点,一般线上推荐至少部署 3 个节点。

  • (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 为单位进行调度。

3.核心特性

(1)水平扩展
无限水平扩展是 TiDB 的一大特点,这里说的水平扩展包括两方面:计算能力和存储能力
TiDB Server 负责处理 SQL 请求,随着业务的增长,可以简单的添加 TiDB Server 节点,提高整体的处理能力,提供更高的吞吐
TiKV 负责存储数据,随着数据量的增长,可以部署更多的 TiKV Server 节点解决数据 Scale 的问题
PD 会在 TiKV 节点之间以 Region 为单位做调度,将部分数据迁移到新加的节点上
所以在业务的早期,可以只部署少量的服务实例(推荐至少部署 3 个 TiKV, 3 个 PD,2 个 TiDB)
随着业务量的增长,按照需求添加 TiKV 或者 TiDB 实例

(2)高可用
高可用是 TiDB 的另一大特点,TiDB/TiKV/PD 这三个组件都能容忍部分实例失效,不影响整个集群的可用性
下面分别说明这三个组件的可用性、单个实例失效后的后果以及如何恢复

(3)TiDB
TiDB 是无状态的,推荐至少部署两个实例,前端通过负载均衡组件对外提供服务
当单个实例失效时,会影响正在这个实例上进行的 Session,从应用的角度看,会出现单次请求失败的情况
重新连接后即可继续获得服务。单个实例失效后,可以重启这个实例或者部署一个新的实例

(4)PD
PD 是一个集群,通过 Raft 协议保持数据的一致性,单个实例失效时,如果这个实例不是 Raft 的 leader,那么服务完全不受影响
如果这个实例是 Raft 的 leader,会重新选出新的 Raft leader,自动恢复服务
PD 在选举的过程中无法对外提供服务,这个时间大约是3秒钟
推荐至少部署三个 PD 实例,单个实例失效后,重启这个实例或者添加新的实例

(5)TiKV
TiKV 是一个集群,通过 Raft 协议保持数据的一致性(副本数量可配置,默认保存三副本),并通过 PD 做负载均衡调度
单个节点失效时,会影响这个节点上存储的所有 Region。对于 Region 中的 Leader 结点,会中断服务,等待重新选举
对于 Region 中的 Follower 节点,不会影响服务。当某个 TiKV 节点失效,并且在一段时间内(默认 10 分钟)无法恢复
PD 会将其上的数据迁移到其他的 TiKV 节点上

4.搭建实验环境

主机(IP) 服务
server1(172.25.2.1) docker+tidb
server2(172.25.2.2) zabbix+mariadb客户端

(1)在真机中创建两个快照
TIDB分布式数据库的部署——使用TiDB为Zabbix构建分布式MySQL数据库支持(使用Docker部署)_第2张图片
(2)给两个快照导入镜像并且开启快照
在这里插入图片描述
在这里插入图片描述
TIDB分布式数据库的部署——使用TiDB为Zabbix构建分布式MySQL数据库支持(使用Docker部署)_第3张图片
TIDB分布式数据库的部署——使用TiDB为Zabbix构建分布式MySQL数据库支持(使用Docker部署)_第4张图片
TIDB分布式数据库的部署——使用TiDB为Zabbix构建分布式MySQL数据库支持(使用Docker部署)_第5张图片
TIDB分布式数据库的部署——使用TiDB为Zabbix构建分布式MySQL数据库支持(使用Docker部署)_第6张图片
TIDB分布式数据库的部署——使用TiDB为Zabbix构建分布式MySQL数据库支持(使用Docker部署)_第7张图片
TIDB分布式数据库的部署——使用TiDB为Zabbix构建分布式MySQL数据库支持(使用Docker部署)_第8张图片
TIDB分布式数据库的部署——使用TiDB为Zabbix构建分布式MySQL数据库支持(使用Docker部署)_第9张图片
TIDB分布式数据库的部署——使用TiDB为Zabbix构建分布式MySQL数据库支持(使用Docker部署)_第10张图片
(3)用真机连接两个虚拟节server1和server2
TIDB分布式数据库的部署——使用TiDB为Zabbix构建分布式MySQL数据库支持(使用Docker部署)_第11张图片
TIDB分布式数据库的部署——使用TiDB为Zabbix构建分布式MySQL数据库支持(使用Docker部署)_第12张图片
(4)查看一下系统版本
在这里插入图片描述

5.TIDB分布式数据库的部署

server1上:
我在一台主机上部署一个tidb集群:主机名:server1,ip:172.25.2.1

(1)从真机给server1发送TiDB 的 Docker 镜像

部署 TiDB 集群主要包括 3 个服务组件:TiDB,TiKV,PD
对应的最新 Docker 镜像可以通过 Docker 官方镜像仓库 获取

TIDB分布式数据库的部署——使用TiDB为Zabbix构建分布式MySQL数据库支持(使用Docker部署)_第13张图片
在这里插入图片描述
(2)安装docker
server1使用真机的共享yum源
TIDB分布式数据库的部署——使用TiDB为Zabbix构建分布式MySQL数据库支持(使用Docker部署)_第14张图片
TIDB分布式数据库的部署——使用TiDB为Zabbix构建分布式MySQL数据库支持(使用Docker部署)_第15张图片
TIDB分布式数据库的部署——使用TiDB为Zabbix构建分布式MySQL数据库支持(使用Docker部署)_第16张图片

[root@server1 ~]# yum install docker-ce -y
[root@server1 ~]# systemctl start docker
[root@server1 ~]# systemctl enable docker
[root@server1 ~]# yum install bash-* -y   #自动补全

在这里插入图片描述
TIDB分布式数据库的部署——使用TiDB为Zabbix构建分布式MySQL数据库支持(使用Docker部署)_第17张图片
(3)安装git

[root@server1 ~]# yum install git -y先安装这个命令
git clone https://github.com/pingcap/tidb-docker-compose.git   #server1连网之后使用这个命令
[root@server1 ~]# ls查看
pd.tar  tidb-docker-compose  tidb.tar  tikv.tar
[root@server1 ~]# cd tidb-docker-compose/
[root@server1 tidb-docker-compose]# ls
compose              docker                     docker-compose.yml  pd         tidb-binlog  tispark
config               docker-compose-binlog.yml  docker-swarm.yml    README.md  tidb-vision  tools
dashboard-installer  docker-compose-test.yml    LICENSE             tidb       tikv

在这里插入图片描述
TIDB分布式数据库的部署——使用TiDB为Zabbix构建分布式MySQL数据库支持(使用Docker部署)_第18张图片
TIDB分布式数据库的部署——使用TiDB为Zabbix构建分布式MySQL数据库支持(使用Docker部署)_第19张图片
TIDB分布式数据库的部署——使用TiDB为Zabbix构建分布式MySQL数据库支持(使用Docker部署)_第20张图片
(4)下载docker-compose
从真机给server1传送docker-compose
TIDB分布式数据库的部署——使用TiDB为Zabbix构建分布式MySQL数据库支持(使用Docker部署)_第21张图片
TIDB分布式数据库的部署——使用TiDB为Zabbix构建分布式MySQL数据库支持(使用Docker部署)_第22张图片
TIDB分布式数据库的部署——使用TiDB为Zabbix构建分布式MySQL数据库支持(使用Docker部署)_第23张图片
TIDB分布式数据库的部署——使用TiDB为Zabbix构建分布式MySQL数据库支持(使用Docker部署)_第24张图片
TIDB分布式数据库的部署——使用TiDB为Zabbix构建分布式MySQL数据库支持(使用Docker部署)_第25张图片
(5)导入镜像并且查看
TIDB分布式数据库的部署——使用TiDB为Zabbix构建分布式MySQL数据库支持(使用Docker部署)_第26张图片

(6)创建网络
TIDB分布式数据库的部署——使用TiDB为Zabbix构建分布式MySQL数据库支持(使用Docker部署)_第27张图片
(7)启动 PD

在server1上利用pd镜像运行三个pd容器并且查看

[root@server1 ~]# docker run -d --name pd1 \
> --network my_net \
>  -v /etc/localtime:/etc/localtime:ro \
> -v /data:/data \
> pingcap/pd:latest \
> --name="pd1" \
> --data-dir="/data/pd1" \
> --client-urls="http://0.0.0.0:2379" \
> --advertise-client-urls="http://pd1:2379" \
> --peer-urls="http://0.0.0.0:2380" \
> --advertise-peer-urls="http://pd1:2380" \
> --initial-cluster="pd1=http://pd1:2380,pd2=http://pd2:2380,pd3=http://pd3:2380"

[root@server1 ~]# docker run -d --name pd2 --network my_net  -v /etc/localtime:/etc/localtime:ro -v /data:/data pingcap/pd:latest --name="pd2" --data-dir="/data/pd2" --client-urls="http://0.0.0.0:2379" --advertise-client-urls="http://pd2:2379" --peer-urls="http://0.0.0.0:2380" --advertise-peer-urls="http://pd2:2380" --initial-cluster="pd1=http://pd1:2380,pd2=http://pd2:2380,pd3=http://pd3:2380"

[root@server1 ~]# docker run -d --name pd3 --network my_net  -v /etc/localtime:/etc/localtime:ro -v /data:/data pingcap/pd:latest --name="pd3" --data-dir="/data/pd3" --client-urls="http://0.0.0.0:2379" --advertise-client-urls="http://pd3:2379" --peer-urls="http://0.0.0.0:2380" --advertise-peer-urls="http://pd3:2380" --initial-cluster="pd1=http://pd1:2380,pd2=http://pd2:2380,pd3=http://pd3:2380"

TIDB分布式数据库的部署——使用TiDB为Zabbix构建分布式MySQL数据库支持(使用Docker部署)_第28张图片
TIDB分布式数据库的部署——使用TiDB为Zabbix构建分布式MySQL数据库支持(使用Docker部署)_第29张图片

在这里插入图片描述
(8)启动 TiKV

[root@server1 ~]# docker run -d --name tikv1 \
> --network my_net \
> --ulimit nofile=1000000:1000000 \
> -v /etc/localtime:/etc/localtime:ro \
> -v /data:/data \
>  pingcap/tikv:latest \
> --addr="0.0.0.0:20160" \
> --advertise-addr="tikv1:20160" \
> --data-dir="/data/tikv1" \
> --pd="pd1:2379,pd2:2379,pd3:2379"

[root@server1 ~]# docker run -d --name tikv2 --network my_net  --ulimit nofile=1000000:1000000 -v /etc/localtime:/etc/localtime:ro  -v /data:/data  pingcap/tikv:latest --addr="0.0.0.0:20160" --advertise-addr="tikv2:20160" --data-dir="/data/tikv2" --pd="pd1:2379,pd2:2379,pd3:2379"

[root@server1 ~]# docker run -d --name tikv3 --network my_net  --ulimit nofile=1000000:1000000 -v /etc/localtime:/etc/localtime:ro  -v /data:/data  pingcap/tikv:latest --addr="0.0.0.0:20160" --advertise-addr="tikv3:20160" --data-dir="/data/tikv3" --pd="pd1:2379,pd2:2379,pd3:2379"

TIDB分布式数据库的部署——使用TiDB为Zabbix构建分布式MySQL数据库支持(使用Docker部署)_第30张图片
TIDB分布式数据库的部署——使用TiDB为Zabbix构建分布式MySQL数据库支持(使用Docker部署)_第31张图片
TIDB分布式数据库的部署——使用TiDB为Zabbix构建分布式MySQL数据库支持(使用Docker部署)_第32张图片
(9)启动 TiDB

[root@server1 ~]# docker run -d --name tidb \
> --network my_net \
> -p 3306:4000 \
> -p 10080:10080 \
> -v /etc/localtime:/etc/localtime:ro \
> pingcap/tidb:latest \
> --store=tikv \
> --path="pd1:2379,pd2:2379,pd3:2379"

TIDB分布式数据库的部署——使用TiDB为Zabbix构建分布式MySQL数据库支持(使用Docker部署)_第33张图片
TIDB分布式数据库的部署——使用TiDB为Zabbix构建分布式MySQL数据库支持(使用Docker部署)_第34张图片
(10)查看端口

查看端口,发现开启了3306端口
在这里插入图片描述
TIDB分布式数据库的部署——使用TiDB为Zabbix构建分布式MySQL数据库支持(使用Docker部署)_第35张图片(11)查看我们创建的7个容器分配到的ip(递增分配)
在这里插入图片描述
TIDB分布式数据库的部署——使用TiDB为Zabbix构建分布式MySQL数据库支持(使用Docker部署)_第36张图片
TIDB分布式数据库的部署——使用TiDB为Zabbix构建分布式MySQL数据库支持(使用Docker部署)_第37张图片
TIDB分布式数据库的部署——使用TiDB为Zabbix构建分布式MySQL数据库支持(使用Docker部署)_第38张图片
TIDB分布式数据库的部署——使用TiDB为Zabbix构建分布式MySQL数据库支持(使用Docker部署)_第39张图片
TIDB分布式数据库的部署——使用TiDB为Zabbix构建分布式MySQL数据库支持(使用Docker部署)_第40张图片
TIDB分布式数据库的部署——使用TiDB为Zabbix构建分布式MySQL数据库支持(使用Docker部署)_第41张图片
TIDB分布式数据库的部署——使用TiDB为Zabbix构建分布式MySQL数据库支持(使用Docker部署)_第42张图片
TIDB分布式数据库的部署——使用TiDB为Zabbix构建分布式MySQL数据库支持(使用Docker部署)_第43张图片
TIDB分布式数据库的部署——使用TiDB为Zabbix构建分布式MySQL数据库支持(使用Docker部署)_第44张图片
TIDB分布式数据库的部署——使用TiDB为Zabbix构建分布式MySQL数据库支持(使用Docker部署)_第45张图片
TIDB分布式数据库的部署——使用TiDB为Zabbix构建分布式MySQL数据库支持(使用Docker部署)_第46张图片

TIDB分布式数据库的部署——使用TiDB为Zabbix构建分布式MySQL数据库支持(使用Docker部署)_第47张图片
TIDB分布式数据库的部署——使用TiDB为Zabbix构建分布式MySQL数据库支持(使用Docker部署)_第48张图片
server2上:

(1)安装zabbix前端界面zabbix服务
共享真机的yum源
TIDB分布式数据库的部署——使用TiDB为Zabbix构建分布式MySQL数据库支持(使用Docker部署)_第49张图片
TIDB分布式数据库的部署——使用TiDB为Zabbix构建分布式MySQL数据库支持(使用Docker部署)_第50张图片
TIDB分布式数据库的部署——使用TiDB为Zabbix构建分布式MySQL数据库支持(使用Docker部署)_第51张图片
TIDB分布式数据库的部署——使用TiDB为Zabbix构建分布式MySQL数据库支持(使用Docker部署)_第52张图片

[root@server2 ~]# yum install zabbix-server-mysql zabbix-web-mysql -y

在这里插入图片描述
(2)安装数据库客户端

[root@server2 ~]# yum install mariadb -y    #数据库客户端
[root@server2 ~]# mysql -h 172.25.11.1
MySQL [(none)]> create database zabbix character set utf8 collate utf8_bin;
MySQL [(none)]> CREATE USER 'zabbix'@'%' IDENTIFIED BY 'westos';
MySQL [(none)]> grant all privileges on zabbix.* to zabbix@'%';

[root@server2 ~]# mysql -h 172.25.11.1 -uzabbix -pwestos zabbix
[root@server2 ~]# zcat /usr/share/doc/zabbix-server-mysql-4.0.5/create.sql.gz | mysql -h 172.25.11.1 zabbix    #第一次导入出错,因为导入的文件过大,超过配置文件里的限制。

在这里插入图片描述
TIDB分布式数据库的部署——使用TiDB为Zabbix构建分布式MySQL数据库支持(使用Docker部署)_第53张图片
TIDB分布式数据库的部署——使用TiDB为Zabbix构建分布式MySQL数据库支持(使用Docker部署)_第54张图片
在这里插入图片描述
(3)修改tidb的配置文件

[root@server1 ~]# cd tidb-docker-compose/
[root@server1 tidb-docker-compose]# ls
compose              docker                     docker-compose.yml  pd         tidb-binlog  tispark
config               docker-compose-binlog.yml  docker-swarm.yml    README.md  tidb-vision  tools
dashboard-installer  docker-compose-test.yml    LICENSE             tidb       tikv
[root@server1 tidb-docker-compose]# cd config/
[root@server1 config]# ls
dashboards               overview-dashboard.json  prometheus.yml       tidb.rules.yml       tikv.toml
drainer.toml             pd-dashboard.json        pump.toml            tidb.toml
grafana                  pd.rules.yml             spark-defaults.conf  tikv-dashboard.json
grafana-datasource.json  pd.toml                  tidb-dashboard.json  tikv.rules.yml
[root@server1 config]# vim tidb.toml  #tidb配置文件  119行

TIDB分布式数据库的部署——使用TiDB为Zabbix构建分布式MySQL数据库支持(使用Docker部署)_第55张图片
在这里插入图片描述
(4)修改完后删除之前运行的tidb容器,重新建立一次
TIDB分布式数据库的部署——使用TiDB为Zabbix构建分布式MySQL数据库支持(使用Docker部署)_第56张图片
TIDB分布式数据库的部署——使用TiDB为Zabbix构建分布式MySQL数据库支持(使用Docker部署)_第57张图片
(5)再删除之前的zabbix数据库,重新建立和导入
TIDB分布式数据库的部署——使用TiDB为Zabbix构建分布式MySQL数据库支持(使用Docker部署)_第58张图片
TIDB分布式数据库的部署——使用TiDB为Zabbix构建分布式MySQL数据库支持(使用Docker部署)_第59张图片
TIDB分布式数据库的部署——使用TiDB为Zabbix构建分布式MySQL数据库支持(使用Docker部署)_第60张图片
(6)修改zabbix配置文件并开启服务
在这里插入图片描述
在这里插入图片描述
TIDB分布式数据库的部署——使用TiDB为Zabbix构建分布式MySQL数据库支持(使用Docker部署)_第61张图片
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

测试

浏览器里访问http://172.25.2.2/zabbix
TIDB分布式数据库的部署——使用TiDB为Zabbix构建分布式MySQL数据库支持(使用Docker部署)_第62张图片
TIDB分布式数据库的部署——使用TiDB为Zabbix构建分布式MySQL数据库支持(使用Docker部署)_第63张图片
TIDB分布式数据库的部署——使用TiDB为Zabbix构建分布式MySQL数据库支持(使用Docker部署)_第64张图片
TIDB分布式数据库的部署——使用TiDB为Zabbix构建分布式MySQL数据库支持(使用Docker部署)_第65张图片
TIDB分布式数据库的部署——使用TiDB为Zabbix构建分布式MySQL数据库支持(使用Docker部署)_第66张图片

你可能感兴趣的:(linux运维——企业实战)