1. 程式人生 > >mycat實現mysql讀寫分離,熱切換,叢集

mycat實現mysql讀寫分離,熱切換,叢集

在網際網路時代,實現mysql讀寫分離,熱切換,叢集能大大提高mysql資料庫訪問壓力,防止資料丟失,使用mycat能幫我們實現這些。我們要實現的是這種架構。

這裡寫圖片描述

1、Mycat能實現資料庫的垂直切分和水平切分,這裡使用者寫資料的時候,通過mycat把資料按照特定的規則儲存到mysql-1,mysql-2,mysq-3…中,讀的時候,分佈從mysql-1,mysql-2,mysql-3…等讀出資料然後由tomcat合併結果給客戶端,這樣子能分發資料庫的壓力,實現mysql的叢集。

2、Mysql自身能支援主從複製和主主複製,能夠在不同伺服器的資料庫中相互複製資料,這是實現讀寫分離的前提。

3、Mycat能支援mysql的讀寫分離,還有熱切換,可以在conf下schema.xml配置。

<dataHost name="master1" maxCon="1000" minCon="10" balance="1"
       writeType="0" dbType="mysql" dbDriver="native">
       <heartbeat>show slave status</heartbeat> 
       <writeHost host="host1" url="192.168.137.101:3306" user="root" password="123" >
          <readHost host="host3"
url="192.168.137.103:3306" user="root" password="123" />
</writeHost> </dataHost><dataHost name="master2" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native"> <heartbeat>show slave status</heartbeat> <writeHost
host="host2" url="192.168.137.102:3306" user="root" password="123" />
<writeHost host="host4" url="192.168.137.104:3306" user="root" password="123" /> </dataHost>

第一種的缺點是,當主down了之後,從也就不能讀了,第二種,當主掛了,從還可以切換,繼續可以用,上面的架構圖中,我們採用第二種模式,另外在同步資料的時候,我們為什麼要處理充主主同步,而不是主從同步呢,原因是,當主掛了之後,作為熱備的mysql可以切換作為主繼續服務,然後我們可以恢復原先down的mysql機器,那麼他就可以同步資料了。如果是主從的話,當主down了之後,從切換為主,但是當原因的主重啟之後,就很難同步從的mysq的資料了。那我們就來配置下上面那個架構

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://org.opencloudb/">

    <schema name="test" checkSQLschema="false" sqlMaxLimit="100">
       <table name="tb_fenpian" dataNode="dn1,dn2" rule="rule1" primaryKey="id"/>
    </schema>

    <!--將邏輯資料庫和實際資料庫進行關聯-->
    <dataNode name="dn1" dataHost="master1" database="fenpian" /> 
    <dataNode name="dn2" dataHost="master2" database="fenpian" />

    <!--切片mysql-1-->
    <dataHost name="master1" maxCon="1000" minCon="10" balance="1"
       writeType="0" dbType="mysql" dbDriver="native">
       <heartbeat>show slave status</heartbeat> 
       <!--主,用於寫-->
       <writeHost host="host1" url="192.168.137.101:3306" user="root" password="123" />
         <!--主2,用於讀,host1 down了,自動切換為主,讀寫都可以-->
       <writeHost host="host3" url="192.168.137.103:3306" user="root" password="123" /> 
    </dataHost> 
    <!--切片mysql-2-->
    <dataHost name="master2" maxCon="1000" minCon="10" balance="1"
       writeType="0" dbType="mysql" dbDriver="native">
       <heartbeat>show slave status</heartbeat> 
       <!--主1,用於寫-->
       <writeHost host="host2" url="192.168.137.102:3306" user="root" password="123" />
       <!--主2,用於讀,host2 down了,自動切換為主,讀寫都可以-->
       <writeHost host="host4" url="192.168.137.104:3306" user="root" password="123" /> 
    </dataHost>

</mycat:schema>

這裡要說下,mycat讀寫分離的一些關鍵配置,按照官方文件說明:

a. 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 不負擔讀壓力,注意 balance=3 只在 1.4 及其以後版本有, 1.3 沒有。

b. writeType 屬性,負載均衡型別,目前的取值有 3 種:
1. writeType=”0”, 所有寫操作傳送到配置的第一個 writeHost,第一個掛了切到還生存的第二個
writeHost,重新啟動後已切換後的為準,切換記錄在配置檔案中:dnindex.properties .
2. writeType=”1”,所有寫操作都隨機的傳送到配置的 writeHost。
3. writeType=”2”,沒實現。

c. switchType 屬性
- -1 表示不自動切換
- 1 預設值,自動切換
- 2 基於MySQL 主從同步的狀態決定是否切換

2、配置conf/schema.xml了,需要配下分片規則,在/conf/rule.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:rule SYSTEM "rule.dtd">
<mycat:rule xmlns:mycat="http://org.opencloudb/"> 
 <tableRule name="rule1">
    <rule>
      <columns>id</columns>
      <algorithm>func1</algorithm>
    </rule>
 </tableRule>

 <function name="func1" class="org.opencloudb.route.function.PartitionByLong">
    <property name="partitionCount">2</property>
    <property name="partitionLength">512</property>
 </function>
</mycat:rule>

3、配置下連結mysql的帳號資訊等,/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="test">
        <property name="password">test</property>
        <property name="schemas">test</property>
    </user>

    <user name="user">
        <property name="password">user</property>
        <property name="schemas">test</property>
        <property name="readOnly">true</property>
    </user>
</mycat:server>

4、進行測試步驟,可以按如下方式進行,本人測試通過,mycat是放在windows上,四個mysql是放在linux rhel7的四個虛擬機器上。

a.驗證分片規則叢集,在mycat分別插入id為1還有id為513的資料,看看是否能根據id的分片規則,分佈差到倆個數據庫中,1在0~512,應該到101的資料庫中,513在512~1024應該到102的資料庫中

b.驗證主主資料是否同步,檢視年103還有104的資料是否和101和102的資料庫資料一致

c.驗證熱切換,將101down掉,103是否能繼續服務,讀寫是否正常,然後再啟動101,是否正常

d.讀寫分離在主主同步的架構下,還沒想出測試的方式,再看看。

現在這個架構還存在一個問題,就是mycat單點問題,由於篇幅問題,就留在下一篇部落格寫吧

相關推薦

mycat實現mysql分離切換叢集

在網際網路時代,實現mysql讀寫分離,熱切換,叢集能大大提高mysql資料庫訪問壓力,防止資料丟失,使用mycat能幫我們實現這些。我們要實現的是這種架構。 1、Mycat能實現資料庫的垂直切分和水平切分,這裡使用者寫資料的時候,通過mycat把資料按照

mycat實現MySQL分離

mycat mysql讀寫分離 mycat實現MySQL讀寫分離mycat是什麽Mycat是一個開源的分布式數據庫系統,但是由於真正的數據庫需要存儲引擎,而Mycat並沒有存儲引擎,所以並不是完全意義的分布式數據庫系統。Mycat是數據庫中間件,就是介於數據庫與應用之間,進行數據處理與交互的中間服務。

使用mycat實現mysql分離

一、mycat概述 1、mycat          mycat是一個開源的分散式資料庫中介軟體,是一個實現了MySQL 協議的的Server,前端使用者可以把它看作是一個數據庫代理,用MySQL 客戶端工具和命令列訪問,而其後端可以用MySQL 原生(Native)協議

使用mycat實現mysql分離以及主備自動切換模式

一:軟體環境 Window7 Mycat-server1.6 JDK1.8 Mysql5.62臺 二:讀寫分離的好處 增加了冗餘(備份資料)。 讀寫分開,減輕機器壓力,提高資料庫併發。 Mycat

實現MySQL分離MySQL性能調優

affect iad list cte 軟件包 密碼 sts 要求 select 實現MySQL讀寫分離 1.1 問題 本案例要求配置2臺MySQL服務器+1臺代理服務器,實現MySQL代理的讀寫分離: 用戶只需要訪問MySQL代理服務器,而實際的SQL查詢、寫入操作交給

通過Maxscale代理實現MySQL分離

一、搭建MySQL主從架構 二、藉助MySQL代理Maxscale實現SQL層讀寫分離     MySQL代理的工具比較多,有MySQL Proxy,Maxscale,ProxySQL ,360的Atlas,實際安裝之中,發現Atlas和maxscale好用,不會出現

Mycat安裝並實現mysql分離,分庫分表

轉載請表明出處 https://blog.csdn.net/Amor_Leo/article/details/85204592 謝謝 Mycat安裝並實現mysql讀寫分離,分庫分表 jdk安裝 建立資料夾 下載jdk並配置

amoeba實現mysql分離+主從復制架構

mysql amoeba 讀寫分離 主從復制一、環境系統:centos6.5mysql版本:mysql5.6master服務器:192.168.1.21slave服務器: 192.168.1.100master寫 slave讀二、實現mysql主從復制在master的/etc/my.cnf中[mysqld]字

mysql中間件amoeba實現mysql分離

ipaddress -c export div 高可用 rop 6.0 res grant Amoeba是一個以MySQL為底層數據存儲,並相應用提供MySQL協議接口的proxy。它集中地響應應用的請求,根據用戶事先設置的規則。將SQL請求發送到特定的數據庫上運行

使用Spring AOP實現MySQL分離

npr getclass mod rac ava nfa release box port spring aop , mysql 主從配置 實現讀寫分離,下來把自己的配置過程,以及遇到的問題記錄下來,方便下次操作,也希望給一些朋友帶來幫助。mysql主從配置參看:http:

安裝mysql-proxy實現mysql分離

mysql-proxy 讀寫分離 一. 環境描述操作系統版本:centos 7.2主服務器:192.168.0.72 node2從服務器:192.168.0.73 node3調度服務器MySQL-Proxy:192.168.0.71 node1二. 配置mysql主從2.1 安裝mysqlno

實現MySQL分離 部署集群基礎環境(有圖)

for fig 0.12 主主從 100% welcom mysql- Oz 要求 實現MySQL讀寫分離 部署集群基礎環境 1 實現MySQL讀寫分離1.1 問題 本案例要求配置2臺MySQL服務器+1臺代理服務器,實現MySQL代理的讀寫分離: 用戶只需要訪問MySQL

MaxScale:實現MySQL分離與負載均衡的中介軟體利器

1、MaxScale 是幹什麼的? 配置好了MySQL的主從複製結構後,我們希望實現讀寫分離,把讀操作分散到從伺服器中,並且對多個從伺服器能實現負載均衡。 讀寫分離和負載均衡是MySQL叢集的基礎需求,MaxScale 就可以幫著我們方便的實現這些功能。 2、MaxScale 的基礎構成

thinkphp框架實現mysql分離

基於thinkphp3.2.3,官方手冊:http://www.kancloud.cn/manual/thinkphp/1733 注意事項: 1、首先得配置好mysql主從,可以多主多從 2、在讀寫分離的情況下,預設第一個資料庫配置是主伺服器的配置資訊,負責寫入資料,如果設

Amoeba實現mysql分離

一、關於讀寫分離 讀寫分離(Read/Write Splitting),基本的原理是讓主資料庫處理事務性增、改、刪操作(INSERT、UPDATE、DELETE),而從資料庫處理SELECT查詢操作。資料庫複製被用來把事務性操作導致的變更同步到叢集中的從資料庫。 二、同

windows實現mysql分離

一、主伺服器(master)配置 1、修改MySQL配置檔案my.ini [mysqld] log-bin=mysql-bin #開啟主從複製,主庫的配置 log-bin-index=mysql-bin.index server-id=1 #指定主庫serverid,主庫的

基於amoeba實現MySQL分離

說明:本配置基於centos6.4_x86,兩臺mysql伺服器均為原始碼編譯(5.6.24版本),amoeba代理為2.2.0版本 server use ip master mysql主 192.168.0.172

MyCAT 部署 MySQL 分離

單一的 MySQL 伺服器一旦宕機,會造成單點故障,整個系統無法運轉,所以要有主庫(Master)和從庫(Slave備庫)兩份,主庫故障時自動切換至備庫。另外,大多企業應用是寫的少(INSERT/DELETE/UPDATE)查的多(SELECT),所以還要實現讀寫分離,以便根據讀寫比例分別擴充套件讀、寫庫

Linux系統中採用Atlas+Keepalived實現MySQL分離、負載均衡

========================================================================================== 一、基礎介紹 ========================================================

MySQL Proxy 實現 MySQL 分離提高併發負載

工作拓撲: MySQL Proxy有一項強大功能是實現“讀寫分離”,基本原理是讓主資料庫處理寫方面事務,讓從庫處理SELECT查詢。 Amoeba for MySQL是一款優秀的中介軟體軟體,同樣可以實現讀寫分離,負載均衡等功能,並且穩定性也高於MySQL Proxy