.netcore微服務-Mycat

 

1、前言

1.1  分佈式數據庫

隨着IT行業的迅猛發展,行業應用系統的數據規模呈現爆炸式增加,對數據庫的數據處理能力要求愈來愈高,分佈式數據庫正是所以應運而生。java

分佈式數據庫特色包括:mysql

透明性:用戶沒必要關心後臺數據庫的具體實現web

擴展性:可以根據系統壓力狀況進行擴展sql

可靠性:若是其中一臺服務器宕機,備用服務器可以自動切換繼續提供服務數據庫

高性能:windows

1.2  Mycat介紹

Mycat(http://www.mycat.io/)是一個支持mysql、sql server等數據庫集羣化部署的中間件。它由Amoeba和cobar發展而來。服務器

 

2、負載均衡

3、測試環境

服務器負載均衡

Mycattcp

Mysql-master分佈式

Mysql-slave

Mysql-master-standby

Mysql-master-standby

IP

127.0.0.1

10.3.30.161

10.3.30.238

120.77.80.215

10.3.6.84

Port

8066/9066

3306

3306

3306

3306

Account

root 123456

test

123456

test

123456

test

123456

test

123456

4、測試腳本

CREATE TABLE `employee` ( 

  `ID` int(11) NOT NULL, 

  `NAME` varchar(100) default NULL, 

  `SHARDING_ID` int(11) NOT NULL, 

  PRIMARY KEY  (`ID`) 

)

 

INSERT INTO employee(ID,NAME,SHARDING_ID) VALUES ('6', 'amos', '10000');

5、軟件安裝

首先安裝mycat-server、mycat-eye、zookeeper和navicat for mysql

6、服務啓動

6.1  啓動mycat

6.1.1安裝java環境

一、  安裝jdk

二、  配置環境變量

JAVA_HOME=C:\Program Files\Java\jdk1.8.0_131

CLASSPATH=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;

Path =%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;

6.1.2啓動mycat服務

在windows8操做系統上啓動mycat服務,命令以下

cmd 

cd /d D:\EC-OFC\Java\Mycat\Mycat-server-1.6\mycat\bin

startup_nowrap.bat

6.1.3鏈接mycat

6.1.3.1navicat鏈接

使用navicat鏈接mycat,默認端口爲8066,密碼123456

6.1.3.2DOS連接

cmd

cd /d C:\Program Files\MySQL\MySQL Server 5.7\bin

mysql -uroot -p123456 -P8066

注意:若是須要使用如show @@datasource命令時,須要鏈接9066端口而不是8066

6.2  啓動zookeeper

D:\EC-OFC\開發工具\zookeeper-3.4.10\bin\zkServer.bat

6.3  啓動mycat-eye

D:\EC-OFC\Java\Mycat\mycat-web\start.bat

7、寫集羣

7.1  拓撲圖

7.2  配置文件

<?xml version="1.0"?>
<!DOCTYPEmycat:schemaSYSTEM"schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">

    <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100">
        <table name="employee" primaryKey="ID" dataNode="dn1,dn2"/>
    </schema>
    <dataNode name="dn1" dataHost="host1" database="db1"/>
    <dataNode name="dn2" dataHost="host2" database="db1"/>
    <dataHost name="host1" maxCon="1000" minCon="10" balance="1"
             
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
        <heartbeat>select user()</heartbeat>
        <writeHost host="hostM1" url="120.77.80.215:3306" user="test" password="123456">
        </writeHost>
    </dataHost>
    <dataHost name="host2" maxCon="1000" minCon="10" balance="1"
             
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
        <heartbeat>select user()</heartbeat>
        <writeHost host="hostM2" url="10.3.30.238:3306" user="test" password="123456">
        </writeHost>
    </dataHost>
</mycat:schema>

 

8、主從配置

8.1  業務要求

Master掛掉時,Slave還能提供讀服務。

8.2  配置步驟

注意每臺mysql服務器的server-id必須惟一

第一步:

在10.3.30.161中建立一個10.3.30.238主機中能夠登陸的MySQL用戶

用戶:mysql238

密碼:123456

mysql>GRANT REPLICATION SLAVE ON *.* TO ‘mysql238’@’10.3.30.238’ IDENTIFIED BY ‘123456’;

mysql>FLUSH PRIVILEGES;

第二步:

須要先在C:\ProgramData\MySQL\MySQL Server 5.7\my.ini文件中添加log-bin=mysql-bin

查看10.3.30.161MySQL服務器二進制文件名與位置

mysql>SHOW MASTER STATUS;

第三步:

 告知二進制文件名與位置

  在10.3.30.238中執行:

 mysql>CHANGE MASTER TO

MASTER_HOST='10.3.30.161',

MASTER_USER='mysql238',

MASTER_PASSWORD='123456',

MASTER_LOG_FILE='mybin.000001',

MASTER_LOG_POS=154;

 

完成主從複製配置

8.3  驗證配置

在10.3.30.238中

mysql> START SLAVE;   #開啓複製

mysql>SHOW SLAVE STATUS\G   #查看主從複製是否配置成功

當看到Slave_IO_Running: YES、Slave_SQL_Running: YES才代表狀態正常

8.4  配置文件

switchType='-1'意味着當主掛掉的時候,不進行自動切換,即hostS1並不會被提高爲主,仍只提供讀的功能。這就避免了將數據寫進slave的可能性,單純的MySQL主從集羣並不容許將數據寫進slave中,除非配置的是雙master。

<mycat:schema xmlns:mycat="http://io.mycat/">
    <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100">
        <table name="employee" primaryKey="ID" dataNode="dn1"/>
    </schema>
    <dataNode name="dn1" dataHost="host1" database="db1"/>
    <dataHost name="host1" maxCon="1000" minCon="10" balance="1"
             
writeType="0" dbType="mysql" dbDriver="native" switchType="-1" slaveThreshold="100">
        <heartbeat>select user()</heartbeat>
        <writeHost host="hostM1" url="10.3.30.161:3306" user="test" password="123456">
            <readHost host="hostR1" url="120.77.80.215:3306" user="test" password="123456"/>
        </writeHost>
        <writeHost host="hostS1" url="10.3.30.238:3306" user="test" password="123456">
        </writeHost>
    </dataHost>
</mycat:schema>

 

9、Haproxy配置

9.1  拓撲圖

9.2  配置文件

此處爲haproxy配置文件

#

global
  maxconn 1500
  nbproc  1
  daemon

defaults
        mode tcp
        retries 3
        option  abortonclose
        maxconn 32000
        timeout connect 300000ms
        timeout client  300000ms
        timeout server  300000ms
        log 127.0.0.1   local0 err

listen admin_stats
        bind :48800
        stats uri /admin-status
        stats auth admin:admin
        mode http
        option httplog
listen mycat_servers
        bind :3307 ## 綁定端口
        mode tcp
        option tcplog
        #balance source
        server server238 10.3.30.238:8066 check port 8066 weight 1 check
        server server84 10.3.6.84:8066 check port 8066 weight 1 check
mysql客戶端或者應用程序能夠經過如上配置的127.0.0.1:3307端口連接haproxy實現連接mycat集羣的目的。

10、注意事項

   一、主主複製配置文件中auto_increment_increment和auto_increment_offset只能保證主鍵不重複,卻不能保證主鍵有序。

   二、當配置完成Slave_IO_Running、Slave_SQL_Running不全爲YES時,show slave status\G信息中有錯誤提示,可根據錯誤提示進行更正。

   三、Slave_IO_Running、Slave_SQL_Running不全爲YES時,大多數問題都是數據不統一致使。

   常見出錯點:

   一、兩臺數據庫都存在db數據庫,而第一臺MySQL db中有tab1,第二臺MySQL db中沒有tab1,那確定不能成功。

   二、已經獲取了數據的二進制日誌名和位置,又進行了數據操做,致使POS發生變動。在配置CHANGE MASTER時仍是用到以前的POS。

   三、stop slave後,數據變動,再start slave。出錯。

     終極更正法:從新執行一遍CHANGE MASTER就行了。

相關文章
相關標籤/搜索