1. 程式人生 > >mycat基本概念及讀寫分離一

mycat基本概念及讀寫分離一

heartbeat sha linux系統中 mys ren ack ima text 雙master

mycat基本概念及讀寫分離一

目錄(?)[+]

  1. 安裝與啟動
  2. mycat目錄介紹
  3. mycat三個最重要配置文件
  4. 驗證讀寫分離

安裝與啟動

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

1) vi /etc/profile,在系統環境變量文件中增加

[java] view plain copy print?
  1. export MYCAT_HOME=/usr/local/mycat

2) 使環境變量生效

[java] view plain copy print?
  1. source /etc/profile

[註]如果是在多臺Linux系統中組建的 MyCAT集群,那需要在MyCAT Server所在的服務器上配置對其他ip和主機名的映射,配置方式如下: vi /etc/hosts
例如:我有4 臺機器,配置如下:
IP 主機名:
[java] view plain copy
print?
  1. 192.168.0.1 server_1
  2. 192.168.0.2 server_2
  3. 192.168.0.3 server_3
  4. 192.168.0.4 server_4
3)啟動mycat
[sql] view plain copy print?
  1. ./mycat start

4)連接mycat

mycat默認的使用端口8066,管理端口9066

[sql] view plain copy print?
  1. mysql -uroot -p123456 -P9066 -h127.0.0.1 -DTESTDB 用戶名密碼配置在server.xml,或者
    user/user
  2. mysql -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 標簽就是一個獨立的數據分片。

[java] view plain copy print?
  1. <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這個庫

[java] view plain copy print?
  1. <schema name="mycat1" checkSQLschema="false" sqlMaxLimit="100">
  2. <!-- auto sharding by id (long) -->
  3. <table name="food" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" />
  4. </schema>
[java] view plain copy print?
  1. database要與實際的數據庫實例對應:
  2. <dataNode name="dn1" dataHost="localhost1" database="zy_mycat1" />
  3. <dataNode name="dn2" dataHost="localhost1" database="zy_mycat2" />
  4. <dataNode name="dn3" dataHost="localhost1" database="zy_mycat3" />
  5. dataHost是關鍵,用戶名密碼要與實際的數據庫對應,不然mycat是啟動不來的。這裏我只配置了一個master,沒有slave
  6. <dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"
  7. writeType="0" dbType="mysql" dbDriver="native" switchType="-1" slaveThreshold="100">
  8. <heartbeat>select user()</heartbeat>
  9. <writeHost host="hostM1" url="172.23.29.111:3306" user="root" password="123456" />
  10. <writeHost host="hostS2" url="172.23.29.112:3306" user="changhf" password="123456"/> -->
  11. </dataHost>


二、server.xml

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

[java] view plain copy print?
  1. <user name="root">
  2. <property name="password">123456</property>
  3. <property name="schemas">TESTDB,mycat1</property>
  4. </user>
重新啟動mycat

[java] view plain copy print?
  1. ./mycat restart

三、rule.xml

rule.xml裏面就定義了我們對表進行拆分所涉及到的規則定義。。這個文件裏面主要有 tableRule 和function這兩個標簽。

驗證讀寫分離

[java] view plain copy print?
  1. create table food (id bigint not null primary key,user_id varchar(100),traveldate DATE, fee decimal,days int);
  2. 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 兩篇文章




mycat基本概念及讀寫分離一