Mycat 相關配置

MySQL讀寫分離的概述

Mysql作爲目前世界上使用最廣泛的免費數據庫,相信所有從事系統運維的工程師都一定接觸過。但在實際的生產環境中,由單臺Mysql作爲獨立的數據庫是完全不能滿足實際需求的,無論是在安全性,高可用性以及高併發等各個方面。因此,一般來說都是通過 主從複製(Master-Slave)的方式來同步數據,再通過讀寫分離(MySQL-Proxy/Amoeba)來提升數據庫的併發負載能力 這樣的方案來進行部署與實施的。

讀寫分離工作原理

基本的原理是讓主數據庫處理事務性增、改、刪操作(INSERT、UPDATE、DELETE),而從數據庫處理SELECT查詢操作。數據庫複製被用來把事務性操作導致的變更同步到集羣中的從數據庫。
在這裏插入圖片描述

數據內部交換過程

在這裏插入圖片描述

爲什麼要讀寫分離:

1.面對越來越大的訪問壓力,單臺的服務器的性能成爲瓶頸,需要分擔負載
2.主從只負責各自的寫和讀,極大程度的緩解X鎖和S鎖爭用
3.從庫可配置myisam引擎,提升查詢性能以及節約系統開銷
4.增加冗餘,提高可用性

實現讀寫分離的方式

一般有兩種方式實現。

應用程序層實現

在這裏插入圖片描述
優點:
A:應用程序內部實現讀寫分離,安裝既可以使用
B:減少一定部署難度
C:訪問壓力在一定級別以下,性能很好
缺點:
A:架構一旦調整,代碼要跟着變
B:難以實現高級應用,如自動分庫,分表
C:無法適用大型應用場景

中間件層實現

中間件層實現是指在外部中間件程序實現讀寫分離
常見的中間件程序:
在這裏插入圖片描述
MyCAT
社區愛好者在阿里cobar基礎上進行二次開發,解決了cobar當時存 在的一些問題,並且加入了許多新的功能在其中。目前MyCAT社區活 躍度很高,目前已經有一些公司在使用MyCAT。總體來說支持度比 較高,也會一直維護下去,

什麼是MYCAT

1.一個徹底開源的,面向企業應用開發的大數據庫集羣
2.支持事務、ACID、可以替代MySQL的加強版數據庫
3.一個可以視爲MySQL集羣的企業級數據庫,用來替代昂貴的Oracle集羣
4.一個融合內存緩存技術、NoSQL技術、HDFS大數據的新型SQL Server
5.結合傳統數據庫和新型分佈式數據倉庫的新一代企業級數據庫產品
6.一個新穎的數據庫中間件產品
在這裏插入圖片描述

服務安裝與配置

linux下可以下載Mycat-server-xxxxx.linux.tar.gz 解壓在某個目錄下,注意目錄不能有空格,在Linux(Unix)下,建議放在usr/local/Mycat目錄下,如下:
在這裏插入圖片描述

修改MyCAT用戶密碼的方式

在這裏插入圖片描述

目錄解釋

bin 程序目錄,存放了window版本和linux版本,除了提供封裝成服務的版本之外,也提供了nowrap的shell腳本命令,方便大家選擇和修改,進入到bin目錄:
Linux下運行:./mycat console,首先要chmod +x *
注:mycat支持的命令{ console | start | stop | restart | status | dump }
conf目錄下存放配置文件,server.xml是Mycat服務器參數調整和用戶授權的配置文件,schema.xml是邏輯庫定義和表以及分片定義的配置文件,rule.xml是分片規則的配置文件,分片規則的具體一些參數信息單獨存放爲文件,也在這個目錄下,配置文件修改,需要重啓Mycat或者通過9066端口reload.
lib目錄下主要存放mycat依賴的一些jar文件.
日誌存放在logs/mycat.log中,每天一個文件,日誌的配置是在conf/log4j.xml中,根據自己的需要,可以調整輸出級別爲debug,debug級別下,會輸出更多的信息,方便排查問題.
注意:Linux下部署安裝MySQL,默認不忽略表名大小寫,需要手動到/etc/my.cnf 下配置 lower_case_table_names=1 使Linux環境下MySQL忽略表名大小寫,否則使用MyCAT的時候會提示找不到表的錯誤!
Mycat 需要安裝JDK 1.7 或者以上版本

服務啓動與啓動設置

MyCAT在Linux中部署啓動時,首先需要在Linux系統的環境變量中配置MYCAT_HOME

vi /etc/profile 
MYCAT_HOME=/usr/local/mycat PATH=$MYCAT_HOME/bin:$PATH #在系統環境變量文件中增加
source /etc/profile #使環境變量生效

如果是在多臺Linux系統中組建的MyCAT集羣,那需要在MyCAT Server所在的服務器上配置對其他ip和主機名的映射,配置方式如下:

vi /etc/hosts 
10.10.10.67  test67.cn  #中間鍵mycat
10.10.10.68  test68.cn  #主
10.10.10.70  test70.cn  #從

mycat的用戶賬號和授權信息

Vim /usr/local/mycat/conf/server.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://org.opencloudb/">
        <system>
        <property name="defaultSqlParser">druidparser</property>
        </system>
        <user name="root">   #用戶賬號,用於給前端APP登錄mycat使用
                <property name="password">123456</property>   #對應賬號密碼
                <property name="schemas">ha</property>  #操作庫名稱
        </user>
        <user name="user">
                <property name="password">user</property>
                <property name="schemas">ha</property>
                <property name="readOnly">true</property>  #對應只讀權限
        </user>
</mycat:server>

MyCAT配置文件schema.xml

關於dataHost的配置信息如下

Vim /usr/local/mycat/conf/schema.xml
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://org.opencloudb/">
        <schema name="ha" checkSQLschema="false" sqlMaxLimit="100" dataNode='dn1'> #同步數據庫名
        </schema>
        <dataNode name="dn1" dataHost="dthost" database="ha"/>
        <dataHost name="dthost" maxCon="500" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="-1" slaveThreshold="100">
        <heartbeat>select user()</heartbeat>
        <writeHost host="test68.cn" url="localhost:3306" user="root" password="123456"> #對應數據庫及數據庫用戶名及密碼(與hosts文件中內容匹配)
        </writeHost>
        <writeHost host="test68.cn" url="10.10.10.68:3306" user="root" password="123456" />
        </dataHost>
</mycat:schema>

其中,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不負擔讀壓力

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

1. switchType='-1' 表示不自動切換
2. switchType='1' 默認值,表示自動切換
3. switchType='2' 基於MySQL主從同步的狀態決定是否切換,心跳語句爲 show slave status
4. switchType='3'基於MySQL galary cluster的切換機制(適合集羣)(1.4.1),心跳語句爲 show status like 'wsrep%'。

到/usr/local/mycat/bin 目錄下執行

./mycat start #啓動mycat服務

在這裏插入圖片描述

配置Mysql主從

test68上創建數據庫和表,用於實現寫操作

[root@test68 ~]# mysql -uroot -p123456
mysql> create database ha;

授權給mycat登陸數據庫使用的帳號

mysql> GRANT ALL PRIVILEGES ON *.* TO 'mycat'@"%" IDENTIFIED BY "123456"; 
mysql> grant replication slave on *.* to slave@"10.10.10.%"  identified by "123456";
mysql>flush privileges;
mysqldump –uroot –p123456  -B ha>ha.sql  #導出給從庫

關閉密碼強度審計,在my.cnf添加validate-password=off
test70上導入數據庫和表,用於實現讀操作

[root@test70 ~]# mysql -uroot -p123456<ha.sql

授權給mycat登陸數據庫使用的帳號

mysql> grant all on db.* to  mycat@'%' identified by '123456'; 
mysql>flush privileges;
mysql>stop slave;    #停止slave
mysql> change master to master_host='10.10.10.68',master_user='slave',master_password='123456';
mysql> start slave;    #啓動slave
mysql> show slave status\G  查看狀態 ,有兩個yes主從同步成功!
[root@test67 ~]# /usr/local/mycat/bin/mycat  start #啓動服務mycat服務

使用客戶端登錄mycat中間鍵(用戶名與密碼爲/usr/local/mycat/conf/server.xml配置),登錄後有明顯的mycat標識。

mysql -uroot -p123456  -h 10.10.10.67 -P8066

在這裏插入圖片描述
測試讀寫分離,需要在/usr/local/mycat/conf/log4j.xml文件中將等級修改爲debug
在這裏插入圖片描述
然後實時查看/usr/local/mycat/logs/mycat.log即可

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