實驗用的是center7 jdk1.8(center7自帶默認jdk,沒jdk的須要安裝)
192.168.0.19(mycat)
192.168.0.14(master主)
192.168.0.13(slave從)
1.先去官網下載mycat
http://www.mycat.io/
2.把下載的mycat文件解壓到 /usr/local/
3.配置環境
把mysql的主從配置好,這裏就不說明了,配置好建立一個名爲k1的庫,建好了去從庫上驗證一下。前端
1.vim /usr/local/mycat/conf/server.xml ##配置mycat的帳號及權限
<user name="root" defaultAccount="true">
<property name="password">123456</property>
<property name="schemas">k1</property>
</user>
#表示建立個root帳號,密碼123456,受權k1(mycat的邏輯庫)的徹底權限
2.vim /usr/local/mycat/conf/schema.xml ##配置mycat的邏輯庫mysql
<?xml version="1.0"?> <!DOCTYPE mycat:schema SYSTEM "schema.dtd"> <mycat:schema xmlns:mycat="http://io.mycat/"> <schema name="k1" checkSQLschema="false" sqlMaxLimit="100" dataNode="fenpian1"> </schema> <!--name邏輯庫 dataNode分片組(能夠有多個,用於對庫作垂直切分),這裏沒有作切片,因此直接把k1的全部表直接全 分到fenpian1這個分片組--> <dataNode name="fenpian1" dataHost="shitizu" database="k1" /> <!--定義分片組fenpian1 是由那個真實服務器組那個真實庫提供的--> <dataHost name="shitizu" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"> <!--定義真實服務器組及策略--> <heartbeat>show slave status</heartbeat> <writeHost host="192.168.0.14" url="192.168.0.14:3306" user="root" password="123456"> <!--真實組的寫入庫--> <readHost host="192.168.0.13" url="192.168.0.13:3306" user="root" password="123456"> <!--真實組的讀庫--> </readHost> </writeHost> </dataHost> </mycat:schema>
3.啓動mycat 並測試
/usr/local/mycat/bin/mycat startsql
1.在增長一個數據庫192.168.0.16,
在數據庫裏建立k1庫,b2表,配置修改以下數據庫
<?xml version="1.0"?> <!DOCTYPE mycat:schema SYSTEM "schema.dtd"> <mycat:schema xmlns:mycat="http://io.mycat/"> <schema name="k1" checkSQLschema="false" sqlMaxLimit="100" > <table name="b1" primaryKey="id" dataNode="fenpian1" /> <!--已知邏輯k1庫裏有b1,b2兩張表,基於表作切分,b1分給fenpian1,b2給fenpan2--> <table name="b2" primaryKey="id" dataNode="fenpian2" /> <dataNode name="fenpian1" dataHost="shitizu" database="k1" /> <!--定義分片組fenpian1 是由那個真實服務器組那個真實庫提供的--> <dataNode name="fenpian2" dataHost="shitizu2" database="k1" /> <!--定義分片組fenpian2 是由真實服務器組shitizu2,的k1實體庫提供--> <!--定義真實服務器組及策略--> <heartbeat>select user()</heartbeat> <writeHost host="192.168.0.14" url="192.168.0.14:3306" user="root" password="123456"> <?xml version="1.0"?> <!DOCTYPE mycat:schema SYSTEM "schema.dtd"> <mycat:schema xmlns:mycat="http://io.mycat/"> <schema name="k1" checkSQLschema="false" sqlMaxLimit="100" > <table name="b1" primaryKey="id" dataNode="fenpian1" /> <!--已知邏輯k1庫裏有b1,b2兩張表,基於表作切分,b1分給fenpian1,b2給fenpan2--> <table name="b2" primaryKey="id" dataNode="fenpian2" /> </schema> <dataNode name="fenpian1" dataHost="shitizu" database="k1" /> <!--定義分片組fenpian1 是由那個真實服務器組那個真實庫提供的--> <dataNode name="fenpian2" dataHost="shitizu2" database="k1" /> <!--定義分片組fenpian2 是由真實服務器組shitizu2,的k1實體庫提供--> <!--定義真實服務器組及策略--> <heartbeat>select user()</heartbeat> <writeHost host="192.168.0.14" url="192.168.0.14:3306" user="root" password="123456"> <!--真實組的寫入庫--> <readHost host="192.168.0.13" url="192.168.0.13:3306" user="root" password="123456"> <!--真實組的讀庫--> </readHost> </writeHost> </dataHost> <dataHost name="shitizu2" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"> <!--定義真實服務器組及策略--> <heartbeat>select user()</heartbeat> <writeHost host="192.168.0.16" url="192.168.0.16:3306" user="root" password="123456"> <!--真實組的寫入庫--> <readHost host="192.168.0.16" url="192.168.0.16:3306" user="root" password="123456"> <!--真實組的讀庫--> </readHost> </writeHost> </dataHost> </mycat:schema>
結構圖
用戶請求過來到達mycat,mycat根據以上配置判斷,若是是fenpian1分片組就轉發給真實服務器組shitizu1處理,讀交於slave處理,寫交於master處理。若是是fenpian2分片組,就轉發給真實服務器組shitizu2來處理,讀寫都交於192.168.0.16處理。
這樣前端查詢k1這個邏輯庫得時候,能獲取的b1,b2兩個表的完整數據,但其實每一個真實數據庫組,只存儲了只一張表,完整的數據是由mycat讀取後端的兩個真實服務器組組織起來的。vim