系統運維
mysql中間件之mycat
一、mycat基礎概念
1、什么是mycat
一個徹底開源的,面向企業應用開發的大數據庫集群
支持事務、acid、可以替代mysql的加強版數據庫
一個可以視為mysql集群的企業級數據庫,用來替代昂貴的oracle集群
一個融合內存緩存技術、nosql技術、hdfs大數據的新型sql server
結合傳統數據庫和新型分布式數據倉庫的新一代企業級數據庫產品
一個新穎的數據庫中間件產品
2、為什么使用mycat
如今隨著互聯網的發展,數據的量級也是撐指數的增長,從gb到tb到pb。對數據的各種操作也是愈加的困難,傳統的關系性數據庫已經無法滿足快速查詢與插入數據的需求。這個時候nosql的出現暫時解決了這一危機。它通過降低數據的安全性,減少對事務的支持,減少對復雜查詢的支持,來獲取性能上的提升。但是,在有些場合nosql一些折衷是無法滿足使用場景的(比如有些使用場景是絕對要有事務與安全指標的。這個時候nosql肯定是無法滿足的)。所以還是需要使用關系性數據庫。如何使用關系型數據庫解決海量存儲的問題呢?此時就需要做數據庫集群,為了提高查詢性能將一個數據庫的數據分散到不同的數據庫中存儲,為應對此問題就出現了——mycat
mycat作用:
能滿足數據庫數據大量存儲;提高了查詢性能
讀寫分離
數據分片 垂直拆分(分庫)、水平拆分(分表)、垂直 水平拆分(分庫分表)
多數據源整合
3、 數據庫中間件對比
① cobar(前身為amoaba)屬于阿里b2b事業群,始于2008年,在阿里服役3年多,接管3000 個mysql數據庫的schema, 集群日處理在線sql請求50億次以上。由于cobar發起人的離職, cobar停止維護。
② mycat是開源社區在阿里cobar基礎上進行二次開發,解決了cobar存在的問題,并且加入了許多新 的功能在其中。青出于藍而勝于藍。
③ oneproxy基于mysql官方的proxy思想利用c進行開發的, oneproxy是一款商業收費的中間件。舍棄了一些功能,專注在性能和穩定性上。
④ kingshard由小團隊用go語言開發,還需要發展,需要不斷完善。
⑤ vitess是youtube生產在使用,架構很復雜。不支持mysql原生協議,使用需要大量改造成本。
⑥ atlas是360團隊基于mysql proxy改寫,功能還需完善,高并發下不穩定。
⑦ maxscale是mariadb(mysql原作者維護的一個版本) 研發的中間件
⑧ mysqlroute是mysql官方oracle公司發布的中間件
4、支持的數據庫
支持mysql oracle sqlserver等一些主流的數據庫
5、核心技術
分庫分表:數據庫分片指通過某種特定的條件,將我們存放在一個數據庫中的數據分散存放在不同的多個數據庫(主機)中,這樣來達到分散單臺設備的負載,根據切片規則,可分為以下兩種切片模式,mycat通過定義表的分片規則來實現分片,每個表格可以捆綁一個分片規則,每個分片規則指定一個分片字段并綁定一個函數,來實現動態分片算法
1)schema:邏輯庫,與mysql中的database(數據庫)對應,一個邏輯庫中定義了所包括的table。
2)table:邏輯表,即物理數據庫中存儲的某一張表,與傳統數據庫不同,這里的表格需要聲明其所存儲的邏輯數據節點datanode。在此可以指定表的分片規則。
3)datanode:mycat的邏輯數據節點,是存放table的具體物理節點,也稱之為分片節點,通過datasource來關聯到后端某個具體數據庫上
4)datasource:定義某個物理庫的訪問地址,用于捆綁到datanode上
5)分片規則:前面講了數據切分,一個大表被分成若干個分片表,就需要一定的規則,這樣按照某種業務規則把數據分到某個分片的規則就是分片規則,數據切分選擇合適的分片規則非常重要,將極大的避免后續數據處理的難
二、mycat安裝部署
環境:
jdk:要求jdk必須是1.7及以上版本mysql:推薦mysql是5.5以上版本mycat的官方網站:http://www.mycat.org.cn/主機操作系統ip地址mysql01(master01)
centos 7.3
192.168.1.1
mysql02(slave)
centos 7.3
192.168.1.8
mycat
centos 7.3
192.168.1.3
ps:mysql使用現成的主機(搭建了雙主 keepalived,主從也可以)。如果沒有mysql,看上一個博客部署。1、下載及安裝,使用上面的官網地址下載。
復制鏈接,wget下載
[root@localhost ~]# wget http://dl.mycat.io/1.6-release/mycat-server-1.6-release-20161028204710-linux.tar.gz
將壓縮包解壓縮。建議將mycat放到/usr/local/mycat目錄下。
[root@localhost ~]# tar zxf mycat-server-1.6-release-20161028204710-linux.tar.gz[root@localhost ~]# cd mycat/修改配置文件:
server.xml: 定義用戶以及系統相關變量,如端口等
schema.xml: 定義邏輯庫,表、分片節點等內容
rule.xml: 定義分片規則
[root@mycat mycat]# vim conf/server.xml 80 <user name=mycat> //定義連接中間件的用戶81 <property name=password>123456</property> //密碼82 <property name=schemas>testdb</property> //邏輯庫[root@mycat mycat]# cp conf/schema.xml conf/schema.xml.bak //備份配置文件[root@mycat mycat]# vim conf/schema.xml <?xml version=1.0?><!doctype mycat:schema system schema.dtd><mycat:schema xmlns:mycat=http://io.mycat/> <schema name=testdb checksqlschema=false sqlmaxlimit=100 datanode=dn1> //指明邏輯庫,以及節點 </schema> <datanode name=dn1 datahost=host1 database=test_db /> //指定后端服務器中的真實庫 <datahost name=host1 maxcon=1000 mincon=10 balance=0 writetype=0 dbtype=mysql dbdriver=native switchtype=1 slavethreshold=100> <heartbeat>select user()</heartbeat> <!-- can have multi write hosts --> <writehost host=hostm1 url=192.168.1.1:3306 user=root //定義寫的服務器(主)以及ip地址,用戶密碼 password=123.com> <!-- can have multi read hosts --> <readhost host=hosts2 url=192.168.1.8:3306 user=root password=123.com /> //定義讀的服務器(從)以及ip地址,用戶密碼 </writehost> </datahost></mycat:schema>##這個配置文件已經把不必要配置項以及注釋的都刪了
重啟mycat服務
讓mycat擁有mysql命令
[root@mysql02 ~]# scp /usr/local/mysql/bin
億速云華東bgp高防服務器雖然冬天很冷 但這些回家的文案卻暖到了骨子里…阿里云服務器怎么用數據庫Sedo榜:“書本”域名vivlio.com超16萬元成交郵件群發工具哪個好云服務器租用價格多少錢一年合適php如何判斷是中文還是英文便宜的云服務器成都