什麼是Mycatjava
1.Mycat就是MySQL Server,而Mycat後面鏈接的MySQL Server,就好象是MySQL的存儲引擎,如InnoDB,MyISAM等.所以,Mycat自己並不存儲數據,數據是在後端的MySQL上存儲的,所以數據可靠性以及事務等都是MySQL保證的.2.Mycat是數據庫中間件,就是介於數據庫與應用之間,進行數據處理與交互的中間服務。從原有的一個庫,被切分爲多個分片數據庫,全部的分片數據庫集羣構成了整個完整的數據庫存儲.因此有了數據庫中間件,應用只須要集中與業務處理,大量的通用的數據聚合,事務,數據源切換都由中間件來處理,中間件的性能與處理能力將直接決定應用的讀寫性能,因此一款好的數據庫中間件相當重要。mysql
術語
分片規則(rule)linux
邏輯庫(schema)
分片節點(dataNode)sql
節點主機(dataHost)數據庫
Mycat使用
首先要安裝,mysql5.7和mycat,而且兩臺主機要先作好mysql的主從複製,且兩臺主機的mysql都要存在db1數據庫,用來存放mycat的數據.vim
關於mysql的主從複製,這裏就不貼出了,能夠移步如下連接:後端
基於GTID的主從複製數據庫 http://www.linuxidc.com/Linux/2017-04/142451.htmapp
mysql的經典主從複製 http://www.linuxidc.com/Linux/2017-04/142452.htm分佈式
配置mycat
vim wrapper.conf
5 wrapper.java.command=/usr/bin/java #java命令所在目錄
31 wrapper.java.additional.5=-XX:MaxDirectMemorySize=2G 根據實際內存設置
33 wrapper.java.additional.7=-Dcom.sun.management.jmxremote.port=2984ide
定義mycat中能夠建立的表,以及哪些節點可使用哪些表
7<table name="travelrecord" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" />
11<table name="company" primaryKey="ID" type="global" dataNode="dn1,dn2,dn3" />
12<table name="goods" primaryKey="ID" type="global" dataNode="dn1,dn2" />
14<table name="hotnews" primaryKey="ID" autoIncrement="true" dataNode="dn1,dn2,dn3"
15 rule="mod-long" />
19 <table name="employee" primaryKey="ID" dataNode="dn1,dn2"
20 rule="sharding-by-intfile" />
21 <table name="customer" primaryKey="ID" dataNode="dn1,dn2"
22 rule="sharding-by-intfile">
23 <childTable name="orders" primaryKey="ID" joinKey="customer_id"
24 parentKey="id">
25 <childTable name="order_items" joinKey="order_id"
26 parentKey="id" />
27 </childTable>
28 <childTable name="customer_addr" primaryKey="ID" joinKey="customer_id"
29 parentKey="id" />
30 </table>
36 <dataNode name="dn1" dataHost="server33.lalala.com" database="db1" />
37 <dataNode name="dn2" dataHost="server33.lalala.com" database="db1" />
38 <dataNode name="dn3" dataHost="server33.lalala.com" database="db1" />
43 <dataHost name="server33.lalala.com" maxCon="1000" minCon="10" balance="0"
44 writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
45 <heartbeat>select user()</heartbeat>
46 <!-- can have multi write hosts -->
鏈接數據庫的用戶密碼,稍後還要在數據庫受權
由於咱們作的是高可用,因此33和44都具備寫的功能
vim schema.xml
47 <writeHost host="hostM1" url="server33.lalala.com:3306" user="mycat"
48 password="Mycat+007">
49 <!-- can have multi read hosts -->
50 </writeHost>
51 <writeHosthost="hostS1" url="server44.lalala.com:3306" user="mycat"
52 password="Mycat+007">
53 </writeHost>
server33,server44:
vim /etc/my.cnf
22 lower_case_table_names = 1
mysql>CREATE USER mycat identified by 'Mycat+007';
mysql>grant all privileges on *.* to mycat@'%';
配置成功,啓動~
mycat start ,查看日誌 wrapper.log
檢驗
mycat的登錄:
mysql -umycat -pMycat+007 -P8066 -h127.0.0.1
查看server44,和server33的mycat數據是否同步~
建表:
create table employee (id int not null primary key,name varchar(100),sharding_id int not null);
插入數據:
insert into employee(id,name,sharding_id) values(1,'leader us',10000);
insert into employee(id,name,sharding_id) values(2, 'me',10010);
insert into employee(id,name,sharding_id) values(3, 'mycat',10000);
insert into employee(id,name,sharding_id) values(4, 'mydog',10010);
在兩臺mycat上,都能看到相同的數據,即爲成功
而且在server33和server44上的db1數據庫中,也能看見剛剛建立的數據
heartbeat+drbd+mycat實現高可用分佈式存儲
存儲:drbd
vim /etc/drbd.d/lalalala.res
resource lalalala {
meta-disk internal;
device /dev/drbd8;
syncer {
verify-alg sha1;
}
on server33.lalala.com {
disk /dev/vdc;
address 172.25.88.33:7789;
}
on server44.lalala.com {
disk /dev/vdb;
address 172.25.88.44:7789;
}
}
高可用
vim ha.cf
initdead 60 資源初始化時間,若是設置過大,接管時間可能很長,不用擔憂,只須要耐心等待~
vim haresources
server33.lalala.com IPaddr::172.25.88.100/24/eth0 drbddisk::lalalala Filesystem::/dev/drbd8::/home/mycat/app/mycat/lib::ext4 mycatd
其餘配置照舊~
須要指出的是,由於mycat不屬於LSB,因此要本身編寫腳本啓動文件,我寫的太粗糙了,不要學我.....
vim /etc/init.d/mycatd 注意啓動腳本的位置
3 path=/home/mycat/app/mycat/bin/mycat #路徑爲執行mycat的環境,能夠用which查看
4 function usage(){
5 echo "$0 {start|stop|restart}"
6 exit 1
7 }
8 [ $# -ne 1 ] && usage #若是沒有輸入參數,就顯示本腳本用法
9
10
11 case $1 in
12 start)
13 $path/mycat start # &>/dev/null &
16 ;;
17 stop)
18 $path/mycat stop &>/dev/null &
21 ;;
22 restart)
23 $path/mycat start &>/dev/null &
24 $path/mycat stop &>/dev/null &
27 ;;
28 *)
29 printf "Usage:$0 {start|stop|restart}\n"
30 esac
啓動server33的heartbeat!
能夠看到IP,存儲,服務全都啓動拉!
查看掛載點和IP
高可用的接管,take over
本文永久更新連接地址:http://www.linuxidc.com/Linux/2017-04/142450.htm