分布式数据库TiDB的部署

转自:https://my.oschina.net/Kenyon/blog/908370

一、环境

CentOS Linux release 7.3.1611 (Core)
172.26.11.91  pd & tidb
172.26.11.92  tikv
172.26.11.93  tikv
172.26.11.94  tikv

二、安装

分别在4台服务器上上传安装包

wget http://download.pingcap.org/tidb-latest-linux-amd64.tar.gz
tar -xzf tidb-latest-linux-amd64.tar.gz
cd tidb-latest-linux-amd64
mkdir -p /data/tidb/log
ln -s /root/software/tidb/tidb-latest-linux-amd64/bin/pd-tso-bench /usr/bin
ln -s /root/software/tidb/tidb-latest-linux-amd64/bin/tikv-server  /usr/bin/
ln -s /root/software/tidb/tidb-latest-linux-amd64/bin/tidb-server  /usr/bin/
ln -s /root/software/tidb/tidb-latest-linux-amd64/bin/pd-server    /usr/bin/
ln -s /root/software/tidb/tidb-latest-linux-amd64/bin/pd-ctl       /usr/bin/

三、配置使用

1.按照顺序启动

在91上启动pd服务
pd-server    --name=pd1                                     --多个pd以不同名字命名
             --data-dir=/data/tidb/pd                       --pd路径
             --client-urls="http://172.26.11.91:2379"
             --peer-urls="http://172.26.11.91:2380"
             --initial-cluster="pd1=http://172.26.11.91:2380" --多个pd以逗号分隔
             --log-file=/data/tidb/log/pd.log  &

在92,93,94上启动tikv
tikv-server   --pd="172.26.11.91:2379"               --addr="172.26.11.92:20160"               --data-dir=/data/tidb/tikv               --log-file=/data/tidb/log/tikv.log

tikv-server   --pd="172.26.11.91:2379"               --addr="172.26.11.93:20160"               --data-dir=/data/tidb/tikv               --log-file=/data/tidb/log/tikv.log

tikv-server   --pd="172.26.11.91:2379"               --addr="172.26.11.94:20160"               --data-dir=/data/tidb/tikv \
              --log-file=/data/tidb/log/tikv.log &

在91上启动tipd服务
tidb-server    --store=tikv \                  --tikv引擎允许分布式存储,其他如LevelDB等是本地存储
               --path="172.26.11.91:2379"                --log-file=/data/tidb/log/tidb.log  &

2.登陆使用

[root@test05 ~]# mysql -h 172.26.11.91 -P 4000 -u root -D test
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 7
Server version: 5.7.1-TiDB-1.0 MySQL Community Server (GPL)

Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type ‘help;‘ or ‘\h‘ for help. Type ‘\c‘ to clear the current input statement.

mysql> create database db_kenyon;
Query OK, 0 rows affected (2.02 sec)

mysql> use db_kenyon;
Database changed
mysql> create table tbl_kenyon(user_code varchar(64) primary key,user_name varchar(32),ctime timestamp);
Query OK, 0 rows affected (2.03 sec)

mysql> insert into tbl_kenyon values(‘01‘,‘qiaofeng‘,now()),(‘02‘,‘murong‘,now());
Query OK, 2 rows affected (0.01 sec)

mysql>

三、高可用

tidb的数据都是保存在tikv节点上面,比如上面配置了3套tikv,每套tikv都是独立的,数据保存的方式和传统关系型不一样的是,在tidb里面或者说tikv里面是映射成kv模式存储的

把92的tikv人为挂掉,此时数据库的使用会受影响,简单的一个查询就会被挂起,直到切换成功

--切换过程
mysql> select * from tbl_kenyon;
+----+-----------+---------------------+
| id | cname     | ctime               |
+----+-----------+---------------------+
|  1 | qiaofeng  | 2017-05-23 10:50:43 |
|  2 | murong    | 2017-05-23 10:50:43 |
|  3 | saodiseng | 2017-05-23 10:50:43 |
+----+-----------+---------------------+
3 rows in set (10.24 sec)

--切换以后
mysql> select * from tbl_kenyon;
+----+-----------+---------------------+
| id | cname     | ctime               |
+----+-----------+---------------------+
|  1 | qiaofeng  | 2017-05-23 10:50:43 |
|  2 | murong    | 2017-05-23 10:50:43 |
|  3 | saodiseng | 2017-05-23 10:50:43 |
+----+-----------+---------------------+
3 rows in set (0.00 sec)

可以发现经过投票,PD已经连到94上去了(93,92上都能看到),此时读取表数据很快

2017/05/23 17:59:12.151 server.rs:153: [INFO] TiKV is ready to serve
2017/05/23 17:59:12.517 raft.rs:846: [INFO] [region 2] 3 [term: 1487] received a MsgHeartbeat message with higher term from 7 [term: 1488]
2017/05/23 17:59:12.517 raft.rs:681: [INFO] [region 2] 3 became follower at term 1488
2017/05/23 17:59:12.525 server.rs:460: [INFO] resolve store 6 address ok, addr 172.26.11.94:20160
2017/05/23 17:59:13.517 apply.rs:621: [INFO] [region 2] 3 execute admin command cmd_type: CompactLog compact_log {compact_index: 6437 compact_term: 1488} at [term: 1488, index: 6439]
2017/05/23 17:59:13.644 raftlog_gc.rs:117: [INFO] [region 2] collected 225 log entries
2017/05/23 17:59:43.517 apply.rs:621: [INFO] [region 2] 3 execute admin command cmd_type: CompactLog compact_log {compact_index: 6498 compact_term: 1488} at [term: 1488, index: 6500]
2017/05/23 17:59:43.643 raftlog_gc.rs:117: [INFO] [region 2] collected 61 log entries

这是因为92是Region中的leader,假如不是leader的tikv服务器受影响如93,94,数据因为默认做了三个副本(也可以配置5个或者7个副本),服务并不会受影响,但是在日志中会不停地告警

四、水平扩展

其实主要是以上组件模块的扩展,对于tidb来说,本身是无状态的,比较容易扩展,pd也可以部署成集群的模式,通过Haproxy、F5或者其他第三方软件来实现,比较难的Tikv的水平扩展。在每个TiKV的节点里,逻辑上划分了一个或多个store,每个store里又划了一个或多个Region,数据就是存放在Region里面,每个Region的默认值是64M,扩容的过程类似以下细胞分裂的过程,比传统的RDBMS采用的Sharding方式以及中间件模式要透明很多,也许以后市面上的诸多中间件日子要难过了。

1.添加pd

动态添加pd
pd-server --name=pd2           --client-urls="http://172.26.11.95:2379"           --peer-urls="http://172.26.11.95:2380"           --join="http://172.26.11.91:2379"              --要加入的原pd集群
动态删除pd
pd-ctl -u http://172.26.11.91:2379
>> member delete pd2

2.添加tikv

添加tikv,比较简单,直接注册一个新的tikv,剩下的数据迁移工作就交给pd,以下在91上新注册一个tikv
tikv-server --pd="172.26.11.91:2379"             --addr="172.26.11.91:20160"             --data-dir=/data/tidb/tikv \
            --log-file=/data/tidb/log/tikv.log &

查看store,新增了一个1001的store,另外也能看出当前的leader在93上面
[[email protected] ~]# pd-ctl -u http://172.26.11.91:2379
? store
{
  "count": 4,
  "stores": [
    {
      "store": {
        "id": 6,
        "address": "172.26.11.94:20160",
        "state": 0,
        "state_name": "Up"
      },
      "status": {
        "store_id": 6,
        "capacity": "21 GB",
        "available": "21 GB",
        "leader_count": 0,
        "region_count": 1,
        "sending_snap_count": 0,
        "receiving_snap_count": 0,
        "applying_snap_count": 0,
        "is_busy": false,
        "start_ts": "2017-05-23T18:05:07+08:00",
        "last_heartbeat_ts": "2017-05-24T17:52:03.842239159+08:00",
        "uptime": "23h46m56.842239159s"
      }
    },
    {
      "store": {
        "id": 1001,
        "address": "172.26.11.91:20160",
        "state": 0,
        "state_name": "Up"
      },
      "status": {
        "store_id": 1001,
        "capacity": "21 GB",
        "available": "15 GB",
        "leader_count": 0,
        "region_count": 0,
        "sending_snap_count": 0,
        "receiving_snap_count": 0,
        "applying_snap_count": 0,
        "is_busy": false,
        "start_ts": "2017-05-24T17:50:12+08:00",
        "last_heartbeat_ts": "2017-05-24T17:52:03.290658649+08:00",
        "uptime": "1m51.290658649s"
      }
    },
    {
      "store": {
        "id": 1,
        "address": "172.26.11.92:20160",
        "state": 0,
        "state_name": "Up"
      },
      "status": {
        "store_id": 1,
        "capacity": "21 GB",
        "available": "21 GB",
        "leader_count": 0,
        "region_count": 1,
        "sending_snap_count": 0,
        "receiving_snap_count": 0,
        "applying_snap_count": 0,
        "is_busy": false,
        "start_ts": "2017-05-23T17:59:12+08:00",
        "last_heartbeat_ts": "2017-05-24T17:52:06.843194072+08:00",
        "uptime": "23h52m54.843194072s"
      }
    },
    {
      "store": {
        "id": 4,
        "address": "172.26.11.93:20160",
        "state": 0,
        "state_name": "Up"
      },
      "status": {
        "store_id": 4,
        "capacity": "21 GB",
        "available": "21 GB",
        "leader_count": 1,
        "region_count": 1,
        "sending_snap_count": 0,
        "receiving_snap_count": 0,
        "applying_snap_count": 0,
        "is_busy": false,
        "start_ts": "2017-05-23T17:22:48+08:00",
        "last_heartbeat_ts": "2017-05-24T17:52:09.766282426+08:00",
        "uptime": "24h29m21.766282426s"
      }
    }
  ]
}

3.删除tikv

查看1001的store状态是0,也就是up
? store 1001
{
  "store": {
    "id": 1001,
    "address": "172.26.11.91:20160",
    "state": 0,
    "state_name": "Up"
  },
  "status": {
    "store_id": 1001,
    "capacity": "21 GB",
    "available": "15 GB",
    "leader_count": 0,
    "region_count": 0,
    "sending_snap_count": 0,
    "receiving_snap_count": 0,
    "applying_snap_count": 0,
    "is_busy": false,
    "start_ts": "2017-05-24T17:50:12+08:00",
    "last_heartbeat_ts": "2017-05-24T17:58:57.490156968+08:00",
    "uptime": "8m45.490156968s"
  }
}

--删除过程,state=1表示正在下线
? store delete 1001
Success!
? store 1001
{
  "store": {
    "id": 1001,
    "address": "172.26.11.91:20160",
    "state": 1,
    "state_name": "Offline"
  },
  "status": {
    "store_id": 1001,
    "capacity": "21 GB",
    "available": "15 GB",
    "leader_count": 0,
    "region_count": 0,
    "sending_snap_count": 0,
    "receiving_snap_count": 0,
    "applying_snap_count": 0,
    "is_busy": false,
    "start_ts": "2017-05-24T17:50:12+08:00",
    "last_heartbeat_ts": "2017-05-24T17:59:17.690136502+08:00",
    "uptime": "9m5.690136502s"
  }
}

--state=2表示数据已经清理,可以关闭
? store 1001
{
  "store": {
    "id": 1001,
    "address": "172.26.11.91:20160",
    "state": 2,
    "state_name": "Tombstone"
  },
  "status": {
    "store_id": 0,
    "capacity": "0 B",
    "available": "0 B",
    "leader_count": 0,
    "region_count": 0,
    "sending_snap_count": 0,
    "receiving_snap_count": 0,
    "applying_snap_count": 0,
    "is_busy": false,
    "start_ts": "1970-01-01T08:00:00+08:00",
    "last_heartbeat_ts": "0001-01-01T00:00:00Z",
    "uptime": "0s"
  }
}

?  

五、总结:

1.维护相对很简单,官方文档是有中英文版本,资料更新相对及时,但是实际使用者提供的资料较少
2.Scale Out相比较传统的RDBMS方案上来看简化很多,特别是可以摒弃五花八门的中间件
3.从架构上来看,小数据量的性能应该一般,不建议使用,大数据量理论上会较好
4.期待GA版本

时间: 2024-08-09 22:02:17

分布式数据库TiDB的部署的相关文章

Mysql分布式数据库变更自动化部署

Author:skate Time:2015/03/05 MySQL数据库变更自动部署 概述: 这个Mysql数据库发布程序,可以自动.快速.并发的发布数据变更并记录结果.把部署内容从部署server传输到所有部署database并执行部署内容. 本程序主要用于分布式数据库部署,比如把一个部署脚本需要同时部署到多台database上. 测试环境: deploydb: [[email protected] skate]# ll autodeploy total 36 -rw-r--r-- 1 ro

(一)分布式数据库tidb-简介

因为数据磁盘问题,最近进行了更换库,所以决定写关于这方面的专题的博客,博客信息参考的官方文档. 一.分布式数据库使用背景 随着互联网的飞速发展,业务量可能在短短的时间内爆发式地增长,对应的数据量可能快速地从几百 GB 涨到几百个 TB,传统的单机数据库提供的服务,在系统的可扩展性.性价比方面已经不再适用.比如MySQL数据库,缺点是没法做到水平扩展.MySQL 要想能做到水平扩展,唯一的方法就业务层的分库分表或者使用中间件等方案.但是,这些中间层方案也有很大局限性,执行计划不是最优,分布式事务,

Greenplum 分布式数据库开发入门到精通(架构、部署、管理、开发和调优)【课程分享】

Greenplum 分布式数据库开发入门到精通(架构.部署.管理.开发和调优) 对这个课程有兴趣的朋友,可以加我qq2059055336和我联系 课程大纲 1 Greenplum架构 什么是Greenplum Greenplum体系结构 Greenplum高可用性架构 2 安装Greenplum 配置环境 安装并初始化GPDB系统 启停数据库 配置GP系统 3 分布式数据库存储 数据是如何存储的 分布策略 4 GBDB查询处理 查询命令的执行 SQL查询处理机制 并行查询计划 5 角色权限及客户

大数据将促进分布式数据库发展及去Oracle

2015-09-13 张晓东 东方云洞察 点击上面的链接文字,可以快速关注"东方云洞察"公众号 分布式数据库简介 分布式数据库系统通常使用较小的计算机系统,每台计算机可单独放在一个地方,每台计算机中都可能有DBMS的一份完整拷贝副本,或者部分拷贝副本,并具有自己局部的数据库, 通过网络互相连接共同组成一个完整的.全局的逻辑上集中.物理上分布的大型数据库. 分布式并行数据库通过并行使用多个CPU和磁盘来将诸如装载数据.建立索引.执行查询等操作并行化以提升性能的数据库系统.其中最重要的关键

分布式数据库中全局唯一主键

[相关文章] <分布式数据库中全局唯一主键生成策略的设计与实现><activiti5.10解决分布式集群部署的主键问题><分布式环境下数据库主键方案><如何在高并发分布式系统中生成全局唯一Id><分布式环境下ID生成方法总结> <分布式环境下数据库主键方案> [ http://www.2cto.com/database/201309/243195.html ] 在只使用单数据库时,使用自增主键ID无疑是最适合的.但在集群.主从架构上时

FastDFS分布式文件系统配置与部署

? ? ? FastDFS分布式文件系统配置与部署 白宁超 2017年4月14日 ? ? 注:1.1-1.4节是对FastDFS基本配置,如果读者只是安装分布式文件系统,简单关注其原理建议阅读1.2节与1.5节.如果读者仅仅就是安装为目的建议直接阅读1.5节. 本人邮箱:[email protected] 主页网址:http://www.cnblogs.com/baiboy/ ? 目录 ? 1.1 分布式文件系统介绍????1 1.2 系统架构介绍????1 1.3 FastDFS性能方案???

阿里10年分布式数据库技术沉淀,AliSQL X-Cluster的应用实战

MySQL 数据库从诞生以来就以简单.易用.开源为主打特点,成为不少开发者首选的数据库系统.阿里集团在 2008 年开始提出"去 IOE"的口号,迈入了  MySQL 数据库的时代.系统使用大量的 MySQL,配合业务的改造替代原有的商业版 Oracle 系统.根据阿里交易型应用的特点,以及双十一这样业界罕有的需求推动下,我们在官方的 MySQL 基础上增加了非常多实用的功能.性能补丁,打造了 AliSQL 这个  MySQL 分支品牌. 时间很快走到 2014 年,随着业务高速的增长

Greenplum分布式数据库开发入门到精通

Greenplum分布式数据库开发入门到精通(架构.部署.管理.开发和调优)课程分类:Hadoop适合人群:初级课时数量:41课时用到技术:GP.MapReduce编程.装载和卸载数据涉及项目:角色权限及客户端认证管理咨询qq:1840215592双十一全场5折,前所未有的最低价,详情查看:http://www.ibeifeng.com/dou1111.html课程针对人群本课程适合于有一定java基础知识,对数据库和sql语句有一定了解,熟练使用linux系统的技术人员,特别适合于想换工作或寻

分布式数据库DDB

通过中间件的形式为前台提供一台虚拟的数据库服务器,而中间件在后台实际管理着多个数据库节点,允许将单张表分布到不同的数据库节点上进行性能均衡. 总体架构: master管理服务器,提供资源分配,负载统计等总多功能: DBN(database node)数据库节点服务器: DBI(database interface)数据库访问接口,部署在客户机上,以jar包的形式提供给应用程序使用,提供查询处理功能,隐藏了数据访问的复杂性: 数据的分区和负载均衡: 数据的水平分区方式:hash分区: 系统采用ha