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