安裝Centos7 、 Mysql8 叢集,實現讀寫分離 高可用(四)-- MyCat讀寫分離
零、說在前面
先吐個槽,這點東西折騰了我四五天,最後還是一條告警拯救了我,下面進入正文
看了幾個MySQL的讀寫分離的中介軟體,貌似這個是比較流行的一個,雖然我不是BAT的粉絲,但是有好用的也可以拿過來用用
這東西的介紹我就不多說了,感興趣的諸位可以去它的官網看看,而且它上面有簡易文件提供下載,大家請自行閱讀吧
同時,本篇僅說方法和過程,問題集中在另一篇中彙總
一、規劃
1:在原有的21伺服器上,部署Mycat
主機名 | IP | CPU | 記憶體 | 用途 | 備註 |
centos7One | 192.168.122.21 | 2 | 4 | 主/寫 | Mysql/Redis/Mycat |
centos7Two | 192.168.122.22 | 1 | 2 | 從/讀 | Mysql/Redis |
centos7Three | 192.168.122.23 | 1 | 2 | 從/讀 | Mysql/Redis(暫空) |
令21作為寫伺服器,22作為讀伺服器存在。23暫時不用
二、下載安裝
1:安裝JKD既然作業系統都是Centos7了,那麼jdk起碼也得1.8才像話吧。二話不說下載安裝
具體過程不細說了,下載後,解壓,然後修改/etc/profile檔案,新增以下內容
#設定java的環境變數
JAVA_HOME=/usr/local/jdk1.8
JRE_HOME=$JAVA_HOME/jre
CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
export JAVA_HOME JRE_HOME CLASS_PATH PATH
然後source /etc/profile就可以讓環境變數生效
再執行java -version,如果可以成功看到java的版本資訊,那麼你的java環境就配置成功了。否則。。重啟試試吧。。
但是我的1.8jdk有問題了,沒有解決,所以改成1.7版本的jdk
2:安裝Mycat
同理,這個我也是下載的gz格式的壓縮包,將壓縮包放到/usr/local路徑下,解壓縮
得到一個名為“mycat”的資料夾,如下圖所示
然後修改/etc/profile檔案,在最後面加上這樣如下內容
#設定mycat的目錄
export MYCAT_HOME=/usr/local/mycat
然後source /etc/profile使配置生效。 到這裡,進入/usr/local/mycat/bin下面,就可以執行 ./mycat start啟動mycat了。三、修改配置
僅僅上面的程度不算完,還需要修改兩個重要的配置檔案 server.xml和schema.xml
前者之中,只需要新增使用者即可,其他配置我暫時沒做任何修改
後者需要根據你的需要(比如是分片還是讀寫分離)來配置
其他暫時無用的內容可以不用管,下面是我的樣例
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="useSqlStat">0</property>
<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>
<property name="schemas">TESTDB</property> <!-- 這裡的TESTDB的名字可以隨意寫,只需與schema.xml中的一致即可 -->
</user>
</mycat:server>
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=1表示讀寫分離、
writeType=0表示寫操作集中到第一個寫資料庫
switchType=1代表自動切換 -->
<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和埠,以及登入的賬號和密碼。 -->
<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>
一般來說,配置寫成上面的樣子,應該就可以啟動起來mycat了。
為了方便對比,我把我的資料庫的情況也放上來,大家對比一下就更容易明白了
四、啟動
配置無誤,啟動一下看看,如果看到類似下面的截圖,說明你成功了
初始化十個執行緒,success了10個,成功!
五、最後
還有一些配置上的說明和我遇到的問題,會在後面單獨拿出來講