久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

怎么理解Mycat讀寫分離

143次閱讀
沒有評論

共計 5883 個字符,預(yù)計需要花費 15 分鐘才能閱讀完成。

這篇文章主要介紹“怎么理解 Mycat 讀寫分離”,在日常操作中,相信很多人在怎么理解 Mycat 讀寫分離問題上存在疑惑,丸趣 TV 小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”怎么理解 Mycat 讀寫分離”的疑惑有所幫助!接下來,請跟著丸趣 TV 小編一起來學(xué)習(xí)吧!

1 MySQL 讀寫分離的概述

Mysql 作為目前世界上使用最廣泛的免費數(shù)據(jù)庫,相信所有從事系統(tǒng)運維的工程師都一定接觸過。但在實際的生產(chǎn)環(huán)境中,由單臺 Mysql 作為獨立的數(shù)據(jù)庫是完全不能滿足實際需求的,無論是在安全性,高可用性以及高并發(fā)等各個方面。

因此,一般來說都是通過主從復(fù)制(Master-Slave)的方式來同步數(shù)據(jù),再通過讀寫分離(MySQL-Proxy/Amoeba)來提升數(shù)據(jù)庫的并發(fā)負(fù)載能力,這樣的方案來進行部署與實施的。

1.1   讀寫分離工作原理:

基本的原理是讓主數(shù)據(jù)庫處理事務(wù)性增、改、刪操作(INSERT、UPDATE、DELETE),而從數(shù)據(jù)庫處理 SELECT 查詢操作。數(shù)據(jù)庫復(fù)制被用來把事務(wù)性操作導(dǎo)致的變更同步到集群中的從數(shù)據(jù)庫。

數(shù)據(jù)內(nèi)部交換過程:

1.2   為什么要讀寫分離:

1)面對越來越大的訪問壓力,單臺的服務(wù)器的性能成為瓶頸,需要分擔(dān)負(fù)載;

2)主從只負(fù)責(zé)各自的寫和讀,極大程度的緩解 X 鎖和 S 鎖爭用;

3)從庫可配置 myisam 引擎,提升查詢性能以及節(jié)約系統(tǒng)開銷;

4)增加冗余,提高可用性。

1.3   實現(xiàn)讀寫分離的方式:

一般有兩種方式實現(xiàn)

1)應(yīng)用程序?qū)訉崿F(xiàn),網(wǎng)站的程序?qū)崿F(xiàn);

2)應(yīng)用程序?qū)訉崿F(xiàn)指的是在應(yīng)用程序內(nèi)部及連接器中實現(xiàn)讀寫分離。

優(yōu)點:

A:應(yīng)用程序內(nèi)部實現(xiàn)讀寫分離,安裝既可以使用;

B:減少一定部署難度;

C:訪問壓力在一定級別以下,性能很好。

缺點:

A:架構(gòu)一旦調(diào)整,代碼要跟著變;

B:難以實現(xiàn)高級應(yīng)用,如自動分庫,分表;

C:無法適用大型應(yīng)用場景。

中間件層實現(xiàn)

中間件層實現(xiàn)是指在外部中間件程序?qū)崿F(xiàn)讀寫分離

常見的中間件程序:

Cobar:

阿里巴巴 B2B 開發(fā)的關(guān)系型分布式系統(tǒng),管理將近 3000 個 MySQL 實例。在阿里經(jīng)受住了考驗,后面由于作者的走開的原因 cobar 沒有人維護了,阿里也開發(fā)了 tddl 替代 cobar。

MyCAT:

社區(qū)愛好者在阿里 cobar 基礎(chǔ)上進行二次開發(fā),解決了 cobar 當(dāng)時存在的一些問題,并且加入了許多新的功能在其中。目前 MyCAT 社區(qū)活躍度很高,目前已經(jīng)有一些公司在使用 MyCAT。總體來說支持度比較高,也會一直維護下去,

OneProxy:

數(shù)據(jù)庫界大牛,前支付寶數(shù)據(jù)庫團隊領(lǐng)導(dǎo)樓總開發(fā),基于 mysql 官方的 proxy 思想利用 c 進行開發(fā)的,OneProxy 是一款商業(yè)收費的中間件,樓總舍去了一些功能點,專注在性能和穩(wěn)定性上。有朋友測試過說在高并發(fā)下很穩(wěn)定。

Vitess:

這個中間件是 Youtube 生產(chǎn)在使用的,但是架構(gòu)很復(fù)雜。與以往中間件不同,使用 Vitess 應(yīng)用改動比較大要使用他提供語言的 API 接口,我們可以借鑒他其中的一些設(shè)計思想。

Kingshard:

Kingshard 是前 360Atlas 中間件開發(fā)團隊的陳菲利用業(yè)務(wù)時間用 go 語言開發(fā)的,目前參與開發(fā)的人員有 3 個左右,目前來看還不是成熟可以使用的產(chǎn)品,需要在不斷完善。

Atlas:

360 團隊基于 mysql proxy 把 lua 用 C 改寫。原有版本是支持分表,目前已經(jīng)放出了分庫分表版本。在網(wǎng)上看到一些朋友經(jīng)常說在高并發(fā)下會經(jīng)常掛掉,如果大家要使用需要提前做好測試。

MaxScale 與 MySQL Route:

這兩個中間件都算是官方的,MaxScale 是 mariadb (MySQL 原作者維護的一個版本) 研發(fā)的,目前版本不支持分庫分表。MySQL Route 是現(xiàn)在 MySQL 官方 Oracle 公司發(fā)布出來的一個中間件。

優(yōu)點:

A:架構(gòu)設(shè)計更靈活;

B:可以在程序上實現(xiàn)一些高級控制,如:透明化水平拆分,failover, 監(jiān)控;

C:可以依靠些技術(shù)手段提高 mysql 性能;

D:對業(yè)務(wù)代碼的影響小,同時也安全。

缺點:

需要一定的開發(fā)運維團隊的支持。

2   什么是 MYCAT

一個徹底開源的,面向企業(yè)應(yīng)用開發(fā)的大數(shù)據(jù)庫集群;

支持事務(wù)、ACID、可以替代 MySQL 的加強版數(shù)據(jù)庫;

一個可以視為 MySQL 集群的企業(yè)級數(shù)據(jù)庫,用來替代昂貴的 Oracle 集群;

一個融合內(nèi)存緩存技術(shù)、NoSQL 技術(shù)、HDFS 大數(shù)據(jù)的新型 SQL Server;

結(jié)合傳統(tǒng)數(shù)據(jù)庫和新型分布式數(shù)據(jù)倉庫的新一代企業(yè)級數(shù)據(jù)庫產(chǎn)品;

一個新穎的數(shù)據(jù)庫中間件產(chǎn)品。

3   服務(wù)安裝與配置

實驗架構(gòu)

服務(wù)器

IP

說明

xuegod65

192.168.1.65

mycat 服務(wù)器,連接數(shù)據(jù)庫時,連接此服務(wù)器

xuegod63

192.168.1.63

物理數(shù)據(jù)庫 1,master

xuegod64

192.168.1.64

物理數(shù)據(jù)庫 2,slave

MyCAT 有提供編譯好的安裝包,支持 windows、Linux、Mac、Solaris 等系統(tǒng)上安裝與運行。官方下載主頁 http://www.mycat.io。

3.1   文件結(jié)構(gòu)

linux 下可以下載 Mycat-server-xxxxx.linux.tar.gz 解壓在某個目錄下,注意目錄不能有空格,

在 Linux(Unix) 下,建議放在 /usr/local/Mycat 目錄下,

目錄結(jié)構(gòu)

目錄

說明

bin

mycat 命令,啟動、重啟、停止等

catlet

catlet 為 Mycat 的一個擴展功能

conf

Mycat 配置信息, 重點關(guān)注

lib

Mycat 引用的 jar 包,Mycat 是 java 開發(fā)的

logs

日志文件,包括 Mycat 啟動的日志和運行的日志。

配置文件

文件

說明

server.xml

Mycat 的配置文件,設(shè)置賬號、參數(shù)等

schema.xml

Mycat 對應(yīng)的物理數(shù)據(jù)庫和數(shù)據(jù)庫表的配置

rule.xml

Mycat 分片(分庫分表)規(guī)則

3.2 mycat 安裝 (xuegod65)1. 安裝 JDK 1.7 或者以上版本  

第一步:下載 jdk-8u131-linux-x64.tar.gz 文件 http://haixi.sfkcn.com:8080/201704/tools/jdk-linux-x64.tar.gz

第二步:新建 /usr/java 文件夾,將 jdk-8u131-linux-x64.tar.gz 放到該文件夾中,并解壓到當(dāng)前目錄下

第三步:配置環(huán)境變量 在 /etc/profile 底部加入如下內(nèi)容:

JAVA_HOME=/usr/java/jdk1.8.0_131

PATH=$JAVA_HOME/bin:$PATH CLASSPATH=$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar

export PATH JAVA_HOME CLASSPATH

[root@xuegod65 java]# source /etc/profile  # 使環(huán)境變量生效

查看 java –version

2. 解壓 mycat 安裝  

linux 下可以下載 Mycat-server-xxxxx.linux.tar.gz 解壓到 /usr/local/,注意目錄不能有空格

創(chuàng)建 mycat 用戶,并修改密碼 useradd mycat

修改權(quán)限 chown – R mycat.mycat  /usr/local/mycat

配置環(huán)境變量

1) vi /etc/profile, 在系統(tǒng)環(huán)境變量文件中增加

MYCAT_HOME=/usr/local/mycat

PATH=$MYCAT_HOME/bin:$PATH

2) 執(zhí)行 source /etc/profile 命令,使環(huán)境變量生效。

編輯 hosts 文件

192.168.1.63    xuegod63.cn     xuegod63

192.168.1.64    xuegod64.cn     xuegod64

192.168.1.65    xuegod65.cn     xuegod65

4   服務(wù)啟動與啟動設(shè)置

(mycat 的用戶賬號和授權(quán)信息是在 conf/server.xml 文件中配置

[root@xuegod65 ~]#Vim /usr/local/mycat/conf/server.xml

 

druidparser

user name= root

123456

ha

user

ha

true

參數(shù)說明

user      用戶配置節(jié)點

–name  登錄的用戶名,也就是連接 Mycat 的用戶名,這里就是對于外部應(yīng)用

–password  登錄的密碼,也就是連接 Mycat 的密碼

–schemas  數(shù)據(jù)庫名,這里會和 schema.xml 中的配置關(guān)聯(lián),多個用逗號分開,例如需要這個用戶需要管理兩個數(shù)據(jù)庫 db1,db2,則配置 db1,dbs

–privileges  配置用戶針對表的增刪改查的權(quán)限,具體見文檔吧

編輯 MyCAT 的配置文件 schema.xml,關(guān)于 dataHost 的配置信息如下:

[root@xuegod65 ~]#vim /usr/local/mycat/conf/schema.xml

select user()

以下是一個模版解釋

select user()

 

balance  屬性負(fù)載均衡類型,目前的取值有 4 種:

balance= 0 , 不開啟讀寫分離機制,所有讀操作都發(fā)送到當(dāng)前可用的 writeHost 上。

balance= 1,全部的 readHost 與 stand by writeHost 參與 select 語句的負(fù)載均衡,簡單的說,當(dāng)雙主雙從模式 (M1 – S1,M2- S2,并且 M1 與 M2 互為主備),正常情況下,M2,S1,S2 都參與 select 語句的負(fù)載均衡。

balance= 2,所有讀操作都隨機的在 writeHost、readhost 上分發(fā)。

balance= 3,所有讀請求隨機的分發(fā)到 wiriterHost 對應(yīng)的 readhost 執(zhí)行,writerHost 不負(fù)擔(dān)讀壓力,注意 balance=3 只在 1.4 及其以后版本有,1.3 沒有。

 

writeType  屬性,負(fù)載均衡類型,目前的取值有 3 種:

writeType= 0 , 所有寫操作發(fā)送到配置的第一個 writeHost,第一個掛了切到還生存的第二個 writeHost,重新啟動后已切換后的為準(zhǔn),切換記錄在配置文件中:dnindex.properties .

writeType= 1,所有寫操作都隨機的發(fā)送到配置的 writeHost。

writeType= 2,沒實現(xiàn)。

 

switchType  屬性

-1 表示不自動切換

1 默認(rèn)值,自動切換

2 基于 MySQL 主從同步的狀態(tài)決定是否切換

5   配置 Mysql 主從

xuegod63 上創(chuàng)建數(shù)據(jù)庫和表,用于實現(xiàn)寫操作:

[root@xuegod63 ~]# mysql -uroot -p123456

mysql create database ha;

mysql use ha;

mysql create table test(id int,name varchar(20));

mysql insert into test values(1, man

授權(quán)給 mycat 登陸數(shù)據(jù)庫使用的帳號

mysql grant all privileges on *.* to  mycat@ % identified by 123456

mysql grant replication slave on *.* to slave@ 192.168.1.% identified by 123456

mysql flush privileges;

mysqldump –uroot –p123456  -B ha ha.sql  # 導(dǎo)出給從庫

scp ha.sql xuegod64.cn:/root

[root@xuegod64 ~]# vim /etc/my.cnf

log-bin=mysql-bin-master  # 啟用二進制日志

server-id=1   #本機數(shù)據(jù)庫 ID 標(biāo)示

binlog-do-db=HA #可以被從服務(wù)器復(fù)制的庫, 二進制需要同步的數(shù)據(jù)庫名

binlog-ignore-db=mysql  # 不可以被從服務(wù)器復(fù)制的庫

如需關(guān)閉密碼強度審計,在 my.cnf 添加 validate-password=off

[root@xuegod64 ~]# systemctl restart mysqld

xuegod64 上導(dǎo)入數(shù)據(jù)庫和表,用于實現(xiàn)讀操作:

[root@xuegod64 ~]# mysql -uroot -p123456 ha.sql  

授權(quán)給 mycat 登陸數(shù)據(jù)庫使用的帳號

mysql grant all privileges on *.* to  mycat@ % identified by 123456

mysql flush privileges;

[root@xuegod64 ~]# vim /etc/my.cnf

server-id=2   #本機數(shù)據(jù)庫 ID 標(biāo)示

[root@xuegod64 ~]# systemctl restart mysqld

mysql stop slave;    # 停止 slave

mysql change master to master_host= 192.168.1.63 ,master_user= slave ,master_password= 123456

mysql start slave;    # 啟動 slave

mysql show slave status\G 查看狀態(tài),有兩個 yes 主從同步成功!

啟動服務(wù) mycat 服務(wù)

[root@xuegod65~]# /usr/local/mycat/bin/mycat  start

測試讀寫分離

6   當(dāng)我們 slave 掛掉后咋樣呢

模擬故障:從服務(wù)器掛掉了

[root@xuegod64 ~]# systemctl stop mysqld

在客戶端上測試讀寫

[root@xuegod66 ~]# mysql -uroot -p123456  -h 192.168.1.65-P8066

mysql use ha;

mysql select * from t1;

說明讀操作的路由切換到 master 上了,對外沒有任何影響!

7   當(dāng)我們 master 掛掉后咋樣呢

模擬故障:主服務(wù)器掛掉了

[root@xuegod63 ~]# systemctl stop mysqld

在客戶端上測試讀寫

[root@xuegod66 ~]# mysql -uroot -p123456  -h 192.168.1.65 -P8066

mysql create table t3(id int);

ERROR 1184 (HY000): 拒絕連接 #主數(shù)據(jù)庫停止了,是無法寫操作的,但不影響讀.

mysql use ha;

mysql select * from t1;

到此,關(guān)于“怎么理解 Mycat 讀寫分離”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注丸趣 TV 網(wǎng)站,丸趣 TV 小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

正文完
 
丸趣
版權(quán)聲明:本站原創(chuàng)文章,由 丸趣 2023-07-24發(fā)表,共計5883字。
轉(zhuǎn)載說明:除特殊說明外本站除技術(shù)相關(guān)以外文章皆由網(wǎng)絡(luò)搜集發(fā)布,轉(zhuǎn)載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 龙口市| 射洪县| 阿鲁科尔沁旗| 曲沃县| 仙桃市| 历史| 察隅县| 荥阳市| 通江县| 商都县| 平武县| 衡阳市| 台中县| 锡林浩特市| 信阳市| 渝北区| 合山市| 岳池县| 清徐县| 池州市| 忻城县| 蓝山县| 荥经县| 长武县| 荃湾区| 甘南县| 石阡县| 内江市| 沙洋县| 中牟县| 常山县| 墨江| 嘉兴市| 祁阳县| 华容县| 镇安县| 汨罗市| 右玉县| 南澳县| 景东| 颍上县|