往期回顧:幹貨!教你搭建兩種MySQL叢集
在前一篇文章中,我們把Replication叢集和PXC叢集搭建起來了,當對資料進行分片處理之後,原有的一個庫,被切分為多個分片資料庫,所有的分片資料庫叢集構成了一個完整的資料庫存儲。一切看起來似乎都那麼的完美,然而問題來了,我們該怎麼去統一讀寫、管理所有的分片資料庫叢集呢?在應用程式中直接操作,還是使用資料庫中間件操作?使用Mycat的意義又是什麼呢?
|使用Mycat的意義
Mycat 是一個開源的分布式資料庫系統,但是由于真正的資料庫需要存儲引擎,而 Mycat 并沒有存儲引擎,是以并不是完全意義的分布式資料庫系統。那麼 Mycat 是什麼?
Mycat 是資料庫中間件,就是介于資料庫與應用之間,進行資料處理與互動的中間服務。
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5iYkVGO4ITM5UDOzYzMldDNwkzNiZmN0QzM1czYxITYh9CX0JXZ252bj91Ztl2Lc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
資料被分到多個分片資料庫後,應用如果需要讀取資料,就要需要處理多個資料源的資料。如果沒有資料庫中間件,那麼應用将直接面對分片叢集,資料源切換、事務處理、資料聚合都需要應用直接處理,原本該是專注于業務的應用,将會花大量的工作來處理分片後的問題,最重要的是每個應用處理将是完全的重複造輪子。即使抛開重新造輪子這個問題,輪子造不造的好可能是更大的問題,一不小心可能就會翻車。
是以有了資料庫中間件,應用隻需要集中于業務處理,大量的通用的資料聚合,事務,資料源切換都由中間件來處理,中間件的性能與處理能力将直接決定應用的讀寫性能,是以一款好的資料庫中間件至關重要,而Mycat正是你需要的一款高性能資料庫中間件。
Mycat可以把多個叢集統一管理起來,Mycat在運作時會把自己虛拟成一個資料庫節點,包括虛拟賬戶虛拟邏輯庫、虛拟邏輯表。使用者在使用Mycat中間件時如同使用單節點資料庫一般簡單。
|垂直切分介紹
垂直切分是按照業務邏輯進行劃分,把一個資料庫中的資料表拆分到多個獨立的資料庫。
垂直切分最大的作用是把一個資料庫的并發壓力分散到不同的資料庫節點上。
需要注意的是垂直切分不能減少單個表的資料量以及并發壓力。
垂直切分的缺點:
【1】不能跨MySQL節點做表連接配接查詢,隻能通過接口方式解決
【2】跨MySQL節點的事務,需要分布式事務機制來實作
|水準切分介紹
水準切分是按照某個字段的某種規則,把資料切分到多張資料表(可以是同一資料庫的不同資料表,也可以是不同資料庫的資料表上)。
水準切分最大的作用是減少單個表的資料量和并發壓力,如果切分後的表存儲在不同的資料庫節點上,那也可以減少單個庫的資料量和并發壓力。
水準切分的缺點:
【1】資料切分規則需要根據業務邏輯制定
【2】叢集擴容麻煩,需要做大量的資料遷移工作
水準切分叢集擴容需要慎重,在資料量不斷增大的情況下,可以采用水準切分+冷熱資料分離的方式解決,把不常用的資料從表中抽離出來,歸檔到ToKuDB引擎的資料庫中。
|單資料庫節點項目的演化
單資料庫節點項目在疊代更新成多節點資料庫項目的過程中,可以先從水準切分開始做起。先針對單個表做水準切分,再根據不同的業務邏輯劃分,做垂直切分。
|容器化部署Mycat
水準切分和垂直切分的概念以及優缺點介紹完了,接下來就開始安裝Mycat了。Mycat基于Java語言編寫,是以需要jdk環境。接下來我們就先建立一個JDK容器,并在資料卷目錄下安裝Mycat程式吧。
下載下傳JDK鏡像
docker pull adoptopenjdk/openjdk8docker tag adoptopenjdk/openjdk8 openjdk8docker rm adoptopenjdk/openjdk8
運作容器
docker run -d -it --name mycat1 –v mycat1:/root/server --privileged --net=host openjdk8
檢視Mycat資料卷所在目錄
docker inspect mycat1或docker volume inspect mycat1
進入資料卷目錄
cd /var/lib/docker/volumes/mycat1/_data
下載下傳mycat壓縮包(推薦1.6.7.3版本的),并解壓安裝
wget http://dl.mycat.org.cn/1.6.7.3/20190927161129/Mycat-server-1.6.7.3-release-20190927161129-linux.tar.gztar -xvf Mycat-server-1.6.7.3-release-20190927161129-linux.tar.gz
壓縮包解壓好了,也就安裝完成了。
|Mycat目錄結構介紹
解壓後的mycat目錄結構如下:
我們關心的目錄有bin、conf、logs目錄,這三個目錄分别存放了Mycat可執行程式、Mycat配置檔案、Mycat運作日志。
bin 程式目錄,除了提供封裝成服務的版本之外,也提供了 nowrap 的shell 腳本指令,友善大家選擇和修改,進入到 bin 目錄:
可使用以下指令前台啟動|背景啟動|停止|重新開機|檢視運作狀态
mycat { console | start | stop | restart | status }
conf 目錄下存放配置檔案,server.xml 是 Mycat 伺服器參數調整和使用者授權的配置檔案,全局主鍵生成方式、虛拟邏輯庫,虛拟賬戶都在這裡配置,schema.xml 是邏輯庫定義和表以及分片定義的配置檔案,rule.xml 是分片規則的配置檔案,分片規則的具體參數資訊單獨存放為檔案,也放在這個目錄下。配置檔案修改,需要重新開機 Mycat 或者通過 9066 端口 reload。
lib 目錄下主要存放 Mycat 依賴的一些 jar 檔案。
日志存放在 logs/mycat.log 中,每天一個檔案,日志的配置是在 conf/log4j.xml 中,根據自己的需要,可以調整輸出級别為 debug,debug 級别下,會輸出更多的資訊,友善排查問題。
|端口放行
如果你的Linux系統開啟了防火牆,則需要放行8066和9066這2個端口。8066是供外界連接配接的端口,其實就等效于原來的mysql的預設的3306端口,9066端口用來對Mycat進行配置以及擷取狀态。
下面這段代碼用于在centos上放行端口
firewall-cmd --zone=public --add-port=8066/tcp --permanentfirewall-cmd --zone=public --add-port=9066/tcp --permanentfirewall-cmd --reload
至此,Mycat安裝完成。當然了,後面還需要對Mycat做大量配置才可以正常使用Mycat。在此之前不妨先運作一下Mycat吧!
先進入Mycat容器
docker exec -it mycat1 /bin/bash
進入/root/server目錄
cd /root/server/
可以看到之前在資料卷目錄下載下傳的壓縮包以及解壓後的目錄
直接進入mycat/bin目錄下,在前台運作Mycat
cd mycat/bin/./mycat console
可以看到Mycat成功運作起來了
使用Navicat連接配接一下(IP為docker虛拟機主控端ip,端口為8066,預設使用者名root,預設密碼123456):
可以看到,有反應,但報錯了。原因是我們還沒配置虛拟邏輯庫和虛拟資料表。
至此,使用Mycat實作資料切分(上)已經完成了,在本篇文章中講了什麼是水準切分、什麼是垂直切分,還講了如何使用Dokcer部署mycat、mycat目錄介紹、防火牆端口放行。在後面的章節中,我們将對mycat的配置檔案下手,講解如何配置實作單個PXC叢集的負載均衡、單個Replication叢集的讀寫分離、Mycat自帶的資料切分規則介紹、自定義資料切分規則、多個PXC叢集實作資料切分、多個Replication叢集實作資料切分、全局表以及父子表、全局主鍵生成方式等内容。
如果你覺得這篇文章對你有幫助,麻煩關注一下我。點一點關注、點一點在看都是對我莫大的鼓勵。
如果有什麼疑問,可以直接給我的公衆号發消息,我看到後會回複的。