TiDB 是新一代开源分布式 NewSQL 数据库,模型受 Google Spanner / F1 论文的启发, 实现了自动的水平伸缩,强一致性的分布式事务,基于 Raft 算法的多副本复制等重要 NewSQL 特性。 TiDB 结合了 RDBMS 和 NoSQL 的优点,部署简单,在线弹性扩容和异步表结构变更不影响业务, 真正的异地多活及自动故障恢复保障数据安全,同时兼容 MySQL 协议,使迁移使用成本降到极低。
TiDB 是 PingCAP 公司基于 Google Spanner / F1 论文实现的开源分布式 NewSQL 数据库,具备如下 NewSQL 核心特性:
- SQL支持 (TiDB 是 MySQL 兼容的)
- 水平线性弹性扩展
- 分布式事务
- 跨数据中心数据强一致性保证
- 故障自恢复的高可用
一个完整的 TiDB 集群包括 PD,TiKV 以及 TiDB。
获取TiDB 官方 Binary
1 2 3 4 5 6 7 8 |
# 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
我的测试环境有三台机器,为方便起见做了如下配置
1 2 3 |
export NODE1=192.168.233.1 export NODE2=192.168.233.2 export NODE3=192.168.233.3 |
单节点部署
启动TiDB需要按顺序启动 PD -> TiKV -> TiDB
1 2 3 4 5 |
./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节点并加入集群
1 2 3 |
./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节点
1 2 3 |
./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实例
1 2 3 4 5 |
./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实例
1 2 3 4 5 |
./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
1 |
./bin/tidb-server --store=tikv --path="$NODE1:2379" |
开始使用TiDB
你可以从 MySQL 无缝切换到 TiDB。如果您现有的业务已经基于 MySQL 开发,那么大多数情况下无需修改代码即可直接替换单机的 MySQL。
更多信息可以参考官方文档
[Dr.Lib]跑起一个TiDB by Liqueur Librazy is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.