安裝Centos7 、 Mysql8 叢集,實現讀寫分離 高可用(五)-- MyCat配置詳解

darkdragonking發表於2018-06-26


零、說在前面

    書接前文,首先祭出前文中出現的幾個配置檔案,然後分別說明

    其實大部分的配置標籤及其屬性,在官方的Mycat的說明文件中都有說明,我只選一些我覺得比較重要的說一下

一、開始配置

    1、server.xml

<?xml version="1.0" encoding="UTF-8"?>
<!-- - - Licensed under the Apache License, Version 2.0 (the "License"); 
        - you may not use this file except in compliance with the License. - You 
        may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 
        - - Unless required by applicable law or agreed to in writing, software - 
        distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT 
        WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the 
        License for the specific language governing permissions and - limitations 
        under the License. -->
<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://io.mycat/">
        <system>
            <!-- 字符集 -->
            <property name="charset">utf8</property>

            <!-- 處理執行緒數量,預設與cpu數量一致,具體情況根據伺服器部署的其他服務的數量決定 -->
            <property name="processors">1</property>

            <!-- 1為開啟實時統計、0為關閉 -->
            <property name="useSqlStat">0</property>

            <!-- 1為開啟全加班一致性檢測、0為關閉 -->
            <property name="useGlobleTableCheck">0</property>

            <property name="sequnceHandlerType">2</property>
            <property name="processorBufferPoolType">0</property>
            <property name="handleDistributedTransactions">0</property>
            <property name="useOffHeapForMerge">1</property>
            <property name="memoryPageSize">1m</property>
            <property name="spillsFileBufferSize">1k</property>
            <property name="useStreamOutput">0</property>
            <property name="systemReserveMemorySize">384m</property>
            <property name="useZKSwitch">true</property>
        </system>
        <user name="root">
            <!-- 這裡的賬號和密碼與你的資料庫一致即可 -->
            <property name="password">987654</property>

            <!-- 這裡的TESTDB的名字可以隨便寫,只需與schema.xml中的一致即可 -->
            <property name="schemas">TESTDB</property>
        </user>
</mycat:server>



    2、schema.xml

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
        
    <!-- 這裡的name屬性的值TESTDB與上面server.xml中的一致即可,
        sqlMaxLimit屬性代表每次只查詢前n條符合條件的記錄,避免全表掃描 -->
    <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100">
        <!-- 下面名叫“t_a1”的表是在我的庫中真實存在的一個表,
            同時,下面的dataNode屬性的值對應的是下面dataNode標籤的name屬性的值 -->
        <table name="t_a1" primaryKey="ID" type="global" dataNode="dn1" />
    </schema>
    
    <!-- dataNode標籤的主要作用是指明對哪一個資料庫進行操作和管理,
        其中的dataHost屬性對應的下面dataHost標籤的name屬性的值 -->
    <dataNode name="dn1" dataHost="localhost1" database="xxtest" />    
    
    <!-- 下面的localhost1的名字是隨便取的,balance、writeType和switchType的含義在下面解釋 -->
    <dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"
        writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
        
        <!-- 檢測心跳的方法,可以用下面的語句,也可以用其他的 -->
        <heartbeat>select user()</heartbeat>

        <!-- 下面是讀和寫的mysql的ip和埠,以及登入的賬號和密碼。
            開始我被忽悠,把讀與寫的host屬性的值寫成一樣的,注意,那是不可以的 -->
        <writeHost host="hostM1" url="192.168.122.21:3306" user="root" password="987654">
            <readHost host="hostS2" url="192.168.122.22:3306" user="root" password="987654" />
        </writeHost>
    </dataHost>
</mycat:schema>


先說一下<table>中各屬性的含義,如下

primaryKey     主鍵欄位名,據說自動生成主鍵時需要設定
autoIncrement  是否自增。若想在Mycat中使用這個引數,前提是需要在MySQL的表中定義了自增長的主鍵,
                    然後才可以使用last_insert_id獲取主鍵返回值。此引數與表中的對應設定缺一不可。
rule           分片規則,見我dark下面的說明
type           邏輯表的型別,目前邏輯表只有全域性表和普通表,前者取值為“global”,後者為空
                    同時,全域性表查詢任意節點,普通表查詢所有節點,(我沒懂具體區別在哪裡)
needAddLimit   在分庫分表的情況下,資料量會異常龐大,所以此引數是用來確定是否限制返回的資料條數

接著是字表<childTable>中的屬性

當前標籤是用於ER分片的字表使用,通過joinKey和parentKey與父表關聯

joinKey 子表的某個欄位,與父表關聯
parentKey 父表的某個欄位,與字表關聯

再說一下上面<dataHost>中各屬性的含義,如下

balance指的負載均衡型別,目前的取值有4種:

    "0", 不開啟讀寫分離機制,所有讀操作都傳送到當前可用的writeHost上。

    "1",全部的readHost與stand by writeHost參與select語句的負載均衡,
        簡單的說,當雙主雙從模式(M1->S1,M2->S2,並且M1與 M2互為主備),
        正常情況下,M2,S1,S2都參與select語句的負載均衡。

    "2",所有讀操作都隨機的在writeHost、readhost上分發。

    "3",所有讀請求隨機的分發到wiriterHost對應的readhost執行,writerHost不負擔讀壓力

writeType值得是寫入的模式
    "0" 表示所有寫操作傳送到第一個writeHost上,若第一個掛了切換到存活的第二個writeHost上
        重啟後仍以切換後的在用那個為準,切換記錄在配置檔案"dnindex.properties"中
    "1"表示所有寫操作隨機的傳送到所有的writeHost上,1.5版本後1這個取值廢棄不用

switchType指的是切換的模式,目前的取值也有4種:

    "-1" 表示不自動切換

    "1" 預設值,表示自動切換

    "2" 基於MySQL主從同步的狀態決定是否切換,心跳語句為 show slave status

    "3"基於MySQL galary cluster的切換機制(適合叢集)(1.4.1),
        心跳語句為 show status like 'wsrep%'。

相關文章