MySQL中使用mycat怎么實(shí)現(xiàn)讀寫分離

這篇文章給大家介紹MySQL中使用mycat 怎么實(shí)現(xiàn)讀寫分離,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。

成都創(chuàng)新互聯(lián)公司主要從事網(wǎng)站設(shè)計(jì)制作、成都做網(wǎng)站、網(wǎng)頁(yè)設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)懷化,十年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來(lái)電咨詢建站服務(wù):13518219792

MySQL讀寫分離的概述

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

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

讀寫分離工作原理:

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

MySQL中使用mycat 怎么實(shí)現(xiàn)讀寫分離

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

MySQL中使用mycat 怎么實(shí)現(xiàn)讀寫分離

為什么要讀寫分離:

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

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

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

  3. 增加冗余,提高可用性

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

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

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

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

MySQL中使用mycat 怎么實(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)分庫(kù),分表

C:無(wú)法適用大型應(yīng)用場(chǎng)景

中間件層實(shí)現(xiàn)

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

常見的中間件程序:

MySQL中使用mycat 怎么實(shí)現(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。總體來(lái)說(shuō)支持度比 較高,也會(huì)一直維護(hù)下去,

OneProxy:

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

Vitess:

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

Kingshard:

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

Atlas:

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

MaxScale與MySQL Route:

這兩個(gè)中間件都算是官方的吧,MaxScale是mariadb (MySQL原作者維護(hù)的一個(gè)版本)研發(fā)的,目前版本不支持分庫(kù)分表。MySQL Route是現(xiàn)在MySQL官方Oracle公司發(fā)布出來(lái)的一個(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ì)的支持

什么是MYCAT

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

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

·  一個(gè)可以視為MySQL集群的企業(yè)級(jí)數(shù)據(jù)庫(kù),用來(lái)替代昂貴的Oracle集群

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

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

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

MySQL中使用mycat 怎么實(shí)現(xiàn)讀寫分離

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

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

linux下可以下載Mycat-server-xxxxx.linux.tar.gz 解壓在某個(gè)目錄下,注意目錄不能有空格,在Linux(Unix)下,建議放在usr/local/Mycat目錄下,如下:

MySQL中使用mycat 怎么實(shí)現(xiàn)讀寫分離

下面是修改MyCAT用戶密碼的方式(僅供參考):

MySQL中使用mycat 怎么實(shí)現(xiàn)讀寫分離

目錄解釋如下:

bin 程序目錄,存放了window版本和linux版本,除了提供封裝成服務(wù)的版本之外,也提供了nowrap的shell腳本命令,方便大家選擇和修改,進(jìn)入到bin目錄:

Linux下運(yùn)行:./mycat console,首先要chmod +x *

注:mycat支持的命令{ console | start | stop | restart | status | dump }

conf目錄下存放配置文件,server.xml是Mycat服務(wù)器參數(shù)調(diào)整和用戶授權(quán)的配置文件,schema.xml是邏輯庫(kù)定義和表以及分片定義的配置文件,rule.xml是分片規(guī)則的配置文件,分片規(guī)則的具體一些參數(shù)信息單獨(dú)存放為文件,也在這個(gè)目錄下,配置文件修改,需要重啟Mycat或者通過9066端口reload.

lib目錄下主要存放mycat依賴的一些jar文件.

日志存放在logs/mycat.log中,每天一個(gè)文件,日志的配置是在conf/log4j.xml中,根據(jù)自己的需要,可以調(diào)整輸出級(jí)別為debug,debug級(jí)別下,會(huì)輸出更多的信息,方便排查問題.

注意:Linux下部署安裝MySQL,默認(rèn)不忽略表名大小寫,需要手動(dòng)到/etc/my.cnf 下配置 lower_case_table_names=1 使Linux環(huán)境下MySQL忽略表名大小寫,否則使用MyCAT的時(shí)候會(huì)提示找不到表的錯(cuò)誤!

Mycat 需要安裝JDK 1.7 或者以上版本

第一步:下載jdk-8u131-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@xuegod68 java]# source /etc/profile  #使環(huán)境變量生效

查看java –version

2.2服務(wù)啟動(dòng)與啟動(dòng)設(shè)置

MyCAT在Linux中部署啟動(dòng)時(shí),首先需要在Linux系統(tǒng)的環(huán)境變量中配置MYCAT_HOME,操作方式如下:

  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)境變量生效。

如果是在多臺(tái)Linux系統(tǒng)中組建的MyCAT集群,那需要在MyCAT Server所在的服務(wù)器上配置對(duì)其他ip和主機(jī)名的映射,配置方式如下:

vi /etc/hosts

例如:我有3臺(tái)機(jī)器,配置如下:

IP 主機(jī)名:

10.10.10.67  xuegod67.cn

10.10.10.68  xuegod68.cn

10.10.10.70  xuegod70.cn

編輯完后,保存文件。

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

Vim /usr/local/mycat/conf/server.xml

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE mycat:server SYSTEM "server.dtd">

<mycat:server xmlns:mycat="http://org.opencloudb/">

        <system>

        <property name="defaultSqlParser">druidparser</property>

        </system>

        <user name="root">

                <property name="password">123456</property>

                <property name="schemas">ha</property>

        </user>

        <user name="user">

                <property name="password">user</property>

                <property name="schemas">ha</property>

                <property name="readOnly">true</property>

        </user>

</mycat:server>

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

Vim /usr/local/mycat/conf/schema.xml

<?xml version="1.0"?>

<!DOCTYPE mycat:schema SYSTEM "schema.dtd">

<mycat:schema xmlns:mycat="http://org.opencloudb/">

        <schema name="ha" checkSQLschema="false" sqlMaxLimit="100" dataNode='dn1'>

        </schema>

        <dataNode name="dn1" dataHost="dthost" database="ha"/>

        <dataHost name="dthost" maxCon="500" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="-1" slaveThreshold="100">

        <heartbeat>select user()</heartbeat>

        <writeHost host="xuegod68.cn" url="localhost:3306" user="root" password="123456">

        </writeHost>

        <writeHost host="xuegod68.cn" url="10.10.10.68:3306" user="root" password="123456" />

        </dataHost>

</mycat:schema>

有兩個(gè)參數(shù)需要注意,balance和 switchType。

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

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

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

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

4. balance="3",所有讀請(qǐng)求隨機(jī)的分發(fā)到wiriterHost對(duì)應(yīng)的readhost執(zhí)行,writerHost不負(fù)擔(dān)讀壓力

switchType指的是切換的模式,目前的取值也有4種:

1. switchType='-1' 表示不自動(dòng)切換

2. switchType='1' 默認(rèn)值,表示自動(dòng)切換

3. switchType='2' 基于MySQL主從同步的狀態(tài)決定是否切換,心跳語(yǔ)句為 show slave status

4. switchType='3'基于MySQL galary cluster的切換機(jī)制(適合集群)(1.4.1),心跳語(yǔ)句為 show status like 'wsrep%'。

經(jīng)過以上兩個(gè)步驟的配置,就可以到/usr/local/mycat/bin 目錄下執(zhí)行:

./mycat start

即可啟動(dòng)mycat服務(wù)!

MySQL中使用mycat 怎么實(shí)現(xiàn)讀寫分離

配置Mysql主從

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

[root@xuegod68 ~]# 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ù)庫(kù)使用的帳號(hào)

mysql> GRANT ALL PRIVILEGES ON *.* TO 'mycat'@"%" IDENTIFIED BY "123456";

mysql> grant replication slave on *.* toslave@"10.10.10.%"  identified by "123456";

mysql>flush privileges;

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

關(guān)閉密碼強(qiáng)度審計(jì),在my.cnf添加validate-password=off

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

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

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

mysql> grant all on db.* to  mycat@'%' identified by '123456';

mysql>flush privileges;

mysql>stop slave;    #停止slave

mysql> change master to master_host='10.10.10.68',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@xuegod67 ~]# /usr/local/mycat/bin/mycat  start

測(cè)試讀寫分離

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

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

[root@xuegod70 ~]# systemctl stop mysqld

在客戶端上測(cè)試讀寫

[root@xuegod67 ~]# mysql -uroot -p123456  -h 10.10.10.67 -P8066

mysql> use ha;

mysql> select * from t1;

MySQL中使用mycat 怎么實(shí)現(xiàn)讀寫分離

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

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

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

[root@xuegod68 ~]# systemctl stop mysqld

在客戶端上測(cè)試讀寫

[root@xuegod67 ~]# mysql -uroot -p123456  -h 10.10.10.67 -P8066

mysql> create table t3(id int);

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

mysql> use ha;

mysql> select * from t1;

MySQL中使用mycat 怎么實(shí)現(xiàn)讀寫分離

關(guān)于MySQL中使用mycat 怎么實(shí)現(xiàn)讀寫分離就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。

名稱欄目:MySQL中使用mycat怎么實(shí)現(xiàn)讀寫分離
網(wǎng)頁(yè)地址:http://muchs.cn/article28/ipiccp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)網(wǎng)站排名、商城網(wǎng)站、網(wǎng)站營(yíng)銷、定制開發(fā)面包屑導(dǎo)航

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

手機(jī)網(wǎng)站建設(shè)