热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

数据库–Cobar分布式数据库集群MySQL中间件_MySQL

原创作品,转载请标明:http:bloggeekcomecomarchives252运行环境:主机1:Ubuntu1404Desktop+MySQL55+JDK17(HPZ400)内网IP地址:1921681378NODE1:Ubuntu1304server+MyS
原创作品,转载请标明:http://blog.geekcome.com/archives/252

运行环境:

  • 主机1:Ubuntu14.04 Desktop + MySQL5.5 + JDK 1.7(HP Z400) 内网IP地址:192.168.137.8
  • NODE1:Ubuntu 13.04 server + MySQL5.5 内网IP地址:192.168.137.31
  • NODE2:Ubuntu 13.04 server + MySQL5.5 内网IP地址:192.168.137.32

    注:(NODE1和NODE2运行于XEN虚拟化平台,硬件环境HP Z800)

    Cobar简介:

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

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

      Cobar最主要解决的问题是:分布式和HA。

      分布式:主要是通过将同一个表的数据拆分成多个,放入不同的数据库实例,查询的时候也会按照同样的操作方式,来更新具体数据库实例中的对应的数据。

      HA:高可用性,在设置了MYSQL心跳的情况下,如果主数据库发生了异常,Cobar会自动连接从数据库,如果主数据库恢复正常,只能手动恢复到主数据库。Cobar只负责切换数据库实例,不负责主从数据库的同步,所以需要提前将主从数据库设置双向同步。

      存在的不足:

      • (1).不支持跨库情况下的join、分页、排序、子查询操作。
      • (2).SET语句执行会被忽略,事务和字符集设置除外。
      • (3).分库情况下,insert语句必须包含拆分字段列名。
      • (4).分库情况下,update语句不能更新拆分字段的值。
      • (5).不支持SAVEPOINT操作。
      • (6).暂时只支持MySQL数据节点。
      • (7).使用JDBC时,不支持rewriteBatchedStatements=true参数设置(默认为false)。
      • (8).使用JDBC时,不支持useServerPrepStmts=true参数设置(默认为false)。
      • (9).使用JDBC时,BLOB, BINARY, VARBINARY字段不能使用setBlob()或setBinaryStream()方法设置参数。

        当然,如果想努力实现这些功能,可以fork官方的源码:https://github.com/alibaba/cobar

        环境搭建

        • Cobar服务器:192.168.137.8:8066 用户名/密码:root/sa 实例名:dbtest
        • 主机1:192.168.137.8:3306 用户名/密码:cobar/sa 实例名:dbtest1
        • Node1:192.168.137.31:3306 用户名/密码:cobar/sa 实例名:dbtest2
        • Node2:192.168.137.32:3306 用户名/密码:cobar/sa 实例名:dbtest3

          Cobar-Server-1.2.7版本下载:http://pan.baidu.com/s/1pJudQh9

          实验拓扑图如下:

          \

          首先分别在三个主机创建数据库实例:

          01#创建dbtest1脚本
          02 dropdatabaseif exists dbtest1;
          03 createdatabasedbtest1;
          04 use dbtest1;
          05 #在dbtest1上创建tb1
          06 createtabletb1(
          07 id intnotnull,
          08 gmt datetime);
          09#创建dbtest2
          10 dropdatabaseif exists dbtest2;
          11 createdatabasedbtest2;
          12 use dbtest2;
          13 #在dbtest2上创建tb2
          14 createtabletb2(
          15 id intnotnull,
          16 val varchar(256));
          17#创建dbtest3
          18 dropdatabaseif exists dbtest3;
          19 createdatabasedbtest3;
          20 use dbtest3;
          21 #在dbtest3上创建tb2
          22 createtabletb2(
          23 id intnotnull,
          24 val varchar(256));

          Cobar配置:

          schema.xml配置如下

          01
          02<cobar:schema xmlns:cobar="http://cobar.alibaba.com/">
          03
          04 <schema name="dbtest" dataNode="dnTest1">
          05 <table name="tb2" dataNode="dnTest2,dnTest3" rule="rule1" />
          06 schema>
          07
          08 <dataNode name="dnTest1">
          09 <property name="dataSource">
          10 <dataSourceRef>dsTest[0]dataSourceRef>
          11 property>
          12 dataNode>
          13 <dataNode name="dnTest2">
          14 <property name="dataSource">
          15 <dataSourceRef>dsTest[1]dataSourceRef>
          16 property>
          17 dataNode>
          18 <dataNode name="dnTest3">
          19 <property name="dataSource">
          20 <dataSourceRef>dsTest[2]dataSourceRef>
          21 property>
          22 dataNode>
          23
          24 <dataSource name="dsTest" type="mysql">
          25 <property name="location">
          26 <location>192.168.137.8:3306/dbtest1location>
          27 <location>192.168.137.31:3306/dbtest2location>
          28 <location>192.168.137.32:3306/dbtest3location>
          29 property>
          30 <property name="user">cobarproperty>
          31 <property name="password">saproperty>
          32 <property name="sqlMode">STRICT_TRANS_TABLESproperty>
          33 dataSource>
          34cobar:schema>

          server.xml简单配置

          1
          2<cobar:server xmlns:cobar="http://cobar.alibaba.com/">
          3
          4 <user name="root">
          5 <property name="password">saproperty>
          6 <property name="schemas">dbtestproperty>
          7 user>
          8cobar:server>

          rule.xml配置

          01
          02<cobar:rule xmlns:cobar="http://cobar.alibaba.com/">
          03
          04 <tableRule name="rule1">
          05 <rule>
          06 <columns>valcolumns>
          07 <algorithm>algorithm>
          08 rule>
          09 tableRule>
          10
          11 <function name="func1" class="com.alibaba.cobar.route.function.PartitionByLong">
          12 <property name="partitionCount">2property>
          13 <property name="partitionLength">512property>
          14 function>
          15
          16 <function name="func2" class="com.alibaba.cobar.route.function.PartitionByString">
          17 <property name="partitionCount">2property>
          18 <property name="partitionLength">512property>
          19 <property name="hashSlice">-5:property>
          20 function>
          21cobar:rule>

          这里需要说明,INSERT语句中必须包含路由规则定义的字段,否则Cobar不会对数据进行拆分,同时存储到多个数据库实例中,比如上面的tb2表中,id字段如果设置了auto_increment,插入语句中不用指明id字段,这样就无法达到数据包拆分的目的。

          准备完成之后直接运行bin目录下的./startup.sh即可。

          然后查看输入的日志:

          01yan@yan-Z400:~/cobar-server-1.2.7/logs$ tail -f stdout.log
          0209:57:00,155 INFO Cobar is ready to startup ...
          0309:57:00,155 INFO Startup processors ...
          0409:57:00,198 INFO Startup connector ...
          0509:57:00,202 INFO Initialize dataNodes ...
          0609:57:00,811 INFO dnTest1:0 init success
          0709:57:00,816 INFO dnTest3:0 init success
          0809:57:00,821 INFO dnTest2:0 init success
          0909:57:00,835 INFO CobarManager is started and listening on 9066
          1009:57:00,837 INFO CobarServer is started and listening on 8066
          1109:57:00,837 INFO ===============================================

          这样cobar服务端就已经启动。

          直接使用jdbc或mysql终端连接cobar:

          01yan@yan-Z400:~$ mysql -uroot -psa -P8066 -h192.168.137.8
          02Welcome to the MySQL monitor. Commands end with ; or \g.
          03Your MySQL connection id is 1
          04Server version: 5.1.48-cobar-1.2.7 Cobar Server (ALIBABA)
          05
          06Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
          07
          08Oracle is a registered trademark of Oracle Corporation and/or its
          09affiliates. Other names may be trademarks of their respective
          10owners.
          11
          12Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

          下面使用几句Pyhton进行数据库的插入操作:

          01#!/usr/bin/env python
          02#coding=utf-8
          03import MySQLdb
          04
          05#连接
          06cxn = MySQLdb.Connect(host='192.168.137.8',port=8066, user = 'root', passwd = 'sa')
          07#游标
          08cur = cxn.cursor()
          09
          10cur.execute("USE dbtest")
          11
          12for i in range(1,200):
          13 cur.execute("INSERT INTO tb2 (val) values ('this is a test record %d')"%i)
          14 print 'insert the %d record into cobar'%i
          15
          16cur.close()
          17cxn.commit()
          18cxn.close()

          插入后查看数据库dbtest2和数据dbtest3的情况:

          可以看到有100条数据插入了dbtest2,99条数据插入了dbtest3。

          后面会对Cobar进行更深入的了解。我的Fork分支

          (完)

推荐阅读
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 关于我们EMQ是一家全球领先的开源物联网基础设施软件供应商,服务新产业周期的IoT&5G、边缘计算与云计算市场,交付全球领先的开源物联网消息服务器和流处理数据 ... [详细]
  • ubuntu用sqoop将数据从hive导入mysql时,命令: ... [详细]
  • 分享css中提升优先级属性!important的用法总结
    web前端|css教程css!importantweb前端-css教程本文分享css中提升优先级属性!important的用法总结微信门店展示源码,vscode如何管理站点,ubu ... [详细]
  • 本文介绍了在Web应用系统中,数据库性能是导致系统性能瓶颈最主要的原因之一,尤其是在大规模系统中,数据库集群已经成为必备的配置之一。文章详细介绍了主从数据库架构的好处和实验环境的搭建方法,包括主数据库的配置文件修改和设置需要同步的数据库等内容。MySQL的主从复制功能在国内外大型网站架构体系中被广泛采用,本文总结了作者在实际的Web项目中的实践经验。 ... [详细]
  • 本文总结了初学者在使用dubbo设计架构过程中遇到的问题,并提供了相应的解决方法。问题包括传输字节流限制、分布式事务、序列化、多点部署、zk端口冲突、服务失败请求3次机制以及启动时检查。通过解决这些问题,初学者能够更好地理解和应用dubbo设计架构。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • imx6ull开发板驱动MT7601U无线网卡的方法和步骤详解
    本文详细介绍了在imx6ull开发板上驱动MT7601U无线网卡的方法和步骤。首先介绍了开发环境和硬件平台,然后说明了MT7601U驱动已经集成在linux内核的linux-4.x.x/drivers/net/wireless/mediatek/mt7601u文件中。接着介绍了移植mt7601u驱动的过程,包括编译内核和配置设备驱动。最后,列举了关键词和相关信息供读者参考。 ... [详细]
  • 31.项目部署
    目录1一些概念1.1项目部署1.2WSGI1.3uWSGI1.4Nginx2安装环境与迁移项目2.1项目内容2.2项目配置2.2.1DEBUG2.2.2STAT ... [详细]
  • MySQL语句大全:创建、授权、查询、修改等【MySQL】的使用方法详解
    本文详细介绍了MySQL语句的使用方法,包括创建用户、授权、查询、修改等操作。通过连接MySQL数据库,可以使用命令创建用户,并指定该用户在哪个主机上可以登录。同时,还可以设置用户的登录密码。通过本文,您可以全面了解MySQL语句的使用方法。 ... [详细]
  • 2016 linux发行版排行_灵越7590 安装 linux (manjarognome)
    RT之前做了一次灵越7590黑苹果炒作业的文章,希望能够分享给更多不想折腾的人。kawauso:教你如何给灵越7590黑苹果抄作业​zhuanlan.z ... [详细]
  • Centos下安装memcached+memcached教程
    本文介绍了在Centos下安装memcached和使用memcached的教程,详细解释了memcached的工作原理,包括缓存数据和对象、减少数据库读取次数、提高网站速度等。同时,还对memcached的快速和高效率进行了解释,与传统的文件型数据库相比,memcached作为一个内存型数据库,具有更高的读取速度。 ... [详细]
  • 2021最新总结网易/腾讯/CVTE/字节面经分享(附答案解析)
    本文分享作者在2021年面试网易、腾讯、CVTE和字节等大型互联网企业的经历和问题,包括稳定性设计、数据库优化、分布式锁的设计等内容。同时提供了大厂最新面试真题笔记,并附带答案解析。 ... [详细]
  • ElasticSerach初探第一篇认识ES+环境搭建+简单MySQL数据同步+SpringBoot整合ES
    一、认识ElasticSearch是一个基于Lucene的开源搜索引擎,通过简单的RESTfulAPI来隐藏Lucene的复杂性。全文搜索,分析系统&# ... [详细]
author-avatar
lantshirt
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有