标签:null LTP failover duplicate www 插入数据 实际应用 负载均衡 一个
源自 https://www.cnblogs.com/1ning/p/8985999.html
TiDB 是 PingCAP 公司受 Google Spanner / F1 论文启发而设计的开源分布式 HTAP (Hybrid Transactional and Analytical Processing) 数据库,结合了传统的 RDBMS 和 NoSQL 的最佳特性。TiDB 兼容 MySQL,支持无限的水平扩展,具备强一致性和高可用性。TiDB 的目标是为 OLTP (Online Transactional Processing) 和 OLAP (Online Analytical Processing) 场景提供一站式的解决方案
1)高度兼容 MySQL
大多数情况下,无需修改代码即可从 MySQL 轻松迁移至 TiDB,分库分表后的 MySQL 集群亦可通过 TiDB 工具进行实时迁移。
2)水平弹性扩展
通过简单地增加新节点即可实现 TiDB 的水平扩展,按需扩展吞吐或存储,轻松应对高并发、海量数据场景。
3)分布式事务
TiDB 100% 支持标准的 ACID 事务。
4)真正金融级高可用
相比于传统主从 (M-S) 复制方案,基于 Raft 的多数派选举协议可以提供金融级的 100% 数据强一致性保证,且在不丢失大多数副本的前提下,可以实现故障的自动恢复 (auto-failover),无需人工介入。
5)一站式 HTAP 解决方案
TiDB 作为典型的 OLTP 行存数据库,同时兼具强大的 OLAP 性能,配合 TiSpark,可提供一站式 HTAP 解决方案,一份存储同时处理 OLTP & OLAP,无需传统繁琐的 ETL 过程。
6)云原生 SQL 数据库
TiDB 是为云而设计的数据库,同 Kubernetes 深度耦合,支持公有云、私有云和混合云,使部署、配置和维护变得十分简单。
不支持的特性:视图、存储过程、触发器、自定义函数、外键约束、全文索引、空间索引、非UTF-8字符集。与我们实际应用不冲突。
1)TiDB 的自增 ID (Auto Increment ID) 只保证自增且唯一,并不保证连续分配。TiDB 目前采用批量分配的方式,所以如果在多台 TiDB 上同时插入数据,分配的自增 ID 会不连续
2)TiDB 支持常用的 MySQL 内建函数,但是不是所有的函数都已经支持,具体请参考语法文档
3)TiDB 实现了 F1 的异步 Schema 变更算法,DDL 执行过程中不会阻塞线上的 DML 操作。目前支持的DDL包括数据库、表、索引、列的创建和删除操作以及列的修改操作。TiDB对列的修改有限制,如不支持从null改成not null,不支持对enum列修改等
TiDB 使用乐观事务模型,在执行 Update、Insert、Delete 等语句时,只有在提交过程中才会检查写写冲突,而不是像 MySQL 一样使用行锁来避免写写冲突。所以业务端在执行 SQL 语句后,需要注意检查 commit 的返回值,即使执行时没有出错,commit的时候也可能会出错
1)TiDB Server
TiDB Server 负责接收 SQL 请求,处理 SQL 相关的逻辑,并通过 PD 找到存储计算所需数据的 TiKV 地址,与 TiKV 交互获取数据,最终返回结果。 TiDB Server 是无状态的,其本身并不存储数据,只负责计算,可以无限水平扩展,可以通过负载均衡组件(如LVS、HAProxy 或 F5)对外提供统一的接入地址
2)Placement Driver
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 为单位进行调度
1)水平扩展
无限水平扩展是 TiDB 的一大特点,这里说的水平扩展包括两方面:计算能力和存储能力。TiDB Server 负责处理 SQL 请求,随着业务的增长,可以简单的添加 TiDB Server 节点,提高整体的处理能力,提供更高的吞吐。TiKV 负责存储数据,随着数据量的增长,可以部署更多的 TiKV Server 节点解决数据量的问题(自动分库)。PD 会在 TiKV 节点之间以 Region 为单位做调度,将部分数据迁移到新加的节点上。所以在业务的早期,可以只部署少量的服务实例(推荐至少部署 3 个 TiKV, 3 个 PD,2 个 TiDB),随着业务量的增长,按照需求添加 TiKV 或者 TiDB 实例
2)高可用
高可用是 TiDB 的另一大特点,TiDB/TiKV/PD 这三个组件都能容忍部分实例失效,不影响整个集群的可用性。下面分别说明这三个组件的可用性、单个实例失效后的后果以及如何恢复。
TiDB 是无状态的,推荐至少部署两个实例,前端通过负载均衡组件对外提供服务。当单个实例失效时,会影响正在这个实例上进行的 Session,从应用的角度看,会出现单次请求失败的情况,重新连接后即可继续获得服务。单个实例失效后,可以重启这个实例或者部署一个新的实例。
PD 是一个集群,通过 Raft 协议保持数据的一致性,单个实例失效时,如果这个实例不是 Raft 的 leader,那么服务完全不受影响;如果这个实例是 Raft 的 leader,会重新选出新的 Raft leader,自动恢复服务。PD 在选举的过程中无法对外提供服务,这个时间大约是3秒钟。推荐至少部署三个 PD 实例,单个实例失效后,重启这个实例或者添加新的实例。
TiKV 是一个集群,通过 Raft 协议保持数据的一致性(副本数量可配置,默认保存三副本),并通过 PD 做负载均衡调度。单个节点失效时,会影响这个节点上存储的所有 Region。对于 Region 中的 Leader 结点,会中断服务,等待重新选举;对于 Region 中的 Follower 节点,不会影响服务。当某个 TiKV 节点失效,并且在一段时间内(默认 10 分钟)无法恢复,PD 会将其上的数据迁移到其他的 TiKV 节点上。
3)小彩蛋
兼容 MySQL 5.7 及以上,同时更好地支持文档类型存储,表中包含一个 JSON 字段来存储复杂的信息
除了插入、查询外,对 JSON 的修改也是支持的。目前支持的 MySQL 5.7 的 JSON 函数:JSON_EXTRACT、JSON_ARRAY、JSON_OBJECT、JSON_SET、JSON_REPLACE、JSON_INSERT、JSON_REMOVE、JSON_TYPE、JSON_UNQUOTE
官方文档:https://pingcap.com/docs-cn/stable/how-to/get-started/deploy-tidb-from-docker-compose/
要求:
Docker(17.06.0 及以上版本)
Docker Compose
Git
#关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
#centos默认装1.13的docker,卸载原来的docker13
yum -y remove docker*
rm -rf /var/lib/docker/
#安装最新的docker,使用阿里云
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum list docker-ce --showduplicates #查询新的docker版本
yum install docker-ce #不指定默认拉取最新的docker
systemctl start docker
docker version
Client: Docker Engine - Community
Version: 19.03.5
API version: 1.40
Go version: go1.12.12
Git commit: 633a0ea
Built: Wed Nov 13 07:25:41 2019
OS/Arch: linux/amd64
Experimental: false
Server: Docker Engine - Community
Engine:
Version: 19.03.5
API version: 1.40 (minimum version 1.12)
Go version: go1.12.12
Git commit: 633a0ea
Built: Wed Nov 13 07:24:18 2019
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.2.10
GitCommit: b34a5c8af56e510852c35414db4c1f4fa6172339
runc:
Version: 1.0.0-rc8+dev
GitCommit: 3e425f80a8c931f88e6d94a8c831b9d5aa481657
docker-init:
Version: 0.18.0
GitCommit: fec3683
# 安装docker-compose 推荐使用pip3安装
yum -y install epel-release
yum -y install python3-pip
pip3 install docker-compose
# 克隆tidb
git clone https://github.com/pingcap/tidb-docker-compose.git
# 拉取镜像,启动容器,启动tidb集群
cd tidb-docker-compose && docker-compose pull && docker-compose up -d
docker ps
[root@tidb ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4d53e60e0db9 pingcap/tispark:latest "/opt/spark/sbin/sta…" 42 minutes ago Up 42 minutes 0.0.0.0:38081->38081/tcp tidb-docker-compose_tispark-slave0_1
d930089fc09a pingcap/tispark:latest "/opt/spark/sbin/sta…" 42 minutes ago Up 42 minutes 0.0.0.0:7077->7077/tcp, 0.0.0.0:8080->8080/tcp tidb-docker-compose_tispark-master_1
2a8767b06cea pingcap/tidb:latest "/tidb-server --stor…" 42 minutes ago Up 42 minutes 0.0.0.0:4000->4000/tcp, 0.0.0.0:10080->10080/tcp tidb-docker-compose_tidb_1
d0ce7d9c064c pingcap/tikv:latest "/tikv-server --addr…" 42 minutes ago Up 42 minutes 20160/tcp tidb-docker-compose_tikv1_1
0dda036cd5ec pingcap/tikv:latest "/tikv-server --addr…" 42 minutes ago Up 42 minutes 20160/tcp tidb-docker-compose_tikv0_1
28636750301b pingcap/tikv:latest "/tikv-server --addr…" 42 minutes ago Up 42 minutes 20160/tcp tidb-docker-compose_tikv2_1
52d03f700e12 pingcap/tidb-vision:latest "/bin/sh -c 'sed -i …" 42 minutes ago Up 42 minutes 80/tcp, 443/tcp, 2015/tcp, 0.0.0.0:8010->8010/tcp tidb-docker-compose_tidb-vision_1
70289d6934f1 prom/prometheus:v2.2.1 "/bin/prometheus --l…" 42 minutes ago Up 42 minutes 0.0.0.0:9090->9090/tcp tidb-docker-compose_prometheus_1
07c8e05ea67c grafana/grafana:6.0.1 "/run.sh" 42 minutes ago Up 42 minutes 0.0.0.0:3000->3000/tcp tidb-docker-compose_grafana_1
78470c2e818b pingcap/pd:latest "/pd-server --name=p…" 42 minutes ago Up 42 minutes 2380/tcp, 0.0.0.0:32770->2379/tcp tidb-docker-compose_pd0_1
abab7400fbfa prom/pushgateway:v0.3.1 "/bin/pushgateway --…" 42 minutes ago Up 42 minutes 9091/tcp tidb-docker-compose_pushgateway_1
48e9c9ebb24d pingcap/pd:latest "/pd-server --name=p…" 42 minutes ago Up 42 minutes 2380/tcp, 0.0.0.0:32768->2379/tcp tidb-docker-compose_pd2_1
ccca0c2c6af6 pingcap/pd:latest "/pd-server --name=p…" 42 minutes ago Up 42 minutes 2380/tcp, 0.0.0.0:32769->2379/tcp
# 可以用mysql进行连接
yum -y install wget
wget http://dev.mysql.com/get/mysql57-community-release-el7-7.noarch.rpm
rpm -ivh mysql57-community-release-el7-7.noarch.rpm
yum -y install mysql-community-server
systemctl start mysql
#命令行连接tidb,只需要指定端口,不需要密码
mysql -h 127.0.0.1 -P 4000
#默认有4个数据库
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| INFORMATION_SCHEMA |
| PERFORMANCE_SCHEMA |
| mysql |
| test |
+--------------------+
4 rows in set (0.00 sec)
#也可以使用navicat这些工具进行连接,只需要指定4000端口,不用密码
#grafana
http://192.168.1.160:3000/?orgId=1
用户名密码都是admin
#停止docker-compose删除容器卷组还原环境:
cd tidb-docker-compose/
docker-compose down
docker volume rm `docker volume ls -q`
标签:null LTP failover duplicate www 插入数据 实际应用 负载均衡 一个
原文地址:https://www.cnblogs.com/0916m/p/11888488.html