MyCat部署執行(Windows環境)與使用步驟詳解
1、MyCat概念
1.1 總體架構
MyCAT的架構如下圖所示:
MyCAT使用MySQL的通訊協議模擬成一個MySQL伺服器,並建立了完整的Schema(資料庫)、Table(資料表)、User(使用者)的邏輯模型,並將這套邏輯模型對映到後端的儲存節點DataNode(MySQL Instance)上的真實物理庫中,這樣一來,所有能使用MySQL的客戶端以及程式語言都能將MyCAT當成是MySQLServer來使用,不必開發新的客戶端協議。
當MyCAT收到一個客戶端傳送的SQL請求時,會先對SQL進行語法分析和檢查,分析的結果用於SQL路由,SQL路由策略支援傳統的基於表格的分片欄位方式進行分片,也支援獨有的基於資料庫
SQL執行的過程,簡單的說,就是把SQL通過網路協議傳送給後端的真正的資料庫上進行執行,對於MySQL Server來說,是通過MySQL網路協議傳送報文,並解析返回的結果,若SQL不涉及到多個分片節點,則直接返回結果,寫入客戶端的SOCKET流中,這個過程是非阻塞模式(NIO)。
DataNode是MyCAT的邏輯資料節點,對映到後端的某一個物理資料庫的一個Database,為了做到系統高可用,每個DataNode可以配置多個引用地址(DataSource),當主DataSource被檢測為不可用時,系統會自動切換到下一個可用的
1.2 邏輯庫
與任何一個傳統的關係型資料庫一樣,MyCAT也提供了“資料庫”的定義,並有使用者授權的功能,下面是MyCAT邏輯庫相關的一些概念:
- schema:邏輯庫,與MySQL中的Database(資料庫)對應,一個邏輯庫中定義了所包括的Table。
- table:表,即物理資料庫中儲存的某一張表,與傳統資料庫不同,這裡的表格需要宣告其所儲存的邏輯資料節點DataNode,這是通過表格的分片規則定義來實現的,table可以定義其所屬的“子表(childTable)”,子表的分片依賴於與“父表”的具體分片地址,簡單的說,就是屬於父表裡某一條記錄
- 分片規則:是一個欄位與函式的捆繫結義,根據這個欄位的取值來返回所在儲存的分片(DataNode)的序號,每個表格可以定義一個分片規則,分片規則可以靈活擴充套件,預設提供了基於數字的分片規則,字串的分片規則等。
- dataNode: MyCAT的邏輯資料節點,是存放table的具體物理節點,也稱之為分片節點,通過DataSource來關聯到後端某個具體資料庫上,一般來說,為了高可用性,每個DataNode都設定兩個DataSource,一主一從,當主節點宕機,系統自動切換到從節點。
- dataHost:定義某個物理庫的訪問地址,用於捆綁到dataNode上。
MyCAT目前通過配置檔案的方式來定義邏輯庫和相關配置:
·MYCAT_HOME/conf/schema.xml中定義邏輯庫,表、分片節點等內容;
·MYCAT_HOME/conf/rule.xml中定義分片規則;
·MYCAT_HOME/conf/server.xml中定義使用者以及系統相關變數,如埠等。
下圖給出了MyCAT一個可能的邏輯庫到物理庫(MySQL的完整對映關係),可以看出強大的分片能力以及靈活的Mysql叢集整合能力。
2、MyCat基本使用教程
2.1 下載和安裝
MyCAT使用Java開發,因為用到了JDK 7的部分功能,所以在使用前請確保安裝了JDK 7.0,要求是JDK 7.0以上,並設定了正確的Java環境變數
目前下載的版本是免安裝,解壓在任意磁碟、根目錄下,避免路徑中出現中文。
目錄說明見下表所示:
目錄名稱 |
說明 |
bin |
存放window版本和linux版本,除了提供封裝成服務的版本之外,也提供nowrap的shell指令碼命令,方便大家選擇和修改。 Windows 下 執行:mycat.bat console在控制檯啟動程式,也可以裝載成服務,若此程式執行有問題,也可以執行startup_nowrap.bat,確保java命令可以在命令執行。 Warp方式的命令,可以安裝成服務並啟動或停止。 l mycat install (可選) l mycat start |
conf |
存放配置檔案: l server.xml:是Mycat伺服器引數調整和使用者授權的配置檔案。 l schema.xml:是邏輯庫定義和表以及分片定義的配置檔案。 l rule.xml:是分片規則的配置檔案,分片規則的具體一些引數資訊單獨存放為檔案,也在這個目錄下,配置檔案修改,需要重啟MyCAT或者通過9066埠reload。 l wrapper.conf:JVM配置引數等設定。 l log4j.xml:日誌存放在logs/mycat.log中,每天一個檔案,日誌的配置是在conf/log4j.xml中,根據自己的需要,可以調整輸出級別為debug,debug級別下,會輸出更多的資訊,方便排查問題。 |
lib |
MyCAT自身的jar包或依賴的jar包的存放目錄。 |
logs |
MyCAT日誌的存放目錄。日誌存放在logs/mycat.log中,每天一個檔案 |
2.2 啟動和停止
安裝mycat服務 :mycate install
啟動mycat服務 :mycate start
停止mycat服務 :mycate stop
注意:當修改配置檔案後,需要重啟mycat服務
3、使用教程
3.1 硬體配置和安裝資料庫
本地 mycat 192.168.1.5
伺服器A mysql 192.168.1.201
伺服器A mysql 192.168.1.202
安裝MySQL伺服器和MySQL客戶端,筆者使用的MySQL伺服器是免安裝版本:mysql-noinstall-5.1.73-winx64,MySQL客戶端是:Navicat
for MySQL,免安裝版本安裝方法請參考:http://blog.csdn.net/q98842674/article/details/12094777
3.2 建立資料庫
分別在伺服器A、伺服器B建立所用的分片資料庫;
CREATE database db1;
3.3 配置檔案
schema.xml配置檔案,因為分庫在不同的伺服器,因此配置兩個datahost;如果在一個datahost中配置多個writeHost,則為主從配置。type="global"時,為全域性表,
<?xml version="1.0"?><!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://org.opencloudb/">
<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100">
<!-- auto sharding by id (long) -->
<table name="travelrecord" dataNode="dn1,dn2" rule="auto-sharding-long" />
<!-- global table is auto cloned to all defined data nodes ,so can join
with any table whose sharding node is in the same data node -->
<table name="company" primaryKey="ID" type="global" dataNode="dn1,dn2" />
<table name="goods" primaryKey="ID" type="global" dataNode="dn1,dn2" />
<!-- random sharding using mod sharind rule -->
<table name="hotnews" primaryKey="ID" dataNode="dn1,dn2"
rule="mod-long" />
<!-- <table name="dual" primaryKey="ID" dataNode="dnx,dnoracle2" type="global"
needAddLimit="false"/> <table name="worker" primaryKey="ID" dataNode="jdbc_dn1,jdbc_dn2,jdbc_dn3"
rule="mod-long" /> -->
<table name="employee" primaryKey="ID" dataNode="dn1,dn2"
rule="sharding-by-intfile" />
<table name="customer" primaryKey="ID" dataNode="dn1,dn2"
rule="sharding-by-intfile">
<childTable name="orders" primaryKey="ID" joinKey="customer_id"
parentKey="id">
<childTable name="order_items" joinKey="order_id"
parentKey="id" />
</childTable>
<childTable name="customer_addr" primaryKey="ID" joinKey="customer_id"
parentKey="id" />
</table>
</schema>
<dataNode name="dn1" dataHost="localhost1" database="db1" />
<dataNode name="dn2" dataHost="localhost2" database="db1" />
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="hostM1" url="192.168.1.201:3306" user="shopuser"
password="123456">
</writeHost>
</dataHost>
<dataHost name="localhost2" maxCon="1000" minCon="10" balance="0"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="hostM1" url="192.168.1.202:3306" user="shopuser"
password="123456">
</writeHost>
</dataHost>
</mycat:schema>
server.xml配置檔案,本例項很簡單,就只定義user,
name:使用者名稱
password:密碼
schemas:例項名,和schema.xml定義的schema對應,這裡的例項名是虛擬名,也就是對mycat服務的一種別名,是 應用程式以及客戶端連線的入口。
<!-- - - Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License. - You
may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0
- - Unless required by applicable law or agreed to in writing, software -
distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the
License for the specific language governing permissions and - limitations
under the License. -->
<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://org.opencloudb/">
<system>
<property name="defaultSqlParser">druidparser</property>
<!-- <property name="useCompression">1</property>--> <!--1為開啟mysql壓縮協議-->
<!-- <property name="processorBufferChunk">40960</property> -->
<!--
<property name="processors">1</property>
<property name="processorExecutor">32</property>
-->
<!--預設是65535 64K 用於sql解析時最大文字長度 -->
<!--<property name="maxStringLiteralLength">65535</property>-->
<!--<property name="sequnceHandlerType">0</property>-->
<!--<property name="backSocketNoDelay">1</property>-->
<!--<property name="frontSocketNoDelay">1</property>-->
<!--<property name="processorExecutor">16</property>-->
<!--
<property name="mutiNodeLimitType">1</property> 0:開啟小數量級(預設) ;1:開啟億級資料排序
<property name="mutiNodePatchSize">100</property> 億級數量排序批量
<property name="processors">32</property> <property name="processorExecutor">32</property>
<property name="serverPort">8066</property> <property name="managerPort">9066</property>
<property name="idleTimeout">300000</property> <property name="bindIp">0.0.0.0</property>
<property name="frontWriteQueueSize">4096</property> <property name="processors">32</property> -->
</system>
<user name="test">
<property name="password">test</property>
<property name="schemas">TESTDB</property>
</user>
</mycat:server> 3.4 登入mycat
在任意有mysql的客戶端的機器連線Mycat, 執行以下命令
mysql -utest -ptest -h192.168.1.5 -P8066 -DTESTDB 注意:8066登入mycat資料埠,9066登入mycat管理埠(能看到mycat內的配置、以及各個資料庫連線情況,很有用)
3.5 測試
全域性表:company
mysql> create table company(id int not null primary key,name varchar(100),sharding_id int not null);
Query OK, 0 rows affected (0.30 sec)
mysql> explain create table company(id int not null primary key,name varchar(100),sharding_id int not null);
+-----------+------------------------------------------------------------------------------------------------+
| DATA_NODE | SQL |
+-----------+------------------------------------------------------------------------------------------------+
| dn1 | create table company(id int not null primary key,name varchar(100),sharding_id int not null) |
| dn2 | create table company(id int not null primary key,name varchar(100),sharding_id int not null) |
+-----------+------------------------------------------------------------------------------------------------+
2 rows in set (0.04 sec)
mysql> insert into company(id,name,sharding_id) values(1,'leader us',10000);
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id: 6
Current database: TESTDB
Query OK, 1 row affected (0.03 sec)
mysql> explain insert into company(id,name,sharding_id) values(1,'leader us',10000);
+-----------+-----------------------------------------------------------------------+
| DATA_NODE | SQL |
+-----------+-----------------------------------------------------------------------+
| dn1 | insert into company(id,name,sharding_id) values(1,'leader us',10000) |
+-----------+-----------------------------------------------------------------------+
1 row in set (0.00 sec)
水平分表:travelrecord
mysql> explain create table travelrecord(id int not null primary key,name varchar(100));
+-----------+---------------------------------------------------------------------+
| DATA_NODE | SQL |
+-----------+---------------------------------------------------------------------+
| dn1 | create table travelrecord(id int not null primary key,name varchar(100)) |
| dn2 | create table travelrecord(id int not null primary key,name varchar(100)) |
| dn3 | create table travelrecord(id int not null primary key,name varchar(100)) |
+-----------+---------------------------------------------------------------------+
3 rows in set (0.01 sec)
(7) 三個分片上都插入了3條資料
mysql> explain insert into travelrecord(id,name) values(1,'hp');
+-----------+---------------------------------------------+
| DATA_NODE | SQL |
+-----------+---------------------------------------------+
| dn1 | insert into travelrecord(id,name) values(1,'hp') |
| dn2 | insert into travelrecord(id,name) values(1,'hp') |
| dn3 | insert into travelrecord(id,name) values(1,'hp') |
+-----------+---------------------------------------------+
3 rows in set (0.00 sec)
-------------------------------------
順便推薦QQ群,僅供學習和交流,歡迎大家的加入
Java : 139978466
MySQL: 167209377
大資料 : 181560406
前端 : 139978026
測試 : 299057857
運維 : 139978281
相關推薦
MyCat部署執行(Windows環境)與使用步驟詳解
1、MyCat概念 1.1 總體架構 MyCAT的架構如下圖所示: MyCAT使用MySQL的通訊協議模擬成一個MySQL伺服器,並建立了完整的Schema(資料庫)、Table(資料表)、User(使用者)的邏輯模型,並將這套邏輯模型對映到後端的儲存節點DataNode
10022--- 白話MyCat——MyCat部署執行(Linux環境)與使用步驟詳解
原文 MyCAT 可以視為“Mysql”叢集的企業級資料庫,用來替代昂貴的Oracle叢集,其背後是阿里曾經開源的知名產品Cobar。MyCAT的目標是:低成本的將現有的單機資料庫和應用平滑遷移到“雲”端,解決資料儲存和業務規模迅速增長情況下的資料瓶頸問題。 一、部署步
【JMeter4.0】安裝及執行(windows環境)
安裝 JDK安裝及配置 安裝對應版本的java環境,配置好環境變數。 版本對應關係參考下表: JMeter版本 JDK版本 4.0 1.8 or 1.9 3.2/3.3 1.8+ 3.0/3.1 1.7+ JDK環境變數配置: “我的
Ubuntukylin-14.04-desktop(帶分割槽)安裝步驟詳解
歡迎您的加入! 微信公眾號平臺: 大資料躺過的坑 微信公眾號平臺: 人工智慧躺過的坑 大資料和人工智慧躺過的坑(總群): 161156071 更多QQ技術分群,詳情請見:http://www.cnblogs.com/zls
Mycat入門(Windows環境)
Mycat(Windows環境)(1) 初入門 Mycat 是SQL叢集中介軟體,基於阿里開源的Cobar產品而研發,Cobar的穩定性、可靠性、優秀的架構和效能 1. MyCat準備 安裝 mysql 安裝jdk 1.8
大眾點評 cat 專案訪問監控 部署(windows環境)
1、直接下載zip壓縮包 專案下載 : https://github.com/dianping/cat 需要本地執行cat專案,作為伺服器,在執行的伺服器中檢視客戶端(需要被監控的專案)的訪問情況。下載的專案解壓縮後 script目錄下有“Cat技術入門總結-0.1.0.
FFmpeg安裝(windows環境)
學習 程序 編碼 j2e 質量 進行 ffplay 滿足 隨機數 ?FFmpeg是什麽? ?FFmpeg組成 ?下載工具 ?安裝FFmpeg ?應用到j2ee項目 前言:學習視頻編碼,一定要知道雷霄驊(leixiaohua1020)的專欄 ,偉大的程序員,26歲去世。雷霄
Spring整合Redis做數據緩存(Windows環境)
端口號 init 技術分享 factory redis-cli @service tab long 配置 當我們一個項目的數據量很大的時候,就需要做一些緩存機制來減輕數據庫的壓力,提升應用程序的性能,對於java項目來說,最常用的緩存組件有Redis、Ehcache和Mem
git 學習筆記三 (windows環境)
clas 環境 check pre div nbsp windows name cnblogs 分支管理 查看分支 git branch 創建dev分支 git branch <name> 切換到dev分支 git checkout <name&
Android studio中Terminal中使用git(Windows環境)
默認 clone fig android RM 發現 mage body image 因為之前用的是Mac Pro,現在公司使用的是PC機,這2種系統AS的terminal使用還是有點不一樣。 1、下載git,進行安裝(下載地址: http://git-scm.com/
flink源碼編譯(windows環境)
git html instr written bsp fail -name rect app 前言 最新開始搗鼓flink,fucking the code之前,編譯是第一步。 編譯環境 win7 java maven 編譯步驟 https://ci.apache.org
Tomcat學習—Tomcat的簡介和目錄以及配置文件介紹(Windows環境)
系統 並發 manager htm 輕量級 管理 集群 web.xml 虛擬目錄 今天學習TOMCAT,主要學習的是Tomcat的目錄結構,配置文件!1:Tomcat簡介Tomcat 服務器是一個免費的開放源代碼的Web 應用服務器,屬於輕量級應用服務器,在中小型系統和並發
Lua Busted 單元測試簡介(Windows 環境)
簡介 本文目標是在 Windows 環境下使用 Busted 進行 Lua 單元測試。 Busted 是一款 BDD 風格的 Lua 單元測試框架,支援 TAP 風格輸出。 環境 Lua 5.3.5 LuaRocks 3.0.2 Microsoft W
Jenkins配置HTML報告(Windows環境)
1.首先安裝外掛HTML Publisher,點選直接安裝 2.在任務中配置,構建後操作,新增Publish HTML reports 3.新增完成後,新增一項 4.HTML directory to archive 配置為專案構建完成後生成的
jmeter+maven 的簡單使用 記錄(Windows環境)
1.手動建立maven工程目錄結構,maven對目錄結構要求比較嚴格(pom.xml檔案一定要放在根目錄下) Maven --src --main --test --jmeter
Flask 安裝 (windows環境)
前提: 1.已安裝python版本(一般都是2.X) 2.已安裝easy_install python安裝,記得配置Python的環境變數,例如:我的直接在Path上加 G:\Python 驗證安裝Python成功:cmd 輸入python 或者python -V &n
(Windows環境)Pycharm切換使用Python2和Python3
(Windows環境)Pycharm切換使用Python2和Python3 1.安裝Python3 2.安裝Python2 3.環境變數配置 4.其他設定 4.1python.exe名稱修改 4.2pi
一文讀懂如何用python呼叫matlab函式(windows環境)
第一步配置環境; 要安裝引擎 API,請在作業系統提示符下執行以下命令,其中 matlabroot 是 MATLAB 資料夾的路徑。您可能需要管理員許可權才能執行這些命令。或者,使用在非預設位置安裝用於 Python 的 MATLAB 引擎 API 
Apollo 配置詳細步驟(Windows環境)
一. 準備工作 1.下載 apollo 安裝包 下載連結:http://activemq.apache.org/apollo/download.html 2.下載 java JDK 安裝包 ( apollo 依賴 java 環境) 下載連結:
Github使用記錄(windows環境)
根據實際需要,需要將本地的專案放到github上; 首先在本地已有的專案下,用git bash命令進入,然後執行:ssh-keygen -t rsa -C "你的遠端git郵箱地址"; 執行完之後找到C:/User/使用者名稱/.ssh/資料夾,其中有兩個檔案,一個是id