Cobar 关系型数据的分布式处理系统

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: 原文地址: http://code.alibabatech.com/wiki/display/cobar/Home;jsessionid=779959E690AE94BBC8079BB8F7D8B244 概述 Cobar是关系型数据的分布式处理系统,它可以在分布式的环境下看上去像传统数据库一样为您提供海量数据服务。

原文地址: http://code.alibabatech.com/wiki/display/cobar/Home;jsessionid=779959E690AE94BBC8079BB8F7D8B244

概述

Cobar是关系型数据的分布式处理系统,它可以在分布式的环境下看上去像传统数据库一样为您提供海量数据服务。

  • 产品在阿里巴巴B2B公司已经稳定运行了3年以上。
  • 目前已经接管了3000+个MySQL数据库的schema,为应用提供数据服务。
  • 据最近统计cobar集群目前平均每天处理近50亿次的SQL执行请求。

快速启动

场景描述

  • 系统对外提供的数据库名是dbtest,并且其中有两张表tb1和tb2。
  • tb1表的数据被映射到物理数据库dbtest1的tb1上。
  • tb2表的一部分数据被映射到物理数据库dbtest2的tb2上,另外一部分数据被映射到物理数据库dbtest3的tb2上。
    如下图所示:

步骤一:环境准备

  • 软件准备

    操作系统: Linux或者Windows (推荐在Linux环境下运行Cobar)
    MySQL: http://www.mysql.com/downloads/ (推荐使用5.1以上版本)
    JDK: http://www.oracle.com/technetwork/java/javase/downloads/ (推荐使用1.6以上版本)
    Cobar: http://code.alibabatech.com/wiki/display/cobar/release/ (下载tar.gz或者zip文件)

  • 数据准备

    假设本文MySQL所在服务器IP为192.168.0.1,端口为3306,用户名为test,密码为空,我们需要创建schema:dbtest1、dbtest2、dbtest3,table:tb1、tb2,脚本如下:

    数据库创建脚本
    #创建dbtest1
    drop database if exists dbtest1;
    create database dbtest1;
    use dbtest1;
    #在dbtest1上创建tb1
    create table tb1(
    id    int not null ,
    gmt   datetime);
     
    #创建dbtest2
    drop database if exists dbtest2;
    create database dbtest2;
    use dbtest2;
    #在dbtest2上创建tb2
    create table tb2(
    id    int not null ,
    val   varchar (256));
     
    #创建dbtest3
    drop database if exists dbtest3;
    create database dbtest3;
    use dbtest3;
    #在dbtest3上创建tb2
    create table tb2(
    id    int not null ,
    val   varchar (256));

步骤二:部署和配置Cobar

请确保机器上设置了JAVA环境变量JAVA_HOME
  • 下载Cobar压缩文件并解压,进入conf目录可以看到schema.xml, rule.xml, server.xml等相关的配置文件
    wget http: //code .alibabatech.com /mvn/releases/com/alibaba/cobar/cobar-server/1 .2.4 /cobar-server-1 .2.4. tar .gz
    tar zxf cobar-server-1.2.4. tar .gz
    cd cobar-server-1.2.4 #可以看到bin,conf,lib,logs四个目录
  • schema.xml配置如下(注意:schema.xml包含MySQL的IP、端口、用户名、密码等配置,您需要按照注释替换为您的MySQL信息。)
    schema.xml 配置
    <? xml version = "1.0" encoding = "UTF-8" ?>
    <!DOCTYPE cobar:schema SYSTEM "schema.dtd">
    < cobar:schema xmlns:cobar = "http://cobar.alibaba.com/" >
     
       <!-- schema定义 -->
       < schema name = "dbtest" dataNode = "dnTest1" >
         < table name = "tb2" dataNode = "dnTest2,dnTest3" rule = "rule1" />
       </ schema >
     
       <!-- 数据节点定义,数据节点由数据源和其他一些参数组织而成。-->
       < dataNode name = "dnTest1" >
         < property name = "dataSource" >
           < dataSourceRef >dsTest[0]</ dataSourceRef >
         </ property >
       </ dataNode >
       < dataNode name = "dnTest2" >
         < property name = "dataSource" >
           < dataSourceRef >dsTest[1]</ dataSourceRef >
         </ property >
       </ dataNode >
       < dataNode name = "dnTest3" >
         < property name = "dataSource" >
           < dataSourceRef >dsTest[2]</ dataSourceRef >
         </ property >
       </ dataNode >
     
       <!-- 数据源定义,数据源是一个具体的后端数据连接的表示。-->
       < dataSource name = "dsTest" type = "mysql" >
         < property name = "location" >
           < location >192.168.0.1:3306/dbtest1</ location > <!--注意:替换为您的MySQL IP和Port-->
           < location >192.168.0.1:3306/dbtest2</ location > <!--注意:替换为您的MySQL IP和Port-->
           < location >192.168.0.1:3306/dbtest3</ location > <!--注意:替换为您的MySQL IP和Port-->
         </ property >
         < property name = "user" >test</ property > <!--注意:替换为您的MySQL用户名-->
         < property name = "password" ></ property > <!--注意:替换为您的MySQL密码-->
         < property name = "sqlMode" >STRICT_TRANS_TABLES</ property >
       </ dataSource >
    </ cobar:schema >
  • rule.xml配置如下(本文仅以数字类型的id字段作为拆分字段,将数据拆分到两个库中。)
    rule.xml 配置
    <? xml version = "1.0" encoding = "UTF-8" ?>
    <!DOCTYPE cobar:rule SYSTEM "rule.dtd">
    < cobar:rule xmlns:cobar = "http://cobar.alibaba.com/" >
       <!-- 路由规则定义,定义什么表,什么字段,采用什么路由算法。-->
       < tableRule name = "rule1" >
         < rule >
           < columns >id</ columns >
           < algorithm > <![CDATA[ func1(${id})]]> </ algorithm >
         </ rule >
       </ tableRule >
     
       <!-- 路由函数定义,应用在路由规则的算法定义中,路由函数可以自定义扩展。-->
       < function name = "func1" class = "com.alibaba.cobar.route.function.PartitionByLong" >
         < property name = "partitionCount" >2</ property >
         < property name = "partitionLength" >512</ property >
       </ function >
    </ cobar:rule >
  • server.xml配置如下
    server.xml 配置
    <? xml version = "1.0" encoding = "UTF-8" ?>
    <!DOCTYPE cobar:server SYSTEM "server.dtd">
    < cobar:server xmlns:cobar = "http://cobar.alibaba.com/" >
     
       <!--定义Cobar用户名,密码-->
       < user name = "test" >
         < property name = "password" >test</ property >
         < property name = "schemas" >dbtest</ property >
       </ user >
    </ cobar:server >

步骤三:启动和使用Cobar

    • 启动Cobar,进入bin目录可以看到Cobar的启动、停止与重启脚本
      . /startup .sh #Cobar进程名为CobarStartup
    • 查看logs目录下stdout.log, 启动成功日志如下
      10 : 54 : 19 , 264 INFO  ===============================================
      10 : 54 : 19 , 265 INFO  Cobar is ready to startup ...
      10 : 54 : 19 , 265 INFO  Startup processors ...
      10 : 54 : 19 , 443 INFO  Startup connector ...
      10 : 54 : 19 , 446 INFO  Initialize dataNodes ...
      10 : 54 : 19 , 470 INFO  dnTest1: 0 init success
      10 : 54 : 19 , 472 INFO  dnTest3: 0 init success
      10 : 54 : 19 , 473 INFO  dnTest2: 0 init success
      10 : 54 : 19 , 481 INFO  CobarManager is started and listening on 9066
      10 : 54 : 19 , 483 INFO  CobarServer is started and listening on 8066
      10 : 54 : 19 , 484 INFO  ===============================================
    • 访问Cobar同访问MySQL的方式完全相同, 常用访问方式如下(注意:本文将Cobar部署在192.168.0.1这台机器上,否则请替换为您的Cobar所在IP,其他信息不变)
      #命令行
      mysql -h192. 168.0 . 1 -utest -ptest -P8066 -Ddbtest
       
      #JDBC(建议 5.1 以上的mysql driver版本)
      Class.forName( "com.mysql.jdbc.Driver" );
      Connection conn = DriverManager.getConnection( "jdbc:mysql://192.168.0.1:8066/dbtest" , "test" , "test" );
      ......
    • SQL执行示例,执行语句时与使用传统单一数据库无区别
      mysql>show databases;                                                #dbtest1、dbtest2、dbtest3对用户透明
      + ----------+
      | DATABASE |
      + ----------+
      | dbtest   |
      + ----------+
       
      mysql>show tables;                                                   #dbtest中有两张表tb1和tb2
      + -------------------+
      | Tables_in_dbtest1 |
      + -------------------+
      | tb1               |
      | tb2               |
      + -------------------+
       
      mysql> insert into tb1 (id, gmt) values (1, now());                   #向表tb1插入一条数据
      mysql> insert into tb2 (id, val) values (1, "part1" );                 #向表tb2插入一条数据
      mysql> insert into tb2 (id, val) values (2, "part1" ), (513, "part2" ); #向表tb2同时插入多条数据
      mysql> select * from tb1;                                             #查询表tb1,验证数据被成功插入
      + ----+---------------------+
      | id | gmt                 |
      + ----+---------------------+
      |  1 | 2012-06-12 15:00:42 |
      + ----+---------------------+
       
      mysql> select * from tb2;                                             #查询tb2,验证数据被成功插入
      + -----+-------+
      | id  | val   |
      + -----+-------+
      |   1 | part1 |
      |   2 | part1 |
      | 513 | part2 |
      + -----+-------+
       
      mysql> select * from tb2 where id in (1, 513);                        #根据id查询
      + -----+-------+
      | id  | val   |
      + -----+-------+
      |   1 | part1 |
      | 513 | part2 |
      + -----+-------+
    • 查看后端MySQL数据库dbtest1,dbtest2和dbtest3,验证数据分布在不同的库中
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
21天前
|
消息中间件 算法 Java
【亿级数据专题】「分布式服务框架」 盘点本年度我们探索服务的保障容量的三大关键方案实现
【亿级数据专题】「分布式服务框架」 盘点本年度我们探索服务的保障容量的三大关键方案实现
181 0
|
3月前
|
消息中间件 算法 Java
【亿级数据专题】「分布式消息引擎」 盘点本年度我们探索服务的保障容量的三大关键方案实现
尽管经过了上一篇文章 《【亿级数据专题】「分布式消息引擎」 盘点本年度我们探索服务的低延迟可用性机制方案实现》有了低延迟的优化保障,消息引擎仍需精心规划其容量。为了提供无与伦比的流畅体验,消息引擎必须实施有效的容量管理策略。
52 2
【亿级数据专题】「分布式消息引擎」 盘点本年度我们探索服务的保障容量的三大关键方案实现
|
2月前
|
消息中间件 存储 负载均衡
【亿级数据专题】「分布式消息引擎」 盘点本年度我们探索服务的HA高可用解决方案
昔之善战者,先为不可胜,以待敌之可胜。不可胜在己,可胜在敌。故善战者,能为不可胜,不能使敌之必可胜。故曰:胜可知,而不可为。
77 2
【亿级数据专题】「分布式消息引擎」 盘点本年度我们探索服务的HA高可用解决方案
|
3月前
|
消息中间件 存储 Java
【亿级数据专题】「分布式消息引擎」 盘点本年度我们探索服务的低延迟可用性机制方案实现
在充满挑战的2023年度,我们不可避免地面对了一系列棘手的问题,例如响应速度缓慢、系统陷入雪崩状态、用户遭受不佳的体验以及交易量的下滑。这些问题的出现,严重影响了我们的业务运行和用户满意度,为了应对这些问题,我们所在团队进行了大量的研究和实践,提出了低延迟高可用的解决方案,并在分布式存储领域广泛应用。
43 2
【亿级数据专题】「分布式消息引擎」 盘点本年度我们探索服务的低延迟可用性机制方案实现
|
29天前
|
存储 分布式计算 大数据
现代化数据库技术——面向大数据的分布式存储系统
传统的关系型数据库在面对大规模数据处理时遇到了诸多挑战,而面向大数据的分布式存储系统应运而生。本文将深入探讨现代化数据库技术中的分布式存储系统,包括其优势、工作原理以及在大数据领域的应用。
|
1月前
|
消息中间件 存储 NoSQL
【Redis项目实战】使用Springcloud整合Redis分布式锁+RabbitMQ技术实现高并发预约管理处理系统
【Redis项目实战】使用Springcloud整合Redis分布式锁+RabbitMQ技术实现高并发预约管理处理系统
|
1月前
|
存储 Web App开发 运维
原来10张图就可以搞懂分布式链路追踪系统原理
原来10张图就可以搞懂分布式链路追踪系统原理
|
1月前
|
算法 Java 数据中心
分布式ID生成系统之雪花算法详解
在当今的云计算和微服务架构盛行的时代,分布式系统已成为软件开发的重要组成部分。随着系统规模的扩大和业务的复杂化,对数据一致性和唯一性的要求也越来越高,尤其是在全局唯一标识符(ID)的生成上。因此,分布式ID生成系统应运而生,成为保证数据唯一性和提高系统可扩展性的关键技术之一。雪花算法(Snowflake)是Twitter开源的一种算法,用于生成64位的全局唯一ID,非常适用于分布式系统中生成唯一标识符。下面我们将深入探讨雪花算法的原理、结构和实现方式。
93 2
 分布式ID生成系统之雪花算法详解
|
3月前
|
存储 供应链 安全
新一代数据库技术——基于区块链的分布式存储系统
传统数据库系统通常采用集中式存储结构,容易受到单点故障和数据篡改的影响。本文将介绍基于区块链技术的分布式存储系统,探讨其在数据库领域的应用和优势,以及面临的挑战和未来发展趋势。
171 1
|
3月前
|
消息中间件 存储 NoSQL
面试题解析:如何解决分布式秒杀系统中的库存超卖问题?
面试题解析:如何解决分布式秒杀系统中的库存超卖问题?
109 0

热门文章

最新文章