1. 程式人生 > >分散式架構高可用架構篇_08_MyCat在MySQL主從複製基礎上實現讀寫分離

分散式架構高可用架構篇_08_MyCat在MySQL主從複製基礎上實現讀寫分離

一、環境

作業系統:CentOS-6.6-x86_64-bin-DVD1.iso JDK 版本:jdk1.7.0_45

MyCat 版本:Mycat-server-1.4-release-20151019230038-linux.tar.gz

MyCat 節點 IP:192.168.1.203 主機名:edu-mycat-01 

MySQL 版本:mysql-5.6.22.tar.gz

主節點 IP:192.168.1.205 主機名:edu-mysql-01

從節點 IP:192.168.1.206 主機名:edu-mysql-02 

MyCat 的讀寫分離是基於後端 MySQL 叢集的主從同步來實現的,而 MyCat 提供語句的分發

功能。MyCat1.4 開始支援 MySQL 主從複製狀態繫結的讀寫分離機制,讓讀更加安全可靠。


三、MyCat的安裝

四、MyCat 的安裝

1、設定 MyCat 的主機名和 IP 與主機名的對映

vi /etc/sysconfig/network 

NETWORKING=yes 

HOSTNAME=edu-mycat-01

 vi /etc/hosts

127.0.0.1 edu-mycat-01 

192.168.1.203 edu-mycat-01 

192.168.1.205 edu-mysql-01 

192.168.1.206 edu-mysql-02

2、因為 MyCat 是用 Java 開發的,因此 MyCat 執行需要安裝 JDK(準確來說是 JRE 就夠了), 並且需要 JDK1.7 或以上版本

我這裡已經配置好


3、建立 mycat 使用者並設定密碼

 useradd mycat

 passwd mycat


4、上傳安裝包 Mycat-server-1.4-release-20151019230038-linux.tar.gz 到 MyCat 伺服器中的 /home/mycat目錄,

並解壓並移動到 /usr/local/mycat目錄

 [[email protected] ~]# su mycat
[[email protected] yxq]$ cd /home/mycat
[[email protected] ~]$ 


[[email protected] ~]$ ls

Mycat-server-1.4-release-20151019230038-linux.tar.gz

[[email protected] ~]$ tar -zxvf Mycat-server-1.4-release-20151019230038-linux.tar.gz 

[mycat@edu-mycat-01 ~]# mv /home/mycat/mycat/ /usr/local/

[[email protected] mycat]# ll
total 24
drwxrwxr-x. 2 mycat mycat 4096 Apr 25 14:58 bin
drwxrwxr-x. 2 mycat mycat 4096 Jun 16  2015 catlet
drwxrwxr-x. 2 mycat mycat 4096 Apr 25 14:58 conf
drwxrwxr-x. 2 mycat mycat 4096 Apr 25 14:58 lib
drwxrwxr-x. 2 mycat mycat 4096 Jun 16  2015 logs
-rwxrwxr-x. 1 mycat mycat  217 Oct 19  2015 version.txt

5、設定 MyCat 的環境變數

vi /etc/profile## mycat env

export MYCAT_HOME=/usr/local/mycat 

export PATH=$PATH:$MYCAT_HOME/bin

source /etc/profile

五、配置 MyCat

1、在配置 MyCat 前,請確認 MySQL 的主從複製安裝配置已完成並正常執行。MySQL 主從數據的同步在 MySQL 中配置,MyCat 不負責資料同步的問題。

 補充:

(1) MySQL 主從複製配置中,如果涉及到函式或儲存過程的同步複製,需要在/etc/my.cnf 中的[mysqld]段中增加配置log_bin_trust_function_creators=true 或在客戶端中設定set globallog_bin_trust_function_creators = 1;

(2) 如果要做讀寫分離下的主從切換,那麼從節點也有可能會變為寫節點,因此從節點就不 能設定為只讀 read_only=1 。

(3) Linux 版本的 MySQL,需要設定為 MySQL 大小寫不敏感,否則可能會發生找不到表的問 題。可在/etc/my.cnf 的[mysqld]段中增加lower_case_table_names=1 。

 2、配置 MyCat 的 schema.xml

 schema.xml 是 MyCat 最重要的配置檔案之一,用於設定 MyCat 的邏輯庫、表、資料節點、

 dataHost 等內容,

 [[email protected] conf]$ cd /usr/local/mycat/conf/

 [[email protected] conf]$ vi schema.xml

MyCat1.4開始支援MySQL主從複製狀態繫結的讀寫分離機制,讓讀更加安全可靠,配置如下:


MyCat1.4開始支援MySQL主從複製狀態繫結的讀寫分離機制,證讀更加安全可靠,配置如下:

MyCat心跳檢查語句配置為show slave status,dataHost上定義了兩個新屬性,switchType=”2”與slaveThreshold=”100”,此時意味著開啟MySQL主從複製狀態繫結的讀寫分離與切換機制,

MyCat心跳機制通過檢測

show slave status”Seconds_Behind_Master”,”Slave_IO_Running”,’”Slave_SQL_Running”三個欄位來確定當前主從同步的狀態以及”Seconds_Behind_Master”主從複製時延,當Seconds_Behind_Master大於slaveThreshold時,讀寫分離篩選器會過濾掉此Slave機器,防止讀到很久之前的舊資料,而當主節點宕機後,切換邏輯會檢查Slae上的Seconds_Behid_Master是否為0,為0時表示主從同步,可以安全切換,否則不會切換。

3、配置server.xml

Server.xml主要用於設定系統變數、管理使用者、設定使用者許可權等               

[[email protected] conf]# vi server.xml


[[email protected] conf]# service iptables restart

3、修改log日誌級別為debug,以便通過日誌確認基於MyCatMySQL資料庫叢集讀寫分離的資料操作狀態(可以在正式上生產前改成info級別)

[[email protected] conf]$ vi /usr/local/mycat/conf/log4j.xml 


3、啟動MyCat

[[email protected] conf]$ cd /usr/local/mycat/bin/

(1)控制檯啟動,這種啟動方式在控制檯關閉後,MyCat服務也將關閉,適合除錯使用:

[[email protected] bin]$ ./mycat console


(1)可以採用以下後臺的方式啟動:

[[email protected] bin]$ ./mycat start

(對應的,重啟:/mycat restart,關閉:./mycat stop)


7、MyCat連線測試

(1)、如果本地Windows安裝有MySQL,可以使用已有的mysql客戶端遠端操作MyCat

cd  C:\Program Files\MySQL\MySQL Server 5.6\bin

mysql -uuser2 -pyixq.2 -h192.168.1.203 -P8066


mysql> show databases;

mysql> use rc_schema2;

mysql> show tables;


(1)、如果為了方便,需要在MyCat主機上對MyCat進行操作(MyCat當是本地MySQL來操作),可以在MyCat節點主機上安裝MySQL客戶端:

[[email protected] bin]$ su root

Password:

[[email protected] bin]# yum install mysql

使用安裝好的mysql客戶端登入MyCat

[[email protected] mycat]# mysql -u user2 -pyixq.2 -h192.168.1.203 -P 8066


如果使用MyCat主機上安裝了MySQL客戶端進行查詢出理亂碼,則需要設定客戶端的編碼在/etc/my.cnf中的[client]中設定客戶端的預設編碼為utf8

[[email protected] bin]# vi /etc/my.cnf

[client]

default-character-set=utf8

(1)使用第三方MySQL管理客戶端連線MyCat測試(navicat支援,MySQS-Front相容性不太好),navicat為例:



8、讀寫分離測試

(1)監聽MyCat日誌

[[email protected] ~] cd /usr/local/mycat/logs

[[email protected] logs] tail -f myat.log

(1)讀測試

[[email protected] ~]$ mysql -uuser2 -pyixq.2 -h192.168.1.203 -P8066


mysql> show databases;

mysql> use edu_schema2;

mysql> show tables;

mysql> select * from edu_user;


執行上面的查詢語句,此時對應的MyCat日誌資訊如下:


多次執行select * from edu_user語句,MyCat打印出來的日誌資訊顯示讀操作請求都是路由到Slave節點(192.168.1.206)

(1)寫測試


對應的日誌


多次執行以上插入語句,發現新增資料都是從Master節點(192.168.1.205)插進入的,並且Slave節點通過Binlog同步了Master節點中的資料


相關推薦

分散式架構可用架構_08_MyCat在MySQL主從複製基礎實現分離

一、環境作業系統:CentOS-6.6-x86_64-bin-DVD1.iso JDK 版本:jdk1.7.0_45MyCat 版本:Mycat-server-1.4-release-20151019230038-linux.tar.gzMyCat 節點 IP:192.168

MySQL主從復制 + Mycat實現分離

date windows repl ron 信息 決定 不用 ati 刪掉 說明:兩臺MySQL服務器都是使用CentOS6.5系統,MySQL版本為mysql-5.7.17 MySQL一主一被實現主從復制 註意:寫包括insert,delete,update 操作;讀只有

主題:分散式架構可用架構_Keepalived+Nginx實現可用Web負載均衡

一、場景需求 二、Keepalived 簡要介紹 Keepalived 是一種高效能的伺服器高可用或熱備解決方案,Keepalived 可以用來防止伺服器單點故障的發生,通過配合 Nginx 可以實現 web 前端服務的高可用。 Keepalived 以 VRRP

MHA +maxscale 實現分離可用架構實戰

MHA 相關原理 http://mp.blog.csdn.net/postedit/79183726  MHA  http://mp.blog.csdn.net/postedit/79183743 最佳實戰 MySQL讀寫分離原理相關知識體系  http://blog.cs

Redis配置主從架構實現分離

Redis的主從架構,能幫助我們實現讀多,寫少的情況,下面配置Redis架構,很簡單。 準備環境 vmware + rhel-server-7.0(101,102,103)+redis-3.2.0 1、在192.168.137.101安裝好redis3.

安裝Centos7 、 Mysql8 叢集,實現分離 可用(三)-- 主從設定

零、寫在前面    為了嘗試新技術和業務需要,因此打算搞一套這樣的環境玩兒一下    作業系統及資料庫的安裝請見前兩篇一、理論依據    不再贅述我的硬體規劃等細節    這次僅用到兩臺虛擬機器,一主一

Redis 可用:Redis Sentinel 主從複製故障轉移

Redis Sentinel  為 Redis 提供了高可用,可對複製叢集中進行監控、通知、故障轉移。 伺服器名稱:Centos222 , ip :192.168.1.222 ,主從角色:master 伺服器名稱:Centos224 , ip :192.168.1.22

安裝Centos7 、 Mysql8 叢集,實現分離 可用(二)-- 資料庫安裝

零、寫在前面    為了嘗試新技術和業務需要,因此打算搞一套這樣的環境玩兒一下    伺服器的安裝請見上一篇一、硬體規劃    我用的是自己的本機(8核、16G),劃分出三臺虛擬機器(一主兩從--MyS

安裝Centos7 、 Mysql8 叢集,實現分離 可用(一)-- 作業系統安裝

零、寫在前面    為了嘗試新技術和業務需要,因此打算搞一套這樣的環境玩兒一下    我的虛擬機器環境是VMWare12    這是第一篇,Centos7系統的安裝篇一、硬體規劃    我用的是自己的本

MySQL 之 MHA + ProxySQL + keepalived 實現分離可用(一)

don replica ifconfig soft 似的 恢復 select 8.0 ext 準備服務器: docker network create --subnet=192.168.0.0/16 staticnetdocker run -d --privileg

MySQL 之 MHA + ProxySQL + keepalived 實現分離可用(二)

ProxySQL安裝 yum/rpm安裝 在github或官網上可以下載rpm包,wiki的Getting start章節有詳細介紹。 cat <<EOF | tee /etc/yum.repos.d/proxysql.repo [proxysql_repo] name= ProxyS

分散式快取技術redis學習系列(九)——Redis主從實現分離

前言 大家在工作中可能會遇到這樣的需求,即Redis讀寫分離,目的是為了壓力分散化。下面我將為大家介紹藉助AWS的ELB實現讀寫分離,以寫主讀從為例。 實現 引用庫檔案 <!-- redis客戶端 --> <dependency&g

安裝Centos7 、 Mysql8 叢集,實現分離 可用(四)-- MyCat分離

零、說在前面    先吐個槽,這點東西折騰了我四五天,最後還是一條告警拯救了我,下面進入正文    看了幾個MySQL的讀寫分離的中介軟體,貌似這個是比較流行的一個,雖然我不是BAT的粉絲,但是有好用的

Mysql主從配置,實現分離

windows安裝 建議 xid 分布式 唯一標識 -1 在線下載 命令 進行 大型網站為了軟解大量的並發訪問,除了在網站實現分布式負載均衡,遠遠不夠。到了數據業務層、數據訪問層,如果還是傳統的數據結構,或者只是單單靠一臺服務器扛,如此多的數據庫連接操作,數據庫必然會崩潰,

MySQL主從復制技術與分離技術amoeba應用

buffer chan lns -a query rep 下載 高可用性 tab MySQL主從復制技術與讀寫分離技術amoeba應用 前言:眼下在搭建一個人才站點,估計流量會非常大,須要用到分布式數據庫技術,MySQL的主從復制+讀寫分

使用Spring實現分離( MySQL實現主從復制)

sign eve replicat win [] 做了 用戶名 指定 ati 1. 背景 我們一般應用對數據庫而言都是“讀多寫少”,也就說對數據庫讀取數據的壓力比較大,有一個思路就是說采用數據庫集群的方案, 其中一個是主庫,負責寫入數據,我們稱之為:寫庫; 其它都是從庫,

MySQL主從(MySQL proxy Lua分離設置,一主多從同步配置,分庫分表方案)

否則 count user username 2個 ons 基礎 zxvf 路徑 Mysql Proxy Lua讀寫分離設置一.讀寫分離說明讀寫分離(Read/Write Splitting),基本的原理是讓主數據庫處理事務性增、改、刪操作(INSERT、UPDATE、DE

MySQL第六天(主從同步,數據分離

dsfaday05一、數據備份與恢復-增量備份和增量恢復a.binlog日誌介紹(二進制文件):使用Mysql數據庫服務日誌文件類型的一種。記錄除查詢之外的sql命令。默認沒啟用 查詢的sql包括:select desc show 不是查詢的命令:insert update delete create dr

生產環境實踐Mysql5.7主從+Atlas實現分離

pro c-c creators 日誌 可執行 公眾 var timeout 錯誤信息 Mysql主從搭建 主從復制可以使MySQL數據庫主服務器的主數據庫,復制到一個或多個MySQL從服務器從數據庫,默認情況下,復制異步; 根據配置,可以復制數據庫中的所有數據庫,選定的

mysql-配置主從數據庫,實現分離

參考 image 增加 mysql- pan 位置 span 主從同步 原則 主從分離的原則:所有的寫操作在主數據庫中進行,因為主從分離的原理是涉及到同步數據,那就可能會出現延遲或者其他問題,就可能會出現臟數據。 所以,在從庫中進行的讀操作也必須是有一定容忍性的數據,例如日