mycat基本概念及讀寫分離一

來源:互聯網
上載者:User
安裝與啟動

linux下可以下載Mycat-server-xxxxx.linux.tar.gz 解壓在某個目錄下,建議放在usr/local/mycat目錄下,注意目錄不能有空格。下載後改名,解壓到/usr/server,工程名字mycat,配置環境變數,並使之生效:

1) vi /etc/profile,在系統內容變數檔案中增加 

export MYCAT_HOME=/usr/local/mycat 

2) 使環境變數生效

source /etc/profile

[注]如果是在多台Linux系統中組建的 MyCAT叢集,那需要在MyCAT Server所在的伺服器上配置對其他ip和主機名稱的映射,配置方式如下:  vi /etc/hosts 
例如:我有4 台機器,配置如下: 
IP 主機名稱: 

192.168.0.1 server_1 192.168.0.2 server_2 192.168.0.3 server_3 192.168.0.4 server_4 
3)啟動mycat
./mycat start

4)串連mycat

mycat預設的使用連接埠8066,管理連接埠9066

mysql -uroot -p123456 -P9066 -h127.0.0.1 -DTESTDB 使用者名稱密碼配置在server.xml,或者user/usermysql -uroot -p123456 -P8066 -h127.0.0.1
其中-u,-p,-h分別是使用者名稱,密碼和主機,-D是串連的邏輯庫。
mycat目錄介紹

1) bin目錄: Linux下運行:./mycat console,首先要chmod +x * 

註:mycat支援的命令{ console | start | stop | restart | status | dump } 

2) conf目錄下存放設定檔,server.xml是mycat伺服器參數調整和使用者授權的設定檔,schema.xml是邏輯庫定義和表以及分區定義的設定檔,rule.xml是分區規則的設定檔,分區規則的具體一些參數資訊單獨存放為檔案,也在這個目錄下,設定檔修改,需要重啟 mycat或者通過9066 連接埠reload.  3) 日誌存放在logs/mycat.log 中,每天一個檔案,日誌的配置是在conf/log4j.xml中,根據自己的需要,可以調整輸出層級為debug,debug層級下,會輸出更多的資訊,方便排查問題. 

4) 注意:Linux下部署安裝 MySQL,預設不忽略表名大小寫,需要手動到/etc/my.cnf 下配置 lower_case_table_names=1 使Linux環境下MySQL忽略表名大小寫,否則使用MyCAT的時候會提示找不到表的錯誤。 mycat三個最重要設定檔

一、schema.xml

1、schema.xml作為 MyCat中重要的設定檔之一,管理著 MyCat的邏輯庫、表、分區規則、DataNode以及DataSource。弄懂這些配置,是正確使用MyCat的前提。
schema 標籤用於定義MyCat執行個體中的邏輯庫,MyCat可以有多個邏輯庫,每個邏輯庫都有自己的相關配置。邏輯庫的概念和 MYSQL資料庫中Database的概念相同
checkSQLschema 設定為false,並且在提供SQL select * from TESTDB.travelrecord 語句的最好是不帶TESTDB這個欄位。 sqlMaxLimit 設定該值的話,MyCat預設會把查詢到的資訊全部都展示出來,造成過多的輸出。所以,在正常使用中,還是建議加上一個值,用於減少過多的資料返回。 
2、table 標籤定義了MyCat中的邏輯表,所有需要拆分的表都需要在這個標籤中定義。 同一個schema標籤中定義的name必須唯一。 database 屬性所指定的是真實的資料庫名稱,需要在後面添加一個primaryKey 該邏輯表對應真實表的主鍵。rule屬性用於指定邏輯表要使用的規則名字,規則名字在rule.xml中定義,必須與tableRule標籤中name屬性屬性值一一對應。 type屬性 該屬性定義了邏輯表的類型,目前邏輯表只有“全域表”和”普通表”兩種類型。對應的配置: 全域表:global ,普通表:不指定該值為globla的所有表。有了全域表,這樣可以使用join了,同時增加讀寫分離。
3、dataNode 標籤定義了 MyCat中的資料節點,也就是我們通常說所的資料分區。一個dataNode 標籤就是一個獨立的資料分區。

<dataNode name="dn1" dataHost="lch3307" database="db1" ></dataNode> 
使用名字為lch3307資料庫執行個體上的db1物理資料庫,這就組成一個資料分區,最後,我們使用名字dn1標識這個分區。 
dataHost 屬性用於定義該分區屬於哪個資料庫執行個體的,屬性值是引用 dataHost標籤上定義的name屬性。 
4、 dataHost屬性 作為schema.xml中最後的一個標籤,該標籤在mycat邏輯庫中也是作為最底層的標籤存在,直接定義了具體的資料庫執行個體、讀寫分離配置和心跳語句。
1) maxCon與minCon 指定每個讀寫執行個體串連池的最大最小串連。
2) balance 負載平衡類型,目前的取值有 3種:  balance="1", 開啟讀寫分離機制
3) writeType 負載平衡類型,目前的取值有 3種: 
1. writeType="0", 所有寫操作發送到配置的第一個writeHost,第一個掛了切到還生存的第二個
4) writeHost,重新啟動後以切換後的為準,切換記錄在設定檔中:dnindex.properties . 其餘不推薦
5) heartbeat 這個標籤內指明用於和後端資料庫進行心跳檢查的語句。
6) writeHost 標籤、readHost 標籤 複雜看文檔
在一個dataHost內可以定義多個writeHost和readHost。但是,如果writeHost指定的後端資料庫宕機,那麼這個writeHost綁定的所有readHost都將不可用。另一方面,由於這個writeHost宕機系統會自動的檢測到,並切換到備用的writeHost上去。 


因此,該設定檔中的balance="1"意味著作為stand by writeHost的hostS1和hostS2將參與select語句的負載平衡,這就實現了主從的讀寫分離,switchType='-1'意味著當主掛掉的時候,不進行自動切換,即hostS1和hostS2並不會被提升為主,仍只提供讀的功能。這就避免了將資料寫進slave的可能性,畢竟,單純的MySQL主從叢集並不允許將資料讀進slave中,除非配置的是雙master。

添加mycat1這個庫

<schema name="mycat1" checkSQLschema="false" sqlMaxLimit="100"><!-- auto sharding by id (long) --><table name="food" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" /></schema>
database要與實際的資料庫執行個體對應:<dataNode name="dn1" dataHost="localhost1" database="zy_mycat1" /><dataNode name="dn2" dataHost="localhost1" database="zy_mycat2" /><dataNode name="dn3" dataHost="localhost1" database="zy_mycat3" />dataHost是關鍵,使用者名稱密碼要與實際的資料庫對應,不然mycat是啟動不來的。這裡我只配置了一個master,沒有slave<dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"  writeType="0" dbType="mysql" dbDriver="native" switchType="-1"  slaveThreshold="100"><heartbeat>select user()</heartbeat><writeHost host="hostM1" url="172.23.29.111:3306" user="root" password="123456" /><writeHost host="hostS2" url="172.23.29.112:3306" user="changhf" password="123456"/> --></dataHost>


二、server.xml

system 這個標籤內嵌套的所有property標籤都與系統配置有關其他包括定義了使用者名稱密碼,指定訪問到分區等,修改root使用者屬性,增加mycat1這個庫。

<user name="root"><property name="password">123456</property><property name="schemas">TESTDB,mycat1</property></user>
重新啟動mycat

./mycat restart
三、rule.xml

rule.xml裡面就定義了我們對錶進行拆分所涉及到的規則定義。。這個檔案裡面主要有 tableRule 和function這兩個標籤。 驗證讀寫分離

create table food (id bigint not null primary key,user_id varchar(100),traveldate DATE, fee decimal,days int);insert into food (id,user_id,traveldate,fee,days)  values(1,@@hostname,20160101,100,10),(5000001,@@hostname,20160102,100,10),(10000001,@@hostname,20160103,100,10);
關閉172.23.29.111的mysql服務,發現插入資料時提示串連失敗,而查詢並沒有影響。

參考:http://www.cnblogs.com/ivictor/p/5111495.html 兩篇文章




聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.