MyCat高可用集羣
第一章 安裝MyCat,實現數據讀寫分離
前言
Mycat是數據庫中間件。
中間件:是一類連接軟件組件和應用的計算機軟件,以便於軟件各部件之間的溝通。
數據庫中間件:連接應用程序和數據庫。
mycat(前身是阿里的cobar)支持的數據庫包括mysql、Oracle、SQLServer、DB2等主流關係型數據庫,也支持非關係型數據庫,key-value型的reids、memcache,面向文檔型的mongoDB,面向列的HBase等。其核心功能是分庫分表,滿足大數據量存儲,提高查詢性能。
一、環境準備
三臺CentOS7虛擬機
一臺安裝mycat,M1、S1實現主從備份
名稱 | 服務器名 | IP |
---|---|---|
MyCat | centos7_1 | 192.168.80.70 |
M1 | localhost.localdomin | 192.168.80.20 |
S1 | CentOS7 | 192.168.80.80 |
二、安裝JDK
1.下載JDK和MyCat安裝包
JDK官網下載地址:https://www.oracle.com/cn/java/technologies/javase-jdk15-downloads.html
MyCat官方下載地址:http://www.mycat.org.cn/
2.安裝JDK
將下載好的JDK包傳到服務器
#解壓文件,修改配置文件,在後面添加配置
vim /etc/profile
export JAVA_HOME=/usr/local/jdk-15.0.1 #jdk所在目錄
export CLASSPATH=.:${JAVA_HOME}/jre/lib/rt.jar:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jar
export PATH=$PATH:${JAVA_HOME}/bin
#重新加載文件
source /etc/profile
#測試jdk是否安裝成功
java -version
三、 搭建mysql主從服務器
#安裝mysql
yum -y install mariadb mariadb-server
#啓動服務並設置開機自啓
systemctl enable mariadb
systemctl start mariadb
1、M1
#開啓二進制日誌
#主服務器id應比從服務器小
vim /etc/my.cnf
server-id=1#啓用二進制日誌
log-bin=mysql-bin
# 設置不要複製的數據庫(可設置多個)
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
#設置需要複製的數據庫
binlog-do-db=testdb
#設置logbin格式
binlog_format=STATEMENT
#重啓mysql
systemctl restart mariadb
#主服務器授權
grant replication slave on *.* to slave@'192.168.80.80' identified by '123456';
#查看log日誌狀態
show master status;
2、S2
#從服務器保存授權
change master to master_user='slave',
master_password='123456',
master_host='192.168.80.70',
master_log_file='mysql-bin.000001',
master_log_pos=398;
##成功後會有文件保存了連接信息
#/var/lib/mysql/master.info
#開啓從服務器
start slave;
#查看從服務器狀態
#Slave_IO_Running和Slave_SQL_Running 爲yes即爲開啓成功
show slave status\G;
#測試
#主庫創建testdb庫,從庫也生成了testdb庫
create database testdb;
四、安裝MyCat
將下載好的MyCat包傳到服務器,軟件包解壓即可使用,無需安裝
1、修改配置文件(配置文件在conf文件夾裏)
#修改登錄名(默認root,爲了與系統root區分)
vim /usr/local/mycat/conf/server.xml
#修改mycat配置,刪除不必要的信息
vim /usr/local/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="testdb" />
<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="hostM1" url="192.168.80.20:3306" user="root"
password="123456">
<readHost host="hostS2" url="192.168.80.80:3306" user="root" password="123456" />
</writeHost>
</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”,所有讀請求隨機的分發到readhost 執行,writerHost 不負擔讀壓力
#主、從服務器數據庫授權給MyCat
grant all on *.* to root@'%' identified by '123456';
#驗證遠程連接數據庫是否成功
需要安裝mysql
mysql -uroot -p123456 -h 192.168.80.20 -P 3306
mysql -uroot -p123456 -h 192.168.80.80 -P 3306
五、啓動MyCat
#啓動mycat有兩種方式
①控制檯啓動:去mycat/bin 目錄下執行./mycat console
②後臺啓動:去mycat/bin 目錄下./mycat start
#啓動mycat
./mycat console
#若出現Unrecognized VM option 'AggressiveOpts’錯誤
#修改配置文件,註釋掉-XX:+AggressiveOpts
vim /usr/local/mycat/conf/wrapper.conf
#重新啓動mycat
./mycat console
#進入mycat
mysql -umycat -p123456 -P8066 -h 192.168.80.70
#可以看到設置的數據庫名TESTDB
show databases;
use TESTDB;
#新建新表
create table a1 (id int(10),name char(20));#驗證讀寫分離
#插入主機名信息,查看數據
insert into a1 values (3,@@hostname);
#查看主從表信息
至此利用mycat實現主從數據庫讀寫分離。