Cobar介绍

article/2025/9/17 16:50:14

概述

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

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

快速启动

场景描述

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

步骤一:环境准备

步骤二:部署和配置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,验证数据分布在不同的库中

http://chatgpt.dhexx.cn/article/MH5VKeHB.shtml

相关文章

[存储] Cobar使用文档(可用作MySQL大型集群解决方案)

最近好不容易抽空研究了下Cobar&#xff0c;感觉这个产品确实很不错&#xff08;在文档方面比Amoeba强多了&#xff09;&#xff0c;特此推荐给大家。Cobar是阿里巴巴研发的关系型数据的分布式处理系统&#xff0c;该产品成功替代了原先基于Oracle的数据存储方案&#xff0c;目…

Linux nohup命令用法详解

nohup 英文全称 no hang up&#xff08;不挂起&#xff09;&#xff0c;用于在系统后台不挂断地运行命令&#xff0c;退出终端不会影响程序的运行。 nohup 命令&#xff0c;在默认情况下&#xff08;非重定向时&#xff09;&#xff0c;会输出一个名叫 nohup.out 的文件到当前…

Linux nohup 命令

1.简介 nohup 英文全称 no hang up&#xff08;不挂起&#xff09;&#xff0c;用于在系统后台不挂断地运行命令&#xff0c;退出终端不会影响程序的运行。 nohup 命令&#xff0c;在默认情况下&#xff08;非重定向时&#xff09;&#xff0c;会输出一个名叫 nohup.out 的文…

【nohup】nohup命令的简单使用

文章目录 1 nohup时2 nohup后 1 nohup时 执行下方命令后&#xff0c;将 标准输出(1&#xff0c;默认可不写)、错误信息(2) 写入到 output.log 文件中。 nohup python train.py >output.log 2>&1 & nohup hb_mapper makertbin -c xx.yaml --model-type onnx 2&g…

【学习笔记】Windows 下线程同步之互斥锁

目录 前言环境简介相关函数CreateMutexWait 函数ReleaseMutexCloseHandle 其他互斥锁的名字未命名互斥锁的同步互斥锁的意外终止临界区对象 示例参考 前言 本文所涉及的同步主要描述在 Windows 环境下的机制&#xff0c;和 Linux 中的同步机制有一定的联系&#xff0c;但注意并…

C++——互斥量

文章目录 一、基本知识二、独占互斥量mutex1.mutex的介绍2.mutex的成员函数3.实例演示 三、lock_guard和unique_lock的使用和区别四、递归互斥量recursive_mutex1.基本知识2.演示示例 五、带超时的互斥量std::timed_mutex和std::recursive_timed_mutex 一、基本知识 C11提供如…

Linux——什么是互斥与互斥锁

目录 一.前提&#xff1a;临界区 & 临界资源 二.什么是互斥 &#xff08;一&#xff09;.互斥概念 &#xff08;二&#xff09;.为什么需要互斥 三.互斥锁介绍 &#xff08;一&#xff09;.互斥锁的概念 &#xff08;二&#xff09;.互斥锁的使用 ①系统API接口 ②…

线程的互斥与同步

线程的互斥与同步 线程的互斥简单的抢票程序互斥量初始化互斥量销毁互斥量互斥量加锁和解锁 互斥量实现原理 可重入VS线程安全概念常见的线程不安全的情况常见的线程安全的情况常见不可重入的情况常见可重入的情况可重入与线程安全联系可重入与线程安全区别 死锁死锁四个必要条…

FreeRTOS个人笔记-互斥量

根据个人的学习方向&#xff0c;学习FreeRTOS。由于野火小哥把FreeRTOS讲得比较含蓄&#xff0c;打算在本专栏尽量细化一点。作为个人笔记&#xff0c;仅供参考或查阅。 配套资料&#xff1a;FreeRTOS内核实现与应用开发实战指南、野火FreeRTOS配套视频源码、b站野火FreeRTOS视…

C++ 互斥锁原理以及实际使用介绍

兄弟姐妹们&#xff0c;我又回来了&#xff0c;今天带来实际开发中都需要使用的互斥锁的内容&#xff0c;主要聊一聊如何使用互斥锁以及都有哪几种方式实现互斥锁。实现互斥&#xff0c;可以有以下几种方式&#xff1a;互斥量&#xff08;Mutex&#xff09;、递归互斥量&#x…

MySQL mutex互斥锁

在事务机制中&#xff0c;锁机制是为了保证高并发&#xff0c;数据一致性的重要实现方式。MySQL除了Innodb引擎层面的行锁&#xff0c;还有latch锁。latch锁的作用资源协调处理。包含表句柄&#xff0c;线程&#xff0c;cpu线程&#xff0c;内存池等。其保证非常短时间内快速处…

uCOSii中的互斥信号量

uCOSii中的互斥信号量 一、互斥型信号量项管理 (MUTUAL EXCLUSION SEMAPHORE MANAGEMENT) OSMutexAccept() 无条件等待地获取互斥型信号量 OSMutexCreate() 建立并初始化一个互斥型信号量 OSMutexDel() 删除互斥型信号量 OSMutexPend() 等待一个互斥型信号量 OSMutexPost…

互斥信号量

目录 1、Creat 2、Delete 3、Wait 4、Post 5、Statu 互斥信号量 在介绍二进制信号量时&#xff0c;曾讨论到如果二进制信号量创建时设置参数 bInitValue 为TRUE&#xff0c;则可以用于互斥访问共享资源。实际上&#xff0c;SylixOS 的二进制信号量实现的互斥性是将一个变量…

UCOS-III 互斥量

互斥量 一、互斥量基本概念二、互斥量优先级继承机制三、互斥量应用场景四、互斥量运作机制五、互斥量创建流程1、定义互斥量2、创建互斥量 六、互斥量接口函数1、创建互斥量函数OSMutexCreate()2、删除互斥量函数 OSMutexDel()3、获取互斥量函数 OSMutexPend()4、释放互斥量函…

互斥量知识

文章目录 互斥量1、基本概念2、互斥量的优先级继承机制3、互斥量应用场景4、互斥量运行机制5、互斥量控制块6、互斥量函数接口&#xff08;1&#xff09;互斥量创建函数 xSemaphoreCreateMutex()&#xff08;2&#xff09;递归互斥量创建函数 xSemaphoreCreateRecursiveMutex()…

同步和互斥

同步和互斥 竞争与协作 在单核 CPU 系统里&#xff0c;为了实现多个程序同时运行的假象&#xff0c;操作系统通常以时间片调度的方式&#xff0c;让每个进程执行每次执行一个时间片&#xff0c;时间片用完了&#xff0c;就切换下一个进程运行&#xff0c;由于这个时间片的时间很…

多线程的同步与互斥(互斥锁、条件变量、读写锁、自旋锁、信号量)

文章目录 一、同步与互斥的概念二、互斥锁&#xff08;同步&#xff09;三、条件变量&#xff08;同步&#xff09;1、线程的条件变量实例12、线程的条件变量实例23、虚假唤醒(spurious wakeup) 四、读写锁&#xff08;同步&#xff09;五、自旋锁&#xff08;同步&#xff09;…

同步和互斥区别

互斥的概念 由于多线程执行操作共享变量的这段代码可能会导致竞争状态&#xff0c;因此我们将此段代码称为临界区&#xff08;critical section&#xff09;&#xff0c;它是访问共享资源的代码片段&#xff0c;一定不能给多线程同时执行。 我们希望这段代码是互斥&#xff0…

操作系统——互斥的定义及实现

一、进程互斥的定义 所谓进程互斥,指的是对某个系统资源,一个进程正在使用它,另外一个想用它的进程就必须等待,而不能同时使用 。进程互斥是多道程序系统中进程间存在的一种源于资源共享的制约关系,也称间接制约关系,主要是由被共享资源的使用性质所决定的。 二、互斥…

Fisher判别分析详解

Fisher判别分析 将高维度空间的样本投影到低维空间上&#xff0c;使得投影后的样本数据在新的子空间上有最小的类内距离以及最大的类间距离&#xff0c;使得在该子空间上有最佳的可分离性 可以看出右侧投影后具有更好的可分离性。 Fisher判别分析和PCA差别 刚学完感觉两个很…