溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Mycat的安裝配置

發(fā)布時(shí)間:2020-06-10 14:03:38 來源:億速云 閱讀:530 作者:鴿子 欄目:MySQL數(shù)據(jù)庫

什么是Mycat

至于什么是Mycat,可能在不同的角色下有不同的理解。對MySQL架構(gòu)有過了解的話,都知道MySQL實(shí)際上是由Server層和存儲(chǔ)引擎層組成的。所以對于DBA來說,Mycat 就是 MySQL 的Server層。而 Mycat 后面連接的 MySQL Server,就好象是 MySQL 的存儲(chǔ)引擎。因此,Mycat 本身并不存儲(chǔ)數(shù)據(jù),數(shù)據(jù)是在后端的 MySQL 上存儲(chǔ)的,因此數(shù)據(jù)的可靠性
以及事務(wù)等依舊是 MySQL 保證的。

對于開發(fā)人員來說,Mycat基本等同于MySQL。因?yàn)橥耆梢允褂眠B接MySQL的方式去連接Mycat,除了默認(rèn)端口不同之外,連接方式上沒有區(qū)別。所以Mycat對于開發(fā)人員來說是透明的,只不過在SQL的使用上有一些限制。

而對于架構(gòu)師來說,Mycat 是一個(gè)數(shù)據(jù)庫中間件,可以用作讀寫分離、分表分庫以及容災(zāi)備份等。對于使用Mycat的應(yīng)用來說,其隱藏了數(shù)據(jù)庫的存儲(chǔ)邏輯。讓我們無需在代碼上去對讀寫分離等存儲(chǔ)邏輯進(jìn)行控制,從而達(dá)到不修改應(yīng)用代碼的前提下,擴(kuò)展數(shù)據(jù)庫架構(gòu)。

由于Mycat是國內(nèi)的開源項(xiàng)目,有非常完善且豐富的中文文檔。所以本文就不對基礎(chǔ)概念進(jìn)行贅述了,建議參考Mycat權(quán)威指南在線版或到Mycat官網(wǎng)中了解更多關(guān)于Mycat的內(nèi)容。


什么是數(shù)據(jù)庫中間件

數(shù)據(jù)庫中間件,就是介于數(shù)據(jù)庫與應(yīng)用之間,進(jìn)行數(shù)據(jù)處理與交互的中間服務(wù)。由于對數(shù)據(jù)進(jìn)行分片處理之后,從原有的一個(gè)庫,被切分為多個(gè)分片數(shù)據(jù)庫,所有的分片數(shù)據(jù)庫集群構(gòu)成了整個(gè)完整的數(shù)據(jù)庫存儲(chǔ)。

Mycat的安裝配置

如上圖所表示,數(shù)據(jù)被分到多個(gè)分片數(shù)據(jù)庫后,應(yīng)用如果需要讀取數(shù)據(jù),就要需要處理多個(gè)數(shù)據(jù)源的數(shù)據(jù)。

如果沒有數(shù)據(jù)庫中間件,那么應(yīng)用將直接面對分片集群。那么數(shù)據(jù)源切換、事務(wù)處理以及數(shù)據(jù)聚合等問題都需要應(yīng)用直接處理。這樣就會(huì)導(dǎo)致原本該是專注于業(yè)務(wù)的應(yīng)用,將會(huì)花大量的工作來處理分片后的問題,最重要的是每個(gè)應(yīng)用處理將是完全的重復(fù)造輪子。

因此有了數(shù)據(jù)庫中間件,應(yīng)用只需要集中于業(yè)務(wù)處理。而大量的通用的數(shù)據(jù)聚合,事務(wù),數(shù)據(jù)源切換都由中間件來處理,中間件的性能與處理能力將直接決定應(yīng)用的讀寫性能,所以一款好的數(shù)據(jù)庫中間件至關(guān)重要。


Mycat的主要作用

1、作為分布式數(shù)據(jù)庫中間件使用:

Mycat不僅可以連接mysql還可以連接其他諸如oracle、sql server等數(shù)據(jù)庫,因?yàn)镸ycat是使用Java編寫的,理論上只要Java能連接的數(shù)據(jù)庫,Mycat都可以連接。這就可以使得應(yīng)用無需直連數(shù)據(jù)庫,而是連接Mycat,此時(shí)后端數(shù)據(jù)庫對應(yīng)用就是透明的。這樣就可以對應(yīng)用屏蔽后端數(shù)據(jù)庫的復(fù)雜性,并保持連接方式的統(tǒng)一。

2、實(shí)現(xiàn)數(shù)據(jù)庫集群的讀寫分離和負(fù)載均衡

當(dāng)系統(tǒng)發(fā)展到后期,數(shù)據(jù)量上來后,數(shù)據(jù)庫架構(gòu)通常會(huì)向集群演進(jìn)。其中Replication集群方案,節(jié)點(diǎn)存在主從角色,也就是常說的主從架構(gòu)。在這種集群下通常由主節(jié)點(diǎn)負(fù)責(zé)寫,從節(jié)點(diǎn)負(fù)責(zé)讀。而Mycat可以作為中間層實(shí)現(xiàn)讀寫分離,無需每個(gè)應(yīng)用都寫一套讀寫分離邏輯。并且當(dāng)存在多個(gè)從節(jié)點(diǎn)時(shí),Mycat還可以將讀請求負(fù)載均衡到各個(gè)從節(jié)點(diǎn)上。

3、實(shí)現(xiàn)數(shù)據(jù)庫的高可用:

當(dāng)數(shù)據(jù)庫架構(gòu)是一主一從時(shí),可以利用Mycat實(shí)現(xiàn)數(shù)據(jù)庫的高可用。當(dāng)主節(jié)點(diǎn)掛掉后,Mycat可以切換到從節(jié)點(diǎn)上進(jìn)行讀寫。但不適用于一主多從的情況,因?yàn)橹鞴?jié)點(diǎn)掛掉后,Mycat只能切換到其中一個(gè)從節(jié)點(diǎn)上,而不能改變節(jié)點(diǎn)的角色。這樣就會(huì)導(dǎo)致剩余的從節(jié)點(diǎn)無法對其進(jìn)行數(shù)據(jù)同步。因此,一主多從需采用MMM或MHA等方式來實(shí)現(xiàn)高可用。

4、對業(yè)務(wù)數(shù)據(jù)庫進(jìn)行垂直切分:

當(dāng)系統(tǒng)中的寫負(fù)載上來后,單個(gè)主節(jié)點(diǎn)開始無法承受寫請求的壓力,這時(shí)就需要增加主節(jié)點(diǎn)來分擔(dān)負(fù)載。擁有多個(gè)主節(jié)點(diǎn)后,通常會(huì)將一個(gè)庫里沒有依賴關(guān)系的表拆分到不同的庫中,或?qū)⒁恍┐蟊聿鸪尚”?,以分散?fù)載。這也就是數(shù)據(jù)庫的垂直切分。

存在多個(gè)主節(jié)點(diǎn)就意味著應(yīng)用可能需要對多個(gè)數(shù)據(jù)庫進(jìn)行操作,而Mycat可以將多個(gè)數(shù)據(jù)庫抽象成一個(gè)邏輯庫。這樣對于應(yīng)用來說就無需改動(dòng)代碼去操作多個(gè)數(shù)據(jù)源,只需要操作Mycat中的邏輯庫即可。

5、對業(yè)務(wù)數(shù)據(jù)庫進(jìn)行水平切分:

當(dāng)數(shù)據(jù)庫進(jìn)行了垂直切分后,可能依舊會(huì)有一些庫的寫負(fù)載比較高,或者數(shù)據(jù)量達(dá)到單表極限。那么就需要考慮進(jìn)行水平切分,所謂水平切分就是分庫分表。垂直切分與水平切分的區(qū)別在于:水平切分后每個(gè)庫里的表結(jié)構(gòu)是一樣的,切分的是數(shù)據(jù)。而垂直切分則是不同的庫里表結(jié)構(gòu)是不一樣的,切分的是表。

當(dāng)數(shù)據(jù)庫進(jìn)行水平切分后,應(yīng)用在寫數(shù)據(jù)時(shí)就需要考慮應(yīng)該將數(shù)據(jù)寫入到哪一個(gè)庫中。而Mycat可以通過特定的策略將寫請求分發(fā)到某個(gè)數(shù)據(jù)庫上,這樣應(yīng)用就只需要將寫請求發(fā)給Mycat即可,無需考慮應(yīng)該寫哪個(gè)庫。

6、控制數(shù)據(jù)庫連接數(shù)量:

系統(tǒng)中存在比較多的應(yīng)用,而每個(gè)應(yīng)用都有自己的一個(gè)連接池,那么當(dāng)訪問量增大就有可能超出數(shù)據(jù)庫的最大連接數(shù)量。此時(shí)就可以通過Mycat建立一個(gè)公共的連接池,所有的應(yīng)用都統(tǒng)一通過這個(gè)連接池來獲取數(shù)據(jù)庫的連接。從而控制同時(shí)連接數(shù)據(jù)庫的應(yīng)用數(shù)量,起到一個(gè)限流的作用,可以保證系統(tǒng)更加的穩(wěn)定。


Mycat基本元素

邏輯庫:

通常對實(shí)際應(yīng)用來說,并不需要知道Mycat的存在,業(yè)務(wù)開發(fā)人員只需要知道數(shù)據(jù)庫的概念,所以數(shù)據(jù)庫中間件可以被看做是一個(gè)或多個(gè)數(shù)據(jù)庫集群構(gòu)成的邏輯庫,需要注意的是邏輯庫不存儲(chǔ)數(shù)據(jù)。所以不管中間件背后是怎么樣的數(shù)據(jù)庫架構(gòu),對于應(yīng)用來說都是在操作一個(gè)數(shù)據(jù)庫,而這個(gè)數(shù)據(jù)庫就是Mycat抽象出來的邏輯庫。

邏輯表:

既然有邏輯庫,那么就會(huì)有邏輯表,分布式數(shù)據(jù)庫中,對應(yīng)用來說,讀寫數(shù)據(jù)的表就是邏輯表。邏輯表,可以是數(shù)據(jù)切分后,分布在一個(gè)或多個(gè)分片庫中。也可以不做數(shù)據(jù)切分,不分片,只有一個(gè)表構(gòu)成。同樣,邏輯表也不存儲(chǔ)數(shù)據(jù)。

邏輯表分類:

  • 分片表:數(shù)據(jù)被拆分到多個(gè)數(shù)據(jù)庫中的表
  • 非分片表:數(shù)據(jù)未被拆分過的表
  • 全局表:結(jié)構(gòu)類似于字典并存在于所有分片中的表,目的是解決跨分片數(shù)據(jù) join
  • ER 表:按 ER 關(guān)系進(jìn)行分片的表,目的是讓子表的記錄與所關(guān)聯(lián)的父表記錄存放在同一個(gè)數(shù)據(jù)分片上,保證數(shù)據(jù) join不會(huì)跨庫

Mycat安裝

環(huán)境:

  • 系統(tǒng):CentOS 7
  • JDK:11
  • Mycat:1.6.7.4

首先到官方下載地址獲取下載鏈接,然后到linux使用如下命令進(jìn)行下載并解壓:

[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的目錄結(jié)構(gòu)如下:

[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  # 可執(zhí)行文件目錄
[root@txy-server /usr/local/mycat]#

為Mycat創(chuàng)建一個(gè)系統(tǒng)賬戶,并更改mycat目錄的所屬用戶,因?yàn)樵趯?shí)際的環(huán)境中是不可能讓程序擁有root賬戶權(quán)限的。命令如下:

[root@txy-server /usr/local]# useradd mycat -s /sbin/nologin
[root@txy-server /usr/local]# chown -R mycat:mycat mycat/

配置環(huán)境變量:

[root@txy-server ~]# vim /etc/profile
export MYCAT_HOME=/usr/local/mycat
export PATH=$PATH:$MYCAT_HOME/bin
[root@txy-server ~]# source /etc/profile

由于我這里機(jī)器內(nèi)存只有2G,所以需要修改一下Mycat啟動(dòng)參數(shù),將最大內(nèi)存改為1G,該參數(shù)默認(rèn)是2G。當(dāng)然,如果你的機(jī)器內(nèi)存足夠的話就不需要更改:

[root@txy-server /usr/local]# vim mycat/conf/wrapper.conf
wrapper.java.additional.4=-XX:MaxDirectMemorySize=1G

啟動(dòng)Mycat服務(wù):

[root@txy-server ~]# mycat start

查看日志,輸出了successfully表示啟動(dòng)成功:

[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啟動(dòng)后默認(rèn)會(huì)監(jiān)聽8066、9066等端口,如果開啟了防火墻,還需要對端口進(jìn)行放行。開放端口的命令如下:

[root@txy-server ~]# firewall-cmd --zone=public --add-port=${端口號}/tcp --permanent
[root@txy-server ~]# firewall-cmd --reload

到此為止,我們就成功將Mycat服務(wù)搭建起來了。


搭建好Mycat之后,要如何進(jìn)行使用呢?第一步就是要了解其核心配置文件,由于篇幅有限關(guān)于配置的內(nèi)容在下一篇中進(jìn)行介紹:

  • Mycat 核心配置詳解
向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI