基于mysql的主从复制之Mycat简单配置和高可用
what-mycat
1.Mycat就是MySQL Server,而Mycat后面連接的MySQL Server,就好象是MySQL的存儲(chǔ)引擎,如InnoDB,MyISAM等.
因此,Mycat本身并不存儲(chǔ)數(shù)據(jù),數(shù)據(jù)是在后端的MySQL上存儲(chǔ)的,因此數(shù)據(jù)可靠性以及事務(wù)等都是MySQL保證的.
2.Mycat是數(shù)據(jù)庫中間件,就是介于數(shù)據(jù)庫與應(yīng)用之間,進(jìn)行數(shù)據(jù)處理與交互的中間服務(wù)。從原有的一個(gè)庫,被切分為多個(gè)分片數(shù)據(jù)庫,所有的分片數(shù)據(jù)庫集群構(gòu)成了整個(gè)完整的數(shù)據(jù)庫存儲(chǔ).
所以有了數(shù)據(jù)庫中間件,應(yīng)用只需要集中與業(yè)務(wù)處理,大量的通用的數(shù)據(jù)聚合,事務(wù),數(shù)據(jù)源切換都由中間件來處理,中間件的性能與處理能力將直接決定應(yīng)用的讀寫性能,所以一款好的數(shù)據(jù)庫中間件至關(guān)重要。
術(shù)語
分片規(guī)則(rule)
邏輯庫(schema)
分片節(jié)點(diǎn)(dataNode)
節(jié)點(diǎn)主機(jī)(dataHost)
how-mycat
首先要安裝,mysql5.7和mycat,并且兩臺(tái)主機(jī)要先做好mysql的主從復(fù)制,
且兩臺(tái)主機(jī)的mysql都要存在db1數(shù)據(jù)庫,用來存放mycat的數(shù)據(jù).
關(guān)于mysql的主從復(fù)制,這里就不貼出了,可以移步以下鏈接:
基于GTID的主從復(fù)制數(shù)據(jù)庫
mysql的經(jīng)典主從復(fù)制
配置mycat
vim wrapper.conf????
5 wrapper.java.command=/usr/bin/java ? ? ? ? ? ? ? ? ? ? ?#java命令所在目錄31 wrapper.java.additional.5=-XX:MaxDirectMemorySize=2G ? 根據(jù)實(shí)際內(nèi)存設(shè)置
33 wrapper.java.additional.7=-Dcom.sun.management.jmxremote.port=2984
vim server.xml
80 ? ? ? ? <user name="mycat"> #登陸mycat的用戶名和密碼81 ? ? ? ? ? ? ? ? <property name="password">Mycat+007</property>
82 ? ? ? ? ? ? ? ? <property name="schemas">JamesMycatSchema</property>
82 ? ? #mycat中的數(shù)據(jù)庫名
vim schema.xml
定義mycat中可以創(chuàng)建的表,以及哪些節(jié)點(diǎn)可以使用哪些表
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 -->
連接數(shù)據(jù)庫的用戶密碼,稍后還要在數(shù)據(jù)庫授權(quán)
?vim schema.xml
因?yàn)槲覀冏龅氖歉呖捎?所以33和44都具有寫的功能
47 ? ? ? ? ? ? ? ? <writeHost host="hostM1" url="server33.lalala.com:3306" user="mycat"48 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?password="Mycat+007">
49 ? ? ? ? ? ? ? ? ? ? ? ? <!-- can have multi read hosts -->
50 ? ? ? ? ? ? ? ? </writeHost>
51 ? ? ? ? ? ? ? ? <writeHost host="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>grant all privileges on *.* to mycat@'%';
配置成功,啟動(dòng)~???
?mycat start ? ,查看日志????wrapper.log
檢驗(yàn)
mycat的登陸:?
mysql -umycat -pMycat+007 -P8066 -h127.0.0.1
查看server44,和server33的mycat數(shù)據(jù)是否同步~
建表:
create?table?employee?(id?int?not?null?primary?key,name?varchar(100),sharding_id?int?not?null);插入數(shù)據(jù):
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);在兩臺(tái)mycat上,都能看到相同的數(shù)據(jù),即為成功
并且在server33和server44上的db1數(shù)據(jù)庫中,也能看見剛剛創(chuàng)建的數(shù)據(jù)
heartbeat+drbd+mycat實(shí)現(xiàn)高可用分布式存儲(chǔ)
存儲(chǔ):drbd
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???資源初始化時(shí)間,如果設(shè)置過大,接管時(shí)間可能很長,不用擔(dān)心,只需要耐心等待~vim haresources
server33.lalala.com IPaddr::172.25.88.100/24/eth0 drbddisk::lalalala Filesystem::/dev/drbd8::/home/mycat/app/mycat/lib::ext4 mycatd其他配置照舊~
需要指出的是,因?yàn)閙ycat不屬于LSB,所以要自己編寫腳本啟動(dòng)文件,我寫的太粗糙了,不要學(xué)我.....
vim /etc/init.d/mycatd 注意啟動(dòng)腳本的位置
3 path=/home/mycat/app/mycat/bin/mycat ? ?#路徑為執(zhí)行mycat的環(huán)境,可以用which查看4 function usage(){
5 ?echo "$0 {start|stop|restart}"
6 ?exit 1
7 }
8 [ $# -ne 1 ] && usage ? #如果沒有輸入?yún)?shù),就顯示本腳本用法
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
啟動(dòng)server33的heartbeat!
可以看到IP,存儲(chǔ),服務(wù)全都啟動(dòng)拉!
查看掛載點(diǎn)和IP
高可用的接管,take over
轉(zhuǎn)載于:https://blog.51cto.com/12059878/1912215
總結(jié)
以上是生活随笔為你收集整理的基于mysql的主从复制之Mycat简单配置和高可用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 上古卷轴5炼金配方最值钱的有哪些(上古小
- 下一篇: 首次引入国内平台,解谜游戏《迷室 VR》