PINGCAP-tidb入门到跑路

TiDB 是 PingCAP 公司基于 Google Spanner / F1 论文实现的分布式 NewSQL 数据库。

TiDB 具备如下 NewSQL 核心特性

  • SQL支持 (TiDB 是 MySQL 兼容的)

  • 水平线性弹性扩展(容量、并发、吞吐量)

  • 分布式事务,数据强一致性保证

  • 故障自恢复的高可用 (auto failover)

TiDB 是传统的数据库中间件、数据库分库分表等 Sharding 方案非常优雅而理想的替换和解决方案。

TiDB 整体架构

PINGCAP-tidb入门到跑路_第1张图片

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 节点失效,并且在一段时间内(默认 10 分钟)无法恢复,PD 会将其上的数据迁移到其他的 TiKV 节点上。

部署建议

TiDB 集群各个组件的硬件消耗情况及推荐配置

组件 消耗硬件资源 推荐硬件配置
TiDB CPU、内存 8+ 核/16G+ 内存
TiKV CPU、内存、磁盘 IO 8+ 核/16G+ 内存/200G+ 硬盘(建议 SSD)
PD CPU、内存、磁盘 IO 8+ 核/16G+ 内存/200G+ 硬盘(建议 SSD)

备注:

  • TiKV 硬盘大小建议不要超过500G(防止硬盘损坏时,数据恢复耗时过长)

整体部署方案

组件 生产环境所需机器情况 测试环境所需机器情况
TiDB 至少 2 台,保证高可用,可按所需并发和吞吐,动态增加机器 可以 1 台
PD 必须 3 台,保证高可用 可以 1 台
TiKV 至少 3 台,保证高可用,可按所需计算资源和存储容量,动态增加机器 至少 3 台

备注:

  • TiDB 实例可以和任意一台 PD 部署在同一台机器,也可以单独部署。

  • PD 和 TiKV 实例,建议每个实例单独部署一个硬盘,避免 IO 冲突,影响性能。

  • TiDB 和 TiKV 实例,建议分开部署,以免竞争 CPU 资源,影响性能。

举例:生产环境部署(推荐至少 6 台机器)

机器1 机器2 机器3 机器4 机器5 机器6
TiKV1 TiKV2 TiKV3 PD1 PD2 PD3
- - - TiDB1 TiDB2 -

其中 TiDB1 和 TiDB2 通过负载均衡组件对外统一提供 SQL 接口

举例:测试验证环境部署(推荐至少 4 台机器)

机器1 机器2 机器3 机器4
TiKV1 TiKV2 TiKV3 PD1
- - - TiDB1

架构图:

PINGCAP-tidb入门到跑路_第2张图片

准备前的工作:

A、同步系统时间

B、是否把刷屏日志写到一个文件里,可在启动命令后面追加到一个文件

/tmp/sh-error1.log 2>&1 &

C、不同版本需要的包glibc

D、启动服务开启守护进程要加nohup,但实际没效果

E、系统版本为CENTOS6

F、包下载

G、IPTABLES 设置,需要开通集群使用的端口或者直接关闭

http://down.51cto.com/data/2258987  ##CENTOS7

http://down.51cto.com/data/2259295   ##CENTOS6

http://down.51cto.com/data/2259848   ##pd tikv配置文件 (旧TIKV配置可不用)

http://down.51cto.com/data/2444589  ##tikv配置文件(新TIKV配置优化参数,在初始化需要修改个参数capacity=1GB*1024*1024*1024)



1、  下载包,解压后把命令存放在/usr/bin/目录下

#ln –s ……..

2、 修改57pd配置文件,并启动:##默认参数不展示

name = "tidb_pd"

data-dir= "/home/tidb_pd"

cluster-id=1921681557 ##是否可以写在这里

client-urls= "http://192.168.15.57:2379"

advertise-client-urls= ""

peer-urls= "http://192.168.15.57:2380"

advertise-peer-urls="http://192.168.15.57:2380"

initial-cluster= "tidb_pd=http://192.168.15.57:2380"

initial-cluster-state= "new"

lease = 1

log-level= "error"

tso-save-interval= "3s"

max-peer-count= 3

[balance]

min-capacity-used-ratio= 0.1

max-capacity-used-ratio= 0.9

address =""

说明配置文件生效

 [root@nod2 conf]# ll/home/tidb_pd/member/

总用量 8

drwx------2 root root 4096 11 17 10:20 snap

drwx------2 root root 4096 11 17 10:20 wal

#/usr/local/tidb/bin/pd-server–config=/usr/local/tidb/conf/pd.toml  &

###

当前窗口关闭后,服务也跟着关闭,pd开启守护无效

检查是否启动OK:

root@nod2 conf]# netstat -nletp |grep pd-server

tcp 0  0192.168.15.57:2379    0.0.0.0:* ……

tcp 0  0192.168.15.57:2380   0.0.0.0:*  ……….

3、  修改三个节点的tikv配置文件并 并启动  #####默认参数不展示

addr ="192.168.15.13:20160" #写各个节点IP

advertise-addr= ""

store = "/home/tikv13" 

log-level = "debug"  

job = "tikv_13"

endpoints ="192.168.15.57:2379" #PDIP

#/usr/local/tidb/bin/tikv-server--config=/usr/local/tidb/conf/tikv.toml &

此方式启动没办法做到后台后台守护,需要在启动前加nohup

#nohup /usr/local/tidb/bin/tikv-server--config=/usr/local/tidb/conf/tikv.toml>>/tmp/aa.tx 2>&1  &

直接这样启动 当前会话窗口不停的刷日志。

.rs:836 - DEBUG - [region 2] 7 send raft msgMsgAppendResponse[size: 11] from 7 to 3

2016-11-17 10:45:04,508 store.rs:603 - DEBUG - [region 2]handle raft message MsgAppend, from 3 to 7

2016-11-17 10:45:04,508 peer.rs:499 - DEBUG - [region 2] 7handle raft ready

2016-11-17 10:45:04,508 peer_storage.rs:444 - DEBUG - [region2] 7 append 1 entries

2016-11-17 10:45:04,508 peer.rs:836 - DEBUG - [region 2] 7send raft msg MsgAppendResponse[size: 11] from 7 to 3

2016-11-17 10:45:04,509 store.rs:603 - DEBUG - [region 2]handle raft message MsgAppend, from 3 to 7

2016-11-17 10:45:04,509 peer.rs:499 - DEBUG - [region 2] 7handle raft ready

2016-11-17 10:45:04,509 peer.rs:836 - DEBUG - [region 2] 7send raft msg MsgAppendResponse[size: 11] from 7 to 3

2016-11-17 10:45:04,509 peer.rs:1012 - DEBUG - [region 2] 7applied command with uuidUuid("7d9aeeca-950e-4ccd-8096-948ec80356bd") at log index 324

2016-11-17 10:45:04,510 store.rs:603 - DEBUG - [region 2]handle raft message MsgAppend, from 3 to 7

2016-11-17 10:45:04,510 peer.rs:499 - DEBUG - [region 2] 7handle raft ready

2016-11-17 10:45:04,510 peer.rs:836 - DEBUG - [region 2] 7send raft msg MsgAppendResponse[size: 11] from 7 to 3

2016-11-17 10:45:04,511 peer.rs:1012 - DEBUG - [region 2] 7applied command with uuidUuid("ca947ae9-675e-469f-8fa6-05ebdb48660f") at log index 325

2016-11-17 10:45:04,512 store.rs:603 - DEBUG - [region 2]handle raft message MsgAppend, from 3 to 7

2016-11-17 10:45:04,512 peer.rs:499 - DEBUG - [region 2] 7handle raft ready

2016-11-17 10:45:04,512 peer_storage.rs:444 - DEBUG - [region2] 7 append 1 entries

2016-11-17 10:45:04,512 peer.rs:836 - DEBUG - [region 2] 7send raft msg MsgAppendResponse[size: 11] from 7 to 3

2016-11-17 10:45:04,513 store.rs:603 - DEBUG - [region 2]handle raft message MsgAppend, from 3 to 7

2016-11-17 10:45:04,513 peer.rs:499 - DEBUG - [region 2] 7handle raft ready

2016-11-17 10:45:04,513 peer_storage.rs:444 - DEBUG - [region2] 7 append 1 entries

2016-11-17 10:45:04,513 peer.rs:836 - DEBUG - [region 2] 7send raft msg MsgAppendResponse[size: 11] from 7 to 3

2016-11-17 10:45:04,513 store.rs:603 - DEBUG - [region 2]handle raft message MsgAppend, from 3 to 7

2016-11-17 10:45:04,513 peer.rs:499 - DEBUG - [region 2] 7handle raft ready

2016-11-17 10:45:04,513 peer.rs:836 - DEBUG - [region 2] 7send raft msg MsgAppendResponse[size: 11] from 7 to 3

2016-11-17 10:45:04,513 peer.rs:1012 - DEBUG - [region 2] 7applied command with uuidUuid("685e2718-cbf9-4618-828d-7a6a89f769c8") at log index 326

2016-11-17 10:45:04,514 store.rs:603 - DEBUG - [region 2]handle raft message MsgAppend, from 3 to 7

2016-11-17 10:45:04,514 peer.rs:499 - DEBUG - [region 2] 7handle raft ready

2016-11-17 10:45:04,514 peer.rs:836 - DEBUG - [region 2] 7send raft msg MsgAppendResponse[size: 11] from 7 to 3

2016-11-17 10:45:04,514 peer.rs:1012 - DEBUG - [region 2] 7applied command with uuidUuid("a3467d45-abc4-46ab-b7f6-c5162ce51eec") at log index 327

2016-11-17 10:45:04,699 store.rs:603 - DEBUG - [region 2]handle raft message MsgHeartbeat, from 3 to 7

2016-11-17 10:45:04,699 peer.rs:499 - DEBUG - [region 2] 7handle raft ready

2016-11-17 10:45:04,699 peer.rs:836 - DEBUG - [region 2] 7send raft msg MsgHeartbeatResponse[size: 10] from 7 to 3

2016-11-17 10:45:06,507 store.rs:603 - DEBUG - [region 2]handle raft message MsgAppend, from 3 to 7

2016-11-17 10:45:06,507 peer.rs:499 - DEBUG - [region 2] 7handle raft ready

2016-11-17 10:45:06,507 peer_storage.rs:444 - DEBUG - [region2] 7 append 1 entries

2016-11-17 10:45:06,508 peer.rs:836 - DEBUG - [region 2] 7send raft msg MsgAppendResponse[size: 11] from 7 to 3

2016-11-17 10:45:06,508 store.rs:603 - DEBUG - [region 2]handle raft message MsgAppend, from 3 to 7

2016-11-17 10:45:06,508 peer.rs:499 - DEBUG - [region 2] 7handle raft ready

2016-11-17 10:45:06,508 peer_storage.rs:444 - DEBUG - [region2] 7 append 1 entries

2016-11-17 10:45:06,508 peer.rs:836 - DEBUG - [region 2] 7send raft msg MsgAppendResponse[size: 11] from 7 to 3

2016-11-17 10:45:06,509 store.rs:603 - DEBUG - [region 2] handleraft message MsgAppend, from 3 to 7

2016-11-17 10:45:06,509 peer.rs:499 - DEBUG - [region 2] 7handle raft ready

2016-11-17 10:45:06,509 peer.rs:836 - DEBUG - [region 2] 7send raft msg MsgAppendResponse[size: 11] from 7 to 3

2016-11-17 10:45:06,509 peer.rs:1012 - DEBUG - [region 2] 7applied command with uuidUuid("5edfc7e5-e449-42dc-a4a8-7ff660172792") at log index 328

2016-11-17 10:45:06,510 store.rs:603 - DEBUG - [region 2]handle raft message MsgAppend, from 3 to 7

2016-11-17 10:45:06,510 peer.rs:499 - DEBUG - [region 2] 7handle raft ready

2016-11-17 10:45:06,510 peer.rs:836 - DEBUG - [region 2] 7send raft msg MsgAppendResponse[size: 11] from 7 to 3

2016-11-17 10:45:06,510 peer.rs:1012 - DEBUG - [region 2] 7applied command with uuid Uuid("4e5d2470-0671-443f-a974-da4e9a1abbed")at log index 329

2016-11-17 10:45:06,512 store.rs:603 - DEBUG - [region 2]handle raft message MsgAppend, from 3 to 7

2016-11-17 10:45:06,512 peer.rs:499 - DEBUG - [region 2] 7handle raft ready

2016-11-17 10:45:06,512 peer_storage.rs:444 - DEBUG - [region2] 7 append 1 entries

2016-11-17 10:45:06,512 peer.rs:836 - DEBUG - [region 2] 7send raft msg MsgAppendResponse[size: 11] from 7 to 3

2016-11-17 10:45:06,513 store.rs:603 - DEBUG - [region 2]handle raft message MsgAppend, from 3 to 7

2016-11-17 10:45:06,513 peer.rs:499 - DEBUG - [region 2] 7handle raft ready

2016-11-17 10:45:06,513 peer_storage.rs:444 - DEBUG - [region2] 7 append 1 entries

2016-11-17 10:45:06,513 peer.rs:836 - DEBUG - [region 2] 7send raft msg MsgAppendResponse[size: 11] from 7 to 3

2016-11-17 10:45:06,513 store.rs:603 - DEBUG - [region 2]handle raft message MsgAppend, from 3 to 7

2016-11-17 10:45:06,513 peer.rs:499 - DEBUG - [region 2] 7handle raft ready

2016-11-17 10:45:06,513 peer.rs:836 - DEBUG - [region 2] 7send raft msg MsgAppendResponse[size: 11] from 7 to 3

2016-11-17 10:45:06,514 peer.rs:1012 - DEBUG - [region 2] 7applied command with uuidUuid("f2cbe0a6-ec1a-4c51-97dd-fdf473843423") at log index 330

2016-11-17 10:45:06,514 store.rs:603 - DEBUG - [region 2]handle raft message MsgAppend, from 3 to 7

2016-11-17 10:45:06,514 peer.rs:499 - DEBUG - [region 2] 7handle raft ready

2016-11-17 10:45:06,514 peer.rs:836 - DEBUG - [region 2] 7send raft msg MsgAppendResponse[size: 11] from 7 to 3

2016-11-17 10:45:06,515 peer.rs:1012 - DEBUG - [region 2] 7applied command with uuidUuid("6f78cf76-9db9-4eab-8368-c9805f2f64a3") at log index 331

2016-11-17 10:45:06,699 store.rs:603 - DEBUG - [region 2]handle raft message MsgHeartbeat, from 3 to 7

2016-11-17 10:45:06,699 peer.rs:499 - DEBUG - [region 2] 7handle raft ready

2016-11-1710:45:06,699 peer.rs:836 - DEBUG - [region 2] 7 send raft msgMsgHeartbeatResponse[size: 10] from 7 to 3

4、  启动tidb ##

#nohup /usr/local/tidb/bin/tidb-server--store=tikv --path="192.168.15.57:2379" &

当前窗口关闭后,服务也跟着关闭,tidb开启守护无效

##--store=tikv为分布式是的引擎

Tidb这样也会不停的刷日志

2016/11/17 10:47:48 session.go:590:[info] [0] new txn:387802953988964358

[root@nod2 conf]# netstat-nltp |grep tidb

tcp        0     0 :::10080                   :::*                       LISTEN     

tcp        0     0 :::4000                    :::*                        LISTEN     

4000:为服务监听端口

10080:服务状态监听端口,此端口展示

###基础操作tidb

TiDB内部数据用的,包括prometheus统计

http://192.168.15.57:10080/debug/pprof

PINGCAP-tidb入门到跑路_第3张图片

http://192.168.15.57:10080/metrics

PINGCAP-tidb入门到跑路_第4张图片

查看tidb状态信息:http://192.168.15.57:10080/status

{"connections":1,"version":"5.7.1-TiDB-1.0","git_hash":"01dde4433a0e5aabb183b3f6d00bd2f43107421a"}

查看集群状态,集群状态通过查看pd服务信息既可看到tikv信息

http://192.168.15.57:2379/pd/api/v1/stores

或者在本地查看 直接加curl 加地址

PINGCAP-tidb入门到跑路_第5张图片

 

首次登录在tidb-server端:mysql –h192.168.15.57 –P4000 -uroot

1、  给添加连接用户,和MySQL点区别,不能通过直接grant直接加

mysql> createuser 'dlan'@'%' identified by 'root123'

    -> ;

Query OK, 1 rowaffected (0.02 sec)

mysql> grant allprivileges on *.* to 'dlan'@'%';

Query OK, 1 rowaffected (0.02 sec)


mysql> exit

Bye

[root@nod2 ~]# mysql-h 192.168.15.57 -P4000 -udlan -p

Enter password:

mysql> create database tidb;



你可能感兴趣的:(HA,PINGCAP入门到跑路,tidb,pd,tikv)