您好,登錄后才能下訂單哦!
至于什么是Mycat,可能在不同的角色下有不同的理解。對MySQL架構有過了解的話,都知道MySQL實際上是由Server層和存儲引擎層組成的。所以對于DBA來說,Mycat 就是 MySQL 的Server層。而 Mycat 后面連接的 MySQL Server,就好象是 MySQL 的存儲引擎。因此,Mycat 本身并不存儲數據,數據是在后端的 MySQL 上存儲的,因此數據的可靠性
以及事務等依舊是 MySQL 保證的。
對于開發人員來說,Mycat基本等同于MySQL。因為完全可以使用連接MySQL的方式去連接Mycat,除了默認端口不同之外,連接方式上沒有區別。所以Mycat對于開發人員來說是透明的,只不過在SQL的使用上有一些限制。
而對于架構師來說,Mycat 是一個數據庫中間件,可以用作讀寫分離、分表分庫以及容災備份等。對于使用Mycat的應用來說,其隱藏了數據庫的存儲邏輯。讓我們無需在代碼上去對讀寫分離等存儲邏輯進行控制,從而達到不修改應用代碼的前提下,擴展數據庫架構。
由于Mycat是國內的開源項目,有非常完善且豐富的中文文檔。所以本文就不對基礎概念進行贅述了,建議參考Mycat權威指南在線版或到Mycat官網中了解更多關于Mycat的內容。
數據庫中間件,就是介于數據庫與應用之間,進行數據處理與交互的中間服務。由于對數據進行分片處理之后,從原有的一個庫,被切分為多個分片數據庫,所有的分片數據庫集群構成了整個完整的數據庫存儲。
如上圖所表示,數據被分到多個分片數據庫后,應用如果需要讀取數據,就要需要處理多個數據源的數據。
如果沒有數據庫中間件,那么應用將直接面對分片集群。那么數據源切換、事務處理以及數據聚合等問題都需要應用直接處理。這樣就會導致原本該是專注于業務的應用,將會花大量的工作來處理分片后的問題,最重要的是每個應用處理將是完全的重復造輪子。
因此有了數據庫中間件,應用只需要集中于業務處理。而大量的通用的數據聚合,事務,數據源切換都由中間件來處理,中間件的性能與處理能力將直接決定應用的讀寫性能,所以一款好的數據庫中間件至關重要。
1、作為分布式數據庫中間件使用:
Mycat不僅可以連接mysql還可以連接其他諸如oracle、sql server等數據庫,因為Mycat是使用Java編寫的,理論上只要Java能連接的數據庫,Mycat都可以連接。這就可以使得應用無需直連數據庫,而是連接Mycat,此時后端數據庫對應用就是透明的。這樣就可以對應用屏蔽后端數據庫的復雜性,并保持連接方式的統一。
2、實現數據庫集群的讀寫分離和負載均衡:
當系統發展到后期,數據量上來后,數據庫架構通常會向集群演進。其中Replication集群方案,節點存在主從角色,也就是常說的主從架構。在這種集群下通常由主節點負責寫,從節點負責讀。而Mycat可以作為中間層實現讀寫分離,無需每個應用都寫一套讀寫分離邏輯。并且當存在多個從節點時,Mycat還可以將讀請求負載均衡到各個從節點上。
3、實現數據庫的高可用:
當數據庫架構是一主一從時,可以利用Mycat實現數據庫的高可用。當主節點掛掉后,Mycat可以切換到從節點上進行讀寫。但不適用于一主多從的情況,因為主節點掛掉后,Mycat只能切換到其中一個從節點上,而不能改變節點的角色。這樣就會導致剩余的從節點無法對其進行數據同步。因此,一主多從需采用MMM或MHA等方式來實現高可用。
4、對業務數據庫進行垂直切分:
當系統中的寫負載上來后,單個主節點開始無法承受寫請求的壓力,這時就需要增加主節點來分擔負載。擁有多個主節點后,通常會將一個庫里沒有依賴關系的表拆分到不同的庫中,或將一些大表拆成小表,以分散負載。這也就是數據庫的垂直切分。
存在多個主節點就意味著應用可能需要對多個數據庫進行操作,而Mycat可以將多個數據庫抽象成一個邏輯庫。這樣對于應用來說就無需改動代碼去操作多個數據源,只需要操作Mycat中的邏輯庫即可。
5、對業務數據庫進行水平切分:
當數據庫進行了垂直切分后,可能依舊會有一些庫的寫負載比較高,或者數據量達到單表極限。那么就需要考慮進行水平切分,所謂水平切分就是分庫分表。垂直切分與水平切分的區別在于:水平切分后每個庫里的表結構是一樣的,切分的是數據。而垂直切分則是不同的庫里表結構是不一樣的,切分的是表。
當數據庫進行水平切分后,應用在寫數據時就需要考慮應該將數據寫入到哪一個庫中。而Mycat可以通過特定的策略將寫請求分發到某個數據庫上,這樣應用就只需要將寫請求發給Mycat即可,無需考慮應該寫哪個庫。
6、控制數據庫連接數量:
系統中存在比較多的應用,而每個應用都有自己的一個連接池,那么當訪問量增大就有可能超出數據庫的最大連接數量。此時就可以通過Mycat建立一個公共的連接池,所有的應用都統一通過這個連接池來獲取數據庫的連接。從而控制同時連接數據庫的應用數量,起到一個限流的作用,可以保證系統更加的穩定。
邏輯庫:
通常對實際應用來說,并不需要知道Mycat的存在,業務開發人員只需要知道數據庫的概念,所以數據庫中間件可以被看做是一個或多個數據庫集群構成的邏輯庫,需要注意的是邏輯庫不存儲數據。所以不管中間件背后是怎么樣的數據庫架構,對于應用來說都是在操作一個數據庫,而這個數據庫就是Mycat抽象出來的邏輯庫。
邏輯表:
既然有邏輯庫,那么就會有邏輯表,分布式數據庫中,對應用來說,讀寫數據的表就是邏輯表。邏輯表,可以是數據切分后,分布在一個或多個分片庫中。也可以不做數據切分,不分片,只有一個表構成。同樣,邏輯表也不存儲數據。
邏輯表分類:
- 分片表:數據被拆分到多個數據庫中的表
- 非分片表:數據未被拆分過的表
- 全局表:結構類似于字典并存在于所有分片中的表,目的是解決跨分片數據 join
- ER 表:按 ER 關系進行分片的表,目的是讓子表的記錄與所關聯的父表記錄存放在同一個數據分片上,保證數據 join不會跨庫
環境:
首先到官方下載地址獲取下載鏈接,然后到linux使用如下命令進行下載并解壓:
[root@txy-server ~]# cd /usr/local/src
[root@txy-server /usr/local/src]# wget http://dl.mycat.io/1.6.7.4/Mycat-server-1.6.7.4-release/Mycat-server-1.6.7.4-release-20200105164103-linux.tar.gz
[root@txy-server /usr/local/src]# tar -zxvf Mycat-server-1.6.7.4-release-20200105164103-linux.tar.gz -C /usr/local/
解壓后,Mycat的目錄結構如下:
[root@txy-server /usr/local/mycat]# ll -rh
total 24K
-rwxrwxrwx 1 root root 227 Jan 5 16:41 version.txt
drwxrwxrwx 2 root root 4.0K Jan 5 16:40 logs # 日志文件目錄
drwxr-xr-x 2 root root 4.0K Jan 6 20:40 lib # 庫文件目錄
drwxrwxrwx 4 root root 4.0K Jan 6 20:40 conf # 配置文件目錄
drwxrwxrwx 2 root root 4.0K Oct 22 21:26 catlet
drwxr-xr-x 2 root root 4.0K Jan 6 20:40 bin # 可執行文件目錄
[root@txy-server /usr/local/mycat]#
為Mycat創建一個系統賬戶,并更改mycat
目錄的所屬用戶,因為在實際的環境中是不可能讓程序擁有root賬戶權限的。命令如下:
[root@txy-server /usr/local]# useradd mycat -s /sbin/nologin
[root@txy-server /usr/local]# chown -R mycat:mycat mycat/
配置環境變量:
[root@txy-server ~]# vim /etc/profile
export MYCAT_HOME=/usr/local/mycat
export PATH=$PATH:$MYCAT_HOME/bin
[root@txy-server ~]# source /etc/profile
由于我這里機器內存只有2G,所以需要修改一下Mycat啟動參數,將最大內存改為1G,該參數默認是2G。當然,如果你的機器內存足夠的話就不需要更改:
[root@txy-server /usr/local]# vim mycat/conf/wrapper.conf
wrapper.java.additional.4=-XX:MaxDirectMemorySize=1G
啟動Mycat服務:
[root@txy-server ~]# mycat start
查看日志,輸出了successfully
表示啟動成功:
[root@txy-server ~]# more /usr/local/mycat/logs/wrapper.log |grep successfully
INFO | jvm 1 | 2020/01/06 21:16:51 | MyCAT Server startup successfully. see logs in logs/mycat.log
[root@txy-server ~]#
Mycat啟動后默認會監聽8066、9066等端口,如果開啟了防火墻,還需要對端口進行放行。開放端口的命令如下:
[root@txy-server ~]# firewall-cmd --zone=public --add-port=${端口號}/tcp --permanent
[root@txy-server ~]# firewall-cmd --reload
到此為止,我們就成功將Mycat服務搭建起來了。
搭建好Mycat之后,要如何進行使用呢?第一步就是要了解其核心配置文件,由于篇幅有限關于配置的內容在下一篇中進行介紹:
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。