TiDB 是新一代开源分布式 NewSQL 数据库,模型受 Google Spanner / F1 论文的启发, 实现了自动的水平伸缩,强一致性的分布式事务,基于 Raft 算法的多副本复制等重要 NewSQL 特性。 TiDB 结合了 RDBMS 和 NoSQL 的优点,部署简单,在线弹性扩容和异步表结构变更不影响业务, 真正的异地多活及自动故障恢复保障数据安全,同时兼容 MySQL 协议,使迁移使用成本降到极低。
—PingCAP
TiDB 是 PingCAP 公司基于 Google Spanner / F1 论文实现的开源分布式 NewSQL 数据库,具备如下 NewSQL 核心特性:
-
SQL支持 (TiDB 是 MySQL 兼容的)
-
水平线性弹性扩展
-
分布式事务
-
跨数据中心数据强一致性保证
-
故障自恢复的高可用
一个完整的 TiDB 集群包括 PD,TiKV 以及 TiDB。
获取TiDB 官方 Binary
|
# CentOS 6 请使用tidb-latest-linux-amd64-centos6
# 下载压缩包
wget http://download.pingcap.org/tidb-latest-linux-amd64.tar.gz
wget http://download.pingcap.org/tidb-latest-linux-amd64.sha256
# 检查文件完整性,返回 ok 则正确
sha256sum -c tidb-latest-linux-amd64.sha256
# 解开压缩包 tar -xzf tidb-latest-linux-amd64.tar.gz
cd tidb-latest-linux-amd64
|
在 Archlinux 下可以使用AUR中的tidb-bin-nightly包。对于大多数发行版,官方的二进制都能完美的工作。
可以使用-V命令查询当前二进制的版本、编译时间。
部署TiDB
我的测试环境有三台机器,为方便起见做了如下配置
|
export NODE1=192.168.233.1
export NODE2=192.168.233.2
export NODE3=192.168.233.3
|
单节点部署
官方文档参考
启动TiDB需要按顺序启动 PD -> TiKV -> TiDB
|
./bin/pd-server --name=pd1 --data-dir=pd1 --client-urls="http://$NODE1:2379" --peer-urls="http://$NODE1:2380" --initial-cluster="pd1=http://$NODE1:2380"
./bin/tikv-server --pd="$NODE1:2379" --addr="$NODE1:20160" --store=tikv1
./bin/tidb-server --store=tikv --path="$NODE1:2379"
|
在服务器上部署的时候,可以在nohup或者tmux中启动。笔者推荐使用基于tmux的byobu以方便管理与监控。
在以受限用户运行tikv的时候,可能会遇到这样的错误
此时可以选择以root用户启动或在配置文件中按实际情况指定RocksDB的max-open-files。
全部启动完成后,就可以使用mysql客户端连接了。TiDB默认的MySQL监听端口是0.0.0.0:4000
添加与卸载节点
官方文档参考
添加pd节点
在两台机器上分别启动pd节点并加入集群
|
./bin/pd-server --name=pd2 --client-urls="http://$NODE2:2379" --peer-urls="http://$NODE2:2380" --join="http://$NODE1:2379"
./bin/pd-server --name=pd3 --client-urls="http://$NODE3:2379" --peer-urls="http://$NODE3:2380" --join="http://$NODE1:2379"
|
添加tikv节点
|
./bin/tikv-server --pd="$NODE2:2379" --addr="$NODE2:20160" --store=tikv2
./bin/tikv-server --pd="$NODE3:2379" --addr="$NODE3:20160" --store=tikv3
|
可以使用pd-ctl查看当前集群状况
删除节点
可以用pd-ctl进行,或使用PD API
多节点集群模式部署
官方文档参考
在三个机器上分别启动pd实例
|
./bin/pd-server --name=pd1 --data-dir=pd1 --client-urls="http://$NODE1:2379" --peer-urls="http://$NODE1:2380" --initial-cluster="pd1=http://$NODE1:2380,pd2=http://$NODE2:2380,pd3=http://$NODE3:2380"
./bin/pd-server --name=pd2 --data-dir=pd2 --client-urls="http://$NODE2:2379" --peer-urls="http://$NODE2:2380" --initial-cluster="pd1=http://$NODE1:2380,pd2=http://$NODE2:2380,pd3=http://$NODE3:2380"
./bin/pd-server --name=pd3 --data-dir=pd3 --client-urls="http://$NODE3:2379" --peer-urls="http://$NODE3:2380" --initial-cluster="pd1=http://$NODE1:2380,pd2=http://$NODE2:2380,pd3=http://$NODE3:2380"
|
pd启动完成后,启动tikv实例
|
./bin/tikv-server --pd="$NODE1:2379" --addr="$NODE1:20160" --store=tikv1
./bin/tikv-server --pd="$NODE2:2379" --addr="$NODE2:20160" --store=tikv2
./bin/tikv-server --pd="$NODE3:2379" --addr="$NODE3:20160" --store=tikv3
|
启动tidb
|
./bin/tidb-server --store=tikv --path="$NODE1:2379"
|
开始使用TiDB
你可以从 MySQL 无缝切换到 TiDB。如果您现有的业务已经基于 MySQL 开发,那么大多数情况下无需修改代码即可直接替换单机的 MySQL。
更多信息可以参考官方文档