mycat讀寫分離部署步驟

1.下載mycat:

https://raw.githubusercontent.com/MyCATApache/Mycat-download/master/1.5-RELEASE/Mycat-server-1.5-RELEASE-20160301083012-linux.tar.gz

2.安裝mycat:

tar -zxvf Mycat-server-1.5-GA-20160225120029-linux.tar.gz

mv mycat  /srv/mycat-1.5

ln -s  mycat-1.5 mycat

3.配置java環境變量:

which java

在bin/startup_nowrap.sh文件中找到noJavaHome=false行下並增加如下內容:

JAVA_HOME=Java_home的實際路徑

4.配置conf/schema.xml文件:

該文件主要配置讀寫分離數據庫的連接地址信息,具體如下:

root@ebj-rd-02:/srv/mycat/conf# cat schema.xml

<?xml version="1.0"?>

<!DOCTYPE mycat:schema SYSTEM "schema.dtd">

<mycat:schema xmlns:mycat="http://org.opencloudb/">

    <schema name="mydb" checkSQLschema="false" sqlMaxLimit="100"  dataNode="dn1"/>

    <dataNode name="dn1" dataHost="localhost1" database="test" />

    <dataHost name="localhost1" maxCon="1000" minCon="50" balance="1"

        writeType="0" dbType="mysql" dbDriver="native" switchType="-1"  >

        <heartbeat>select user()</heartbeat>

        <writeHost host="host_3320" url="127.0.0.1:3320" user="root"   password="password">

            <readHost host="host_3321" url="127.0.0.1:3321" user="root"    password="password"/>

            <readHost host="host_3322" url="127.0.0.1:3322" user="root"    password="password"/>

        </writeHost>

    </dataHost>

</mycat:schema>

文件終於參數說明:

這裏mydb 就是我們對外聲稱的我們有數據庫的名稱  必須和server.xml中的用戶指定的數據庫名稱一致

添加一個dataNode="dn1" 是指定了我們這個庫只在dn1.沒有進行分庫

sqlMaxLimit表示sql語句最大返回的結果集的大小;

writeHost和readHost配置的是實際的讀數據庫和寫數據庫的IP地址端口,用戶名及密碼;

balance 屬性負載均衡類型,目前的取值有 4 種:

1. balance="0", 不開啓讀寫分離機制,所有讀操作都發送到當前可用的 writeHost 上。

2. balance="1",全部的 readHost 與 stand by writeHost 參與 select 語句的負載均衡,

簡單的說,當雙主雙從模式(M1 ->S1 , M2->S2,並且 M1 與 M2 互爲主備),正常情況下, M2,S1,S2 都參與 select 語句的負載均衡。

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

4. balance="3", 所有讀請求隨機的分發到 wiriterHost 對應的 readhost 執行,writerHost 不負擔讀壓力,注意 balance=3 只在 1.4 及其以後版本有, 1.3 沒有。


writeType 屬性,目前的取值有 種:

1. writeType="0", 所有寫操作發送到配置的第一個 writeHost,第一個掛了切到還生存的第二個

writeHost,重新啓動後已切換後的爲準,切換記錄在配置文件中:dnindex.properties .

2. writeType="1",所有寫操作都隨機的發送到配置的 writeHost

3. writeType="2",沒實現。


switchType 屬性

- -1 表示不自動切換

- 1 默認值,自動切換

- 2 基於MySQL 主從同步的狀態決定是否切換

5配置 server.xml 

該文件主要配置的是mycat的用戶名和密碼及mycat的端口號信息配置,mycat的用戶名和密碼和mysql的用戶名密碼是分開的,應用連接mycat就用這個用戶名和密碼。

root@ebj-rd-02:/srv/mycat/conf# cat 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://org.opencloudb/">

    <system>

        <property name="defaultSqlParser">druidparser</property>

        <property name="serverPort">18066</property> 

        <property name="managerPort">19066</property>

        <property name="charset">utf8</property>

        <property name="idleTimeout">30000000</property>

      <!--  <property name="useCompression">1</property>--> <!--1爲開啓mysql壓縮協議-->

    <!-- <property name="processorBufferChunk">40960</property> -->

    <!-- 

    <property name="processors">1</property> 

    <property name="processorExecutor">32</property> 

     -->

        <!--默認是65535 64K 用於sql解析時最大文本長度 -->

        <!--<property name="maxStringLiteralLength">65535</property>-->

        <!--<property name="sequnceHandlerType">0</property>-->

        <!--<property name="backSocketNoDelay">1</property>-->

        <!--<property name="frontSocketNoDelay">1</property>-->

        <!--<property name="processorExecutor">16</property>-->

        <!-- 

            <property name="mutiNodeLimitType">1</property> 0:開啓小數量級(默認) ;1:開啓億級數據排序

            <property name="mutiNodePatchSize">100</property> 億級數量排序批量

            <property name="processors">32</property> <property name="processorExecutor">32</property> 

            <property name="serverPort">8066</property> <property name="managerPort">9066</property> 

            <property name="idleTimeout">300000</property> <property name="bindIp">0.0.0.0</property> 

            <property name="frontWriteQueueSize">4096</property> <property name="processors">32</property> -->

    </system>

    <user name="test">

        <property name="password">test_123</property>

        <property name="schemas">mydb</property>

    </user>

    <user name="user">

        <property name="password">user_123</property>

        <property name="schemas">mydb</property>

        <property name="readOnly">true</property>

    </user>

    <!-- 

    <quarantine> 

       <whitehost>

          <host host="127.0.0.1" user="mycat"/>

          <host host="127.0.0.2" user="mycat"/>

       </whitehost>

       <blacklist check="false"></blacklist>

    </quarantine>

    -->

</mycat:server>

文件終於參數說明:

serverPort設置mycat的服務端口,默認爲8066;

managerPort設置mycat的管理端口,默認爲9066;

idleTimeout設置mycat的空閒超時時間;

user設置mycat的訪問相關schema的用戶名及密碼;

6.配置日誌文件的路徑及日誌級別:

root@ebj-rd-02:/srv/mycat/conf# cat log4j.xml 

<?xml version="1.0" encoding="UTF-8"?>

<!--

 - Copyright 1999-2012 Alibaba Group.

 -  

 - 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 log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">

<appender name="ConsoleAppender" class="org.apache.log4j.ConsoleAppender">

  <layout class="org.apache.log4j.PatternLayout">

   <param name="ConversionPattern" value="%d{MM-dd HH:mm:ss.SSS}  %5p [%t] (%F:%L) -%m%n" />

  </layout>

 </appender>

  <appender name="FILE" class="org.apache.log4j.RollingFileAppender">

      <param name="file" value="/data/log/mycat/mycat.log" />

    <param name="Append" value="false"/>

    <param name="MaxFileSize" value="1000KB"/>

    <param name="MaxBackupIndex" value="10"/> 

    <param name="encoding" value="UTF-8" />

    <layout class="org.apache.log4j.PatternLayout">

      <param name="ConversionPattern" value="%d{MM/dd HH:mm:ss.SSS}  %5p [%t] (%F:%L) -%m%n" />

    </layout>

  </appender>

  <root>

    <level value="info" />

    <appender-ref ref="FILE" />

     <!--<appender-ref ref="FILE" />-->

  </root>

</log4j:configuration>

文件終於參數說明:

<level value="debug" />表示設置mycat的日誌級別爲調試模式,默認爲info;

<param name="file" value="/data/log/mycat/mycat.log" />表示設置mycat的日誌文件路徑爲/data/log/mycat/mycat.log

7.mycat日常管理

root@ebj-rd-02:/srv/mycat# ./bin/mycat --help

Usage: ./bin/mycat { console | start | stop | restart | status | dump }

登錄mycat讀寫分離服務:

mysql -utest -ptest_123 -P18066 -h127.0.0.1

登錄mycat管理端:

mysql -utest -ptest_123 -P19066 -h127.0.0.1

在事務中,通過/*balance*/強制讀取主數據庫數據:

MySQL [mydb]> begin;

MySQL [mydb]> /*balance*/select * from mytest1;

MySQL [mydb]> commit;

查看mycat管理端的命令幫助:

MySQL [(none)]> show @@help;

8.部署中的異常處理:

MySQL [(none)]> use test;

Database changed

MySQL [test]> show tables;

ERROR 1184 (HY000): Unknown charsetIndex:192

MySQL [test]> select * from mytest;

ERROR 1184 (HY000): Unknown charsetIndex:192

MySQL [test]> exit

該異常是字符集問題引起的數據庫不能連接成功

在conf/index_to_charset.properties文件中增加與自己mysql服務器匹配的字符集即可:

root@ebj-rd-02:/srv/mycat/conf# tail -1 index_to_charset.properties

192=utf8

root@ebj-rd-02:/srv/mycat/conf# 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章