這篇文章主要介紹“怎么理解Mycat讀寫分離”,在日常操作中,相信很多人在怎么理解Mycat讀寫分離問題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”怎么理解Mycat讀寫分離”的疑惑有所幫助!接下來,請(qǐng)跟著小編一起來學(xué)習(xí)吧!
為獨(dú)山等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計(jì)制作服務(wù),及獨(dú)山網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作、獨(dú)山網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!
Mysql作為目前世界上使用最廣泛的免費(fèi)數(shù)據(jù)庫,相信所有從事系統(tǒng)運(yùn)維的工程師都一定接觸過。但在實(shí)際的生產(chǎn)環(huán)境中,由單臺(tái)Mysql作為獨(dú)立的數(shù)據(jù)庫是完全不能滿足實(shí)際需求的,無論是在安全性,高可用性以及高并發(fā)等各個(gè)方面。
因此,一般來說都是通過主從復(fù)制(Master-Slave)的方式來同步數(shù)據(jù),再通過讀寫分離(MySQL-Proxy/Amoeba)來提升數(shù)據(jù)庫的并發(fā)負(fù)載能力,這樣的方案來進(jìn)行部署與實(shí)施的。
基本的原理是讓主數(shù)據(jù)庫處理事務(wù)性增、改、刪操作(INSERT、UPDATE、DELETE),而從數(shù)據(jù)庫處理SELECT查詢操作。數(shù)據(jù)庫復(fù)制被用來把事務(wù)性操作導(dǎo)致的變更同步到集群中的從數(shù)據(jù)庫。
數(shù)據(jù)內(nèi)部交換過程:
|
1)面對(duì)越來越大的訪問壓力,單臺(tái)的服務(wù)器的性能成為瓶頸,需要分擔(dān)負(fù)載;
2)主從只負(fù)責(zé)各自的寫和讀,極大程度的緩解X鎖和S鎖爭(zhēng)用;
3)從庫可配置myisam引擎,提升查詢性能以及節(jié)約系統(tǒng)開銷;
4)增加冗余,提高可用性。
一般有兩種方式實(shí)現(xiàn)
1)應(yīng)用程序?qū)訉?shí)現(xiàn),網(wǎng)站的程序?qū)崿F(xiàn);
2)應(yīng)用程序?qū)訉?shí)現(xiàn)指的是在應(yīng)用程序內(nèi)部及連接器中實(shí)現(xiàn)讀寫分離。
優(yōu)點(diǎn):
A:應(yīng)用程序內(nèi)部實(shí)現(xiàn)讀寫分離,安裝既可以使用;
B:減少一定部署難度;
C:訪問壓力在一定級(jí)別以下,性能很好。
缺點(diǎn):
A:架構(gòu)一旦調(diào)整,代碼要跟著變;
B:難以實(shí)現(xiàn)高級(jí)應(yīng)用,如自動(dòng)分庫,分表;
C:無法適用大型應(yīng)用場(chǎng)景。
中間件層實(shí)現(xiàn)
中間件層實(shí)現(xiàn)是指在外部中間件程序?qū)崿F(xiàn)讀寫分離
常見的中間件程序:
|
Cobar:
阿里巴巴B2B開發(fā)的關(guān)系型分布式系統(tǒng),管理將近3000個(gè)MySQL實(shí)例。在阿里經(jīng)受住了考驗(yàn),后面由于作者的走開的原因cobar沒有人維護(hù)了,阿里也開發(fā)了tddl替代cobar。
MyCAT:
社區(qū)愛好者在阿里cobar基礎(chǔ)上進(jìn)行二次開發(fā),解決了cobar當(dāng)時(shí)存在的一些問題,并且加入了許多新的功能在其中。目前MyCAT社區(qū)活躍度很高,目前已經(jīng)有一些公司在使用MyCAT??傮w來說支持度比較高,也會(huì)一直維護(hù)下去,
OneProxy:
數(shù)據(jù)庫界大牛,前支付寶數(shù)據(jù)庫團(tuán)隊(duì)領(lǐng)導(dǎo)樓總開發(fā),基于mysql官方的proxy思想利用c進(jìn)行開發(fā)的,OneProxy是一款商業(yè)收費(fèi)的中間件,樓總舍去了一些功能點(diǎn),專注在性能和穩(wěn)定性上。有朋友測(cè)試過說在高并發(fā)下很穩(wěn)定。
Vitess:
這個(gè)中間件是Youtube生產(chǎn)在使用的,但是架構(gòu)很復(fù)雜。與以往中間件不同,使用Vitess應(yīng)用改動(dòng)比較大要使用他提供語言的API接口,我們可以借鑒他其中的一些設(shè)計(jì)思想。
Kingshard:
Kingshard是前360Atlas中間件開發(fā)團(tuán)隊(duì)的陳菲利用業(yè)務(wù)時(shí)間用go語言開發(fā)的,目前參與開發(fā)的人員有3個(gè)左右,目前來看還不是成熟可以使用的產(chǎn)品,需要在不斷完善。
Atlas:
360團(tuán)隊(duì)基于mysql proxy 把lua用C改寫。原有版本是支持分表,目前已經(jīng)放出了分庫分表版本。在網(wǎng)上看到一些朋友經(jīng)常說在高并發(fā)下會(huì)經(jīng)常掛掉,如果大家要使用需要提前做好測(cè)試。
MaxScale與MySQL Route:
這兩個(gè)中間件都算是官方的,MaxScale是mariadb (MySQL原作者維護(hù)的一個(gè)版本)研發(fā)的,目前版本不支持分庫分表。MySQL Route是現(xiàn)在MySQL官方Oracle公司發(fā)布出來的一個(gè)中間件。
優(yōu)點(diǎn):
A:架構(gòu)設(shè)計(jì)更靈活;
B:可以在程序上實(shí)現(xiàn)一些高級(jí)控制,如:透明化水平拆分,failover,監(jiān)控;
C:可以依靠些技術(shù)手段提高mysql性能;
D:對(duì)業(yè)務(wù)代碼的影響小,同時(shí)也安全。
缺點(diǎn):
需要一定的開發(fā)運(yùn)維團(tuán)隊(duì)的支持。
一個(gè)徹底開源的,面向企業(yè)應(yīng)用開發(fā)的大數(shù)據(jù)庫集群;
支持事務(wù)、ACID、可以替代MySQL的加強(qiáng)版數(shù)據(jù)庫;
一個(gè)可以視為MySQL集群的企業(yè)級(jí)數(shù)據(jù)庫,用來替代昂貴的Oracle集群;
一個(gè)融合內(nèi)存緩存技術(shù)、NOSQL技術(shù)、HDFS大數(shù)據(jù)的新型SQL Server;
結(jié)合傳統(tǒng)數(shù)據(jù)庫和新型分布式數(shù)據(jù)倉庫的新一代企業(yè)級(jí)數(shù)據(jù)庫產(chǎn)品;
一個(gè)新穎的數(shù)據(jù)庫中間件產(chǎn)品。
實(shí)驗(yàn)架構(gòu)
服務(wù)器 | IP | 說明 |
xuegod65 | 192.168.1.65 | mycat服務(wù)器,連接數(shù)據(jù)庫時(shí),連接此服務(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)上安裝與運(yùn)行。官方下載主頁http://www.mycat.io。
linux下可以下載Mycat-server-xxxxx.linux.tar.gz 解壓在某個(gè)目錄下,注意目錄不能有空格,
在Linux(Unix)下,建議放在/usr/local/Mycat目錄下,
目錄 | 說明 |
bin | mycat命令,啟動(dòng)、重啟、停止等 |
catlet | catlet為Mycat的一個(gè)擴(kuò)展功能 |
conf | Mycat 配置信息,重點(diǎn)關(guān)注 |
lib | Mycat引用的jar包,Mycat是java開發(fā)的 |
logs | 日志文件,包括Mycat啟動(dòng)的日志和運(yùn)行的日志。 |
文件 | 說明 |
server.xml | Mycat的配置文件,設(shè)置賬號(hào)、參數(shù)等 |
schema.xml | Mycat對(duì)應(yīng)的物理數(shù)據(jù)庫和數(shù)據(jù)庫表的配置 |
rule.xml | Mycat分片(分庫分表)規(guī)則 |
第一步:下載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 |
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
(mycat的用戶賬號(hào)和授權(quán)信息是在conf/server.xml文件中配置
[root@xuegod65 ~]#Vim /usr/local/mycat/conf/server.xml
druidparser
123456 ha
user ha true
|
參數(shù)說明 |
user 用戶配置節(jié)點(diǎn) |
--name 登錄的用戶名,也就是連接Mycat的用戶名,這里就是對(duì)于外部應(yīng)用 |
--password 登錄的密碼,也就是連接Mycat的密碼 |
--schemas 數(shù)據(jù)庫名,這里會(huì)和schema.xml中的配置關(guān)聯(lián),多個(gè)用逗號(hào)分開,例如需要這個(gè)用戶需要管理兩個(gè)數(shù)據(jù)庫db1,db2,則配置db1,dbs |
--privileges 配置用戶針對(duì)表的增刪改查的權(quán)限,具體見文檔吧 |
編輯MyCAT的配置文件schema.xml,關(guān)于dataHost的配置信息如下:
[root@xuegod65 ~]#vim /usr/local/mycat/conf/schema.xml
select user()
|
以下是一個(gè)模版解釋
select user()
|
|
balance 屬性負(fù)載均衡類型,目前的取值有 4 種: |
balance="0", 不開啟讀寫分離機(jī)制,所有讀操作都發(fā)送到當(dāng)前可用的writeHost 上。 |
balance="1",全部的 readHost 與 stand by writeHost 參與 select 語句的負(fù)載均衡,簡(jiǎn)單的說,當(dāng)雙主雙從模式(M1 ->S1 , M2->S2,并且 M1 與 M2 互為主備),正常情況下, M2,S1,S2 都參與 select 語句的負(fù)載均衡。 |
balance="2", 所有讀操作都隨機(jī)的在 writeHost、 readhost 上分發(fā)。 |
balance="3", 所有讀請(qǐng)求隨機(jī)的分發(fā)到 wiriterHost 對(duì)應(yīng)的 readhost 執(zhí)行,writerHost 不負(fù)擔(dān)讀壓力,注意 balance=3 只在 1.4 及其以后版本有, 1.3 沒有。 |
writeType 屬性,負(fù)載均衡類型,目前的取值有 3 種: |
writeType="0", 所有寫操作發(fā)送到配置的第一個(gè) writeHost,第一個(gè)掛了切到還生存的第二個(gè)writeHost,重新啟動(dòng)后已切換后的為準(zhǔn),切換記錄在配置文件中:dnindex.properties . |
writeType="1",所有寫操作都隨機(jī)的發(fā)送到配置的 writeHost。 |
writeType="2",沒實(shí)現(xiàn)。 |
switchType 屬性 |
-1 表示不自動(dòng)切換 |
1 默認(rèn)值,自動(dòng)切換 |
2 基于MySQL 主從同步的狀態(tài)決定是否切換 |
xuegod63上創(chuàng)建數(shù)據(jù)庫和表,用于實(shí)現(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ù)庫使用的帳號(hào)
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 #啟用二進(jìn)制日志
server-id=1 #本機(jī)數(shù)據(jù)庫ID 標(biāo)示
binlog-do-db=HA #可以被從服務(wù)器復(fù)制的庫, 二進(jìn)制需要同步的數(shù)據(jù)庫名
binlog-ignore-db=mysql #不可以被從服務(wù)器復(fù)制的庫
如需關(guān)閉密碼強(qiáng)度審計(jì),在my.cnf添加validate-password=off
[root@xuegod64 ~]# systemctl restart mysqld
xuegod64上導(dǎo)入數(shù)據(jù)庫和表,用于實(shí)現(xiàn)讀操作:
[root@xuegod64 ~]# mysql -uroot -p123456 授權(quán)給mycat登陸數(shù)據(jù)庫使用的帳號(hào) mysql> grant all privileges on *.* to mycat@'%' identified by '123456'; mysql>flush privileges; [root@xuegod64 ~]# vim /etc/my.cnf server-id=2 #本機(jī)數(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; #啟動(dòng)slave mysql> show slave status\G 查看狀態(tài),有兩個(gè)yes主從同步成功! 啟動(dòng)服務(wù)mycat服務(wù) [root@xuegod65~]# /usr/local/mycat/bin/mycat start 測(cè)試讀寫分離 模擬故障:從服務(wù)器掛掉了 [root@xuegod64 ~]# systemctl stop mysqld 在客戶端上測(cè)試讀寫 [root@xuegod66 ~]# mysql -uroot -p123456 -h 192.168.1.65-P8066 mysql> use ha; mysql> select * from t1; 說明讀操作的路由切換到master上了,對(duì)外沒有任何影響! 模擬故障:主服務(wù)器掛掉了 [root@xuegod63 ~]# systemctl stop mysqld 在客戶端上測(cè)試讀寫 [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é)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!
6 當(dāng)我們slave掛掉后咋樣呢
7 當(dāng)我們master掛掉后咋樣呢
新聞名稱:怎么理解Mycat讀寫分離
本文網(wǎng)址:http://weahome.cn/article/ipjgdj.html