基于mysql的主从复制之Mycat简单配置和高可用
what-mycat
1.Mycat就是MySQL Server,而Mycat后面連接的MySQL Server,就好象是MySQL的存儲引擎,如InnoDB,MyISAM等.
因此,Mycat本身并不存儲數據,數據是在后端的MySQL上存儲的,因此數據可靠性以及事務等都是MySQL保證的.
2.Mycat是數據庫中間件,就是介于數據庫與應用之間,進行數據處理與交互的中間服務。從原有的一個庫,被切分為多個分片數據庫,所有的分片數據庫集群構成了整個完整的數據庫存儲.
所以有了數據庫中間件,應用只需要集中與業務處理,大量的通用的數據聚合,事務,數據源切換都由中間件來處理,中間件的性能與處理能力將直接決定應用的讀寫性能,所以一款好的數據庫中間件至關重要。
術語
分片規則(rule)
邏輯庫(schema)
分片節點(dataNode)
節點主機(dataHost)
how-mycat
首先要安裝,mysql5.7和mycat,并且兩臺主機要先做好mysql的主從復制,
且兩臺主機的mysql都要存在db1數據庫,用來存放mycat的數據.
關于mysql的主從復制,這里就不貼出了,可以移步以下鏈接:
基于GTID的主從復制數據庫
mysql的經典主從復制
配置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=2984
vim server.xml
80 ? ? ? ? <user name="mycat"> #登陸mycat的用戶名和密碼81 ? ? ? ? ? ? ? ? <property name="password">Mycat+007</property>
82 ? ? ? ? ? ? ? ? <property name="schemas">JamesMycatSchema</property>
82 ? ? #mycat中的數據庫名
vim schema.xml
定義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 -->
連接數據庫的用戶密碼,稍后還要在數據庫授權
?vim schema.xml
因為我們做的是高可用,所以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@'%';
配置成功,啟動~???
?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
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
轉載于:https://blog.51cto.com/12059878/1912215
總結
以上是生活随笔為你收集整理的基于mysql的主从复制之Mycat简单配置和高可用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 上古卷轴5炼金配方最值钱的有哪些(上古小
- 下一篇: linux cmake编译源码,linu