當前位置:網站首頁>Linux Mysql之中間件Mycat 讀寫分離

Linux Mysql之中間件Mycat 讀寫分離

2022-01-27 07:42:54 Dark_wWw

目錄

Linux Mysql之中間件Mycat 讀寫分離

一、Mycat

Mycat 適用場景

Mycat 長期路線圖

二、Mycat 概括

三、Mycat 實現 Mysql 讀寫分離


Linux Mysql之中間件Mycat 讀寫分離

一、Mycat

Mycat 適用場景

單純的讀寫分離,此時配置最為簡單,支持讀寫分離,主從切換

分錶分庫,對於超過1000萬的錶進行分片,最大支持1000億的單錶分片

多租戶應用,每個應用一個庫,但應用程序只連接Mycat,從而不改造程序本身,實現多租戶化報錶系統,借助於Mycat的分錶能力,處理大規模報錶的統計

替代Hbase,分析大數據,作為海量數據實時查詢的一種簡單有效方案,比如100億條頻繁查詢的記錄需要在3秒內查詢出來結果,除了基於主鍵的查詢,還可能存在範圍查詢或其他屬性查詢,此時Mycat可能是最簡單有效的選擇

Mycat 長期路線圖

强化分布式數據庫中間件的方面的功能,使之具備豐富的插件、强大的數據庫智能優化功能、全面的系統監控能力、以及方便的數據運維工具,實現在線數據擴容、遷移等高級功能進一步挺進大數據計算領域,深度結合Spark Stream和Storm等分布式實時流引擎,能够完成快速的巨錶關聯、排序、分組聚合等 OLAP方向的能力,並集成一些熱門常用的實時分析算法,讓工程師以及DBA們更容易用Mycat實現一些高級數據分析處理功能不斷强化Mycat開源社區的技術水平,吸引更多的IT技術專家,使得Mycat社區成為中國的Apache,並將Mycat推到Apache基金會,成為國內頂尖開源項目,最終能够讓一部分志願者成為專職的Mycat開發者,榮耀跟實力一起提昇

二、Mycat 概括

一個徹底開源的,面向企業應用開發的大數據庫集群

支持事務、ACID、可以替代MySQL的加强版數據庫

一個可以視為MySQL集群的企業級數據庫,用來替代昂貴的Oracle集群

一個融合內存緩存技術、NoSQL技術、HDFS大數據的新型SQL Server

結合傳統數據庫和新型分布式數據倉庫的新一代企業級數據庫產品

一個新穎的數據庫中間件產品

三、Mycat 實現 Mysql 讀寫分離

環境准備

master服務器	    192.168.118.140
slave1服務器	    192.168.118.150
mycat服務器	    192.168.118.160
客戶機	        192.168.118.170

初始化環境

#每臺服務器上都初始化,關閉防火牆
systemctl stop firewalld
systemctl disable firewalld
setenforce 0

 主從配置

主 mysql 服務器配置(192.168.118.140)

(1)#修改配置文件
vim /etc/my.cnf
server-id = 1
log-bin=master-bin
binlog_format=MIXED
log-slave-updates=true
 
(2)#重啟服務
systemctl restart mysqld
 
(3)#進入數據庫授權,查看二進制文件及節點號
mysql -uroot -p000000
grant replication slave on *.* to 'myslave'@'192.168.118.%' identified by '123456';
flush privileges;
show master status;
 
(4)#在數據庫中傳入一個數據庫文件hellodb
source ~/test.sql

修改配置文件

 重啟服務

 進入數據庫授權,查看二進制文件及節點號

 在數據庫中傳入一個數據庫文件hellodb

 從 Mysql 服務器配置(192.168.118.150)

(1)#修改配置文件
vim /etc/my.cnf
server-id = 2
relay-log=relay-log-bin
relay-log-index=slave-relay-bin.index
 
(2)#重啟服務
systemctl restart mysqld
 
(3)#進入數據庫授權,查看二進制文件及節點號
mysql -uroot -p000000
change master to master_host='192.168.118.140',master_user='myslave',master_password='123456',master_log_file='master-bin.000002',master_log_pos=902;
 
start slave;
show slave status\G;
 
##一定要出現
#Slave_IO_Running: Yes
#Slave_SQL_Running: Yes

修改配置文件

 重啟服務

 進入數據庫授權,查看二進制文件及節點號

 安裝 Mycat(192.168.118.160)

(1)#主機上安裝java
yum install java -y
 
(2)#創建/apps文件夾
mkdir /apps
 
(3)#網絡下載mycat包並解壓至/apps下
wget http://dl.mycat.org.cn/1.6.7.6/20210303094759/Mycat-server-1.6.7.6-release-20210303094759-linux.tar.gz
tar zxvf Mycat-server-1.6.7.6-release-20210303094759-linux.tar.gz -C /apps/
 
(4)#設置變量環境
echo 'PATH=/apps/mycat/bin:$PATH' > /etc/profile.d/mycat.sh
source /etc/profile.d/mycat.sh
 
(5)#啟動mycat
mycat start
 
(6)#查看日志文件,最後可以看到啟動成功
tail -f /apps/mycat/logs/wrapper.log 

安裝 java

 創建 /apps 文件夾

 網絡下載 mycat 包並解壓至 /apps 下

 設置變量環境

 啟動 mycat

 查看日志文件,最後可以看到啟動成功

第一次在客戶機測試(192.168.118.170)

#這裏密碼初始為123456   需要加端口
mysql -u root -p123456 -h 192.168.118.160 -P8066

 修改 mycat 配置文件

修改 /apps/mycat/conf/server.xml

vim /apps/mycat/conf/server.xml
 
#去掉44行注釋,50行末注釋,51行末注釋
 
#第45行,修改端口號
<property name="serverPort">3306</property>
 
#密碼用戶 在110 和111 可以修改這邊不修改了

去掉44行注釋,50行末注釋,51行末注釋 

 第45行,修改端口號

 密碼用戶 在110 和111 可以修改這邊不修改了

 主服務器上建立一個用戶

mysql -u root -p000000
GRANT ALL ON *.* TO 'root'@'192.168.118.%' IDENTIFIED BY '123456';
 
#查看創建成功
use mysql;
select user,host from user;

 修改 /apps/mycat/conf/schema.xml

(1)#删除所有內容,重新寫入以下
vim  /apps/mycat/conf/schema.xml
 
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
        <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1"></schema>
        <dataNode name="dn1" dataHost="localhost1" database="hellodb" />
        <dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"
                  writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
                <heartbeat>select user()</heartbeat>
                <writeHost host="host1" url="192.168.118.140:3306" user="root" password="123456">
                 <readHost host="host2" url="192.168.118.150:3306" user="root" password="123456"/>
 
                </writeHost>
        </dataHost>
</mycat:schema>
 
(2)#如果本地mycat服務器上安裝了mysql需要關掉,否則端口會沖突
systemctl stop mysqld.service
 
(3)#重啟mycat,並查看3306端口
 mycat restart    
 ss -antp|grep 3306

 如果本地mycat服務器上安裝了mysql需要關掉,否則端口會沖突

 重啟mycat,並查看3306端口

客戶端測試

查看讀來自那臺服務器

#這時可以不加端口直接進入數據庫了
mysql -u root -p123456 -h 192.168.118.160
 
#看是否能查到錶
mysql -u root -p123456 -h 192.168.118.160
show databases;
use TESTDB;
show tables;
 
#查看當前的查詢來自哪臺服務器
select @@server_id;
 

這時可以不加端口直接進入數據庫了

 測試讀寫分離

#在主、從服務器打開日志
set global general_log=1; 
 
#在客戶機查看是否開啟成功
show variables like 'general%';
 
#在主從服務器實時查看日志
tail -f /usr/local/mysql/data/localhost.log
 
#在客戶機上汪錶裏插入數據,並查看主從服務器實時日志
insert into teachers values(5,'Xiao Ming',46,'F');
 
#在客戶機查看錶信息,並查看主從服務器實時日志
select * from teachers;

在主、從服務器打開日志

 在客戶機查看是否開啟成功

 在主從服務器實時查看日志

 在客戶機上錶裏插入數據,並查看主從服務器實時日志

在客戶機查看錶信息,並查看主從服務器實時日志

 

版權聲明
本文為[Dark_wWw]所創,轉載請帶上原文鏈接,感謝
https://cht.chowdera.com/2022/01/202201270742540436.html