Cobar分布式关系型数据库中间件的简单应用
生活随笔
收集整理的這篇文章主要介紹了
Cobar分布式关系型数据库中间件的简单应用
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Cobar是關系型數據的分布式處理系統,它可以在分布式的環境下看上去像傳統數據庫一樣為您提供海量數據服務。
- 產品在阿里巴巴B2B公司已經穩定運行了3年以上。
- 目前已經接管了3000+個MySQL數據庫的schema,為應用提供數據服 ?
Cobar解決的問題
- 分布式:Cobar的分布式主要是通過將表放入不同的庫來實現:
1. Cobar支持將一張表水平拆分成多份分別放入不同的庫來實現表的水平拆分
2. Cobar也支持將不同的表放入不同的庫
3. 多數情況下,用戶會將以上兩種方式混合使用
這里需要強調的是,Cobar不支持將一張表,例如test表拆分成test_1, test_2, test_3.....放在同一個庫中,必須將拆分后的表分別放入不同的庫來實現分布式。
- HA:
在用戶配置了MySQL心跳的情況下,Cobar可以自動向后端連接的MySQL發送心跳,判斷MySQL運行狀況,一旦運行出現異常,Cobar可以自動切換到備機工作。但需要強調的是:
1. Cobar的主備切換有兩種觸發方式,一種是用戶手動觸發,一種是Cobar的心跳語句檢測到異常后自動觸發。那么,當心跳檢測到主機異常,切換到備機,如果主機恢復了,需要用戶手動切回主機工作,Cobar不會在主機恢復時自動切換回主機,除非備機的心跳也返回異常。
2. Cobar只檢查MySQL主備異常,不關心主備之間的數據同步,因此用戶需要在使用Cobar之前在MySQL主備上配置雙向同步,詳情可以參閱MySQL參考手冊。
1:環境配置: 操作系統:虛擬機 centos 6.4
MySQL: 5.1
JDK: OpenJDK1.7.0.9或JDK1.6
Cobar: 1.2.7
2:配置Cobar 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="t_student" dataNode="dnTest2,dnTest3" rule="rule1" /><!--注意:那個表從2個庫中取數據--></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.100:3307/db_studentinfo</location><!--注意:替換為您的MySQL IP和Port--><location>192.168.0.100:3307/db_studentinfo2</location><!--注意:替換為您的MySQL IP和Port--><location>192.168.0.100:3307/db_studentinfo3</location><!--注意:替換為您的MySQL IP和Port--></property><property name="user">root</property><property name="password">XXX</property><property name="sqlMode">STRICT_TRANS_TABLES</property></dataSource></cobar:schema>
路由規則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>stuNo</columns><algorithm><![CDATA[ func1(${stuNo}) ]]></algorithm></rule></tableRule><!-- 路由函數定義 --><function name="func1" class="com.alibaba.cobar.route.function.PartitionByString"><property name="partitionCount">2</property><!-- 有幾個分庫 --><property name="partitionLength">512</property><!-- partitionCount * partitionLength=1024 --></function></cobar:rule>
服務配置server.xml 可不用改變
3:啟動 進入Cobar的bin目錄可以看到Cobar的啟動、停止與重啟腳本? 執行?./startup.sh 查看logs目錄下stdout.log, 啟動成功日志如下?
12:03:58,797 INFO =============================================== 12:03:58,812 INFO Cobar is ready to startup ... 12:03:58,828 INFO Startup processors ... 12:03:59,031 INFO Startup connector ... 12:03:59,031 INFO Initialize dataNodes ... 12:03:59,203 INFO dnTest1:0 init success 12:03:59,203 INFO dnTest3:0 init success 12:03:59,219 INFO dnTest2:0 init success 12:03:59,234 INFO CobarManager is started and listening on 9066 12:03:59,234 INFO CobarServer is started and listening on 8066 12:03:59,234 INFO =============================================== 12:05:08,484 INFO [thread=Processor1-H0,class=ServerConnection,host=192.168.0.100,port=4748,schema=dbtest]'test' login success
4:測試 在java開發應用中只要數據庫的連接和用戶密碼就可以了 dbUrl="jdbc:mysql://192.168.0.100:8066/dbtest";
dbUserName="test";
dbPassword="test"; 和連接mysql數據庫操作完全一樣2 插入語句 insert into t_student(stuNo,stuName,sex,birthday,gradeId,email,stuDesc) values(?,?,?,?,?,?,?) stuNo=0101001? 數據寫入 db_studentinfo3 stuNo=13001? 數據寫入?? db_studentinfo2 可以在mysql數據庫查詢。 5:架構
- Front-end Communication: Cobar與前端應用的通信模塊
- SQL Parser : SQL解析,提取SQL中的重要信息
- SQL Router : 決定SQL語句被分發到哪些庫執行
- SQL Excutor : 執行SQL語句
- Result-Merger : 合并多個庫的執行結果
- DataNode,HA Pool,JDBC : 后端數據訪問
后端數據訪問
- 后端連接池,連接復用,提升效率
- 在datanode內部做HA,細粒度的FailOver機制,一旦主庫有異常,立即切換到備庫
- 用戶可自由將不同datanode的主、備庫放在同一數據庫實例,分散MySQL實例上的壓力
?
總結
以上是生活随笔為你收集整理的Cobar分布式关系型数据库中间件的简单应用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: hadoop-1.1.2 在centos
- 下一篇: linux cmake编译源码,linu