.netcore微服務-Mycat

AntSpace發表於2019-07-21

 

一、前言

1.1  分散式資料庫

隨著IT行業的迅猛發展,行業應用系統的資料規模呈現爆炸式增長,對資料庫的資料處理能力要求越來越高,分散式資料庫正是因此應運而生。

分散式資料庫特點包括:

透明性:使用者不必關心後臺資料庫的具體實現

擴充套件性:能夠根據系統壓力情況進行擴充套件

可靠性:如果其中一臺伺服器當機,備用伺服器能夠自動切換繼續提供服務

高效能:

1.2  Mycat介紹

Mycat(http://www.mycat.io/)是一個支援mysql、sql server等資料庫叢集化部署的中介軟體。它由Amoeba和cobar發展而來。

 

二、負載均衡

三、測試環境

伺服器

Mycat

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

四、測試指令碼

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');

五、軟體安裝

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

六、服務啟動

6.1  啟動mycat

6.1.1安裝java環境

1、  安裝jdk

2、  配置環境變數

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.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.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>

 

九、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叢集的目的。

十、注意事項

   1、主主複製配置檔案中auto_increment_increment和auto_increment_offset只能保證主鍵不重複,卻不能保證主鍵有序。

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

   3、Slave_IO_Running、Slave_SQL_Running不全為YES時,大多數問題都是資料不統一導致。

   常見出錯點:

   1、兩臺資料庫都存在db資料庫,而第一臺MySQL db中有tab1,第二臺MySQL db中沒有tab1,那肯定不能成功。

   2、已經獲取了資料的二進位制日誌名和位置,又進行了資料操作,導致POS發生變更。在配置CHANGE MASTER時還是用到之前的POS。

   3、stop slave後,資料變更,再start slave。出錯。

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

 

相關文章