mysql讀寫分離

來源:互聯網
上載者:User

標籤:mysql

mysql讀寫分離
 靜態分離:直接將伺服器位址寫入程式
 動態分離:通過Proxy 伺服器對資料進行讀寫操作,由Proxy 伺服器判定讀寫操作,在主伺服器上寫資料,在
         從伺服器上讀資料。
 
  1、使用mysql-proxy實現讀寫分離
 # ./mysql-proxy --proxy-backend-addresses=10.0.5.150:3306 --proxy-read-only-backend-addresses=10.0.5.151:3306 --proxy-lua-script=/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua --daemon --user=mysql --log-level=warning --log-file=/var/log/mysql-proxy.log --max-open-files=2048 --event-threads=4 --proxy-address=10.0.5.152:3306
 
 --proxy-backend-addresses            指定主伺服器地址(寫資料)
 --proxy-read-only-backend-addresses  指定從伺服器位址(讀資料)
 --proxy-lua-script                   指定用於讀寫分離的指令碼程式
 --daemon                             指定以守護進程的方式運行
 --user=mysql                         指定啟動並執行使用者
 --log-level                          指定日誌記錄層級
 --log-file                           指定記錄檔位置
 --max-open-files                     指定最大課開啟的檔案數,受作業系統限制
 --event-threads                      設定背景工作執行緒數
 --proxy-address                      設定監聽的本機地址和連接埠
 
 
 擷取mysql-proxy協助
 # ./mysql-proxy --help         \\基本選項協助
 # ./mysql-proxy --help-proxy   \\代理選項協助
 
 
 在所有伺服器上進行授權
 mysql> grant replication slave on *.* to ‘repuser‘@‘10.0.5.151‘ identified by ‘aixocm‘;
 mysql> flush privileges;
 (2)使用amoeba實現讀寫分離
  安裝jdk
    # tar xf jdk-7u51-linux-x64.tar.gz -C /usr/local/
    # mv jdk1.7.0_51 java
   
  編輯/etc/profile檔案,設定java環境變數
    # vim /etc/profile
      JAVA_HOME="/usr/local/java"
      CLASS_PATH="/usr/local/java/jre:/usr/local/java/lib"
      export JAVA_HOME CLASS_PATH
      PATH="$PATH:/usr/local/mysql/bin:/usr/local/java/bin"
    # source /etc/profile
   
  查看和調整java的預設版本
    # java -version
    # alternatives --install /usr/local/java/bin/java java /usr/local/java/bin/java 100  \\在系統中登記java版本和設定優先權
    # alternatives --display java   \\顯示java資訊
    # alternatives --config java    \\設定java的預設版本
 安裝和配置amoeba實現讀寫分離
    # unzip amoeba-mysql-3.0.5-RC-distribution.zip -d /usr/local/
    # mv amoeba-mysql-3.0.5-RC amoeba
   
    # vim dbServers.xml    \\定義後端伺服器資訊
     <property name="sendBufferSize">256</property>    \\設定發送緩衝區大小
     <property name="receiveBufferSize">256</property> \\設定接收緩衝區大小
     <property name="port">3306</property>       \\設定後端伺服器連接埠
     <property name="schema">sxjy</property>     \\設定代理預設串連的資料庫
     <property name="user">root</property>
     <property name="password">aixocm</property>  \\設定串連後端伺服器的密碼
     
     <dbServer name="master1"  parent="abstractServer">  \\定義後端伺服器
       <factoryConfig>
          <property name="ipAddress">10.0.5.150</property>
       </factoryConfig>
     </dbServer>

     <dbServer name="slave1"  parent="abstractServer">  \\定義後端伺服器
       <factoryConfig>
          <property name="ipAddress">10.0.5.151</property>
       </factoryConfig>
     </dbServer>

     <dbServer name="master" virtual="true">   \\定義伺服器集區
      <poolConfig class="com.meidusa.amoeba.server.MultipleServerPool">
       <property name="loadbalance">1</property>  \\定義負載平衡演算法
      <property name="poolNames">master1</property> \\添加伺服器,多個用逗號隔開
      </poolConfig>
     </dbServer>

    <dbServer name="slave" virtual="true">  \\定義伺服器集區
       <poolConfig class="com.meidusa.amoeba.server.MultipleServerPool">
          <property name="loadbalance">1</property>
          <property name="poolNames">slave1</property>
       </poolConfig>
    </dbServer>
    # vim amoeba.xml       \\定義代理資訊
    <property name="port">3306</property>   \\設定Proxy 伺服器監聽的連接埠
    <property name="ipAddress">10.0.5.152</property> \\設定代理監聽的地址
    <property name="user">root</property>  \\設定Proxy 伺服器使用的使用者名稱
    <property name="password">aixocm</property>  \\設定Proxy 伺服器使用的密碼
    <property name="defaultPool">master</property>  \\設定預設的伺服器集區,一般除
       select,insert,update,delete等的其它操作都在預設的伺服器進行

    <property name="writePool">master</property>  \\執行寫操作的伺服器集區
    <property name="readPool">slave</property>    \\執行讀操作的伺服器集區
    <property name="needParse">true</property>
   
    # vim jvm.properties   \\設定java記憶體配置資訊
    JVM_OPTIONS="-server -Xms256m -Xmx1024m -Xss512k -XX:PermSize=32m -XX:MaxPermSize=128m"
 
    # vim access_list.conf  \\定義存取控制清單
    10.0.5.100:no
    10.0.*.*:yes
   
    # vim dbServers.xml    \\定義後端伺服器資訊
    # vim amoeba.xml       \\定義代理資訊
    # vim jvm.properties   \\設定java記憶體配置資訊
    JVM_OPTIONS="-server -Xms256m -Xmx1024m -Xss512k -XX:PermSize=32m -XX:MaxPermSize=128m"
 
    # vim access_list.conf
    10.0.5.100:no
    10.0.*.*:yes

(5)實現資料分割
 # vim rule.xml
   <tableRule name="stu" schema="sxjy" defaultPools="master1,master2">
               <rule name="rule1">
                       <parameters>id</parameters>
                       <expression><![CDATA[ id % 2 == 0 ]]></expression>
                       <defaultPools>master1</defaultPools>
                       <readPools>slave1</readPools>
                       <writePools>master1</writePools>
               </rule>
               
               <rule name="rule2">
                       <parameters>id</parameters>
                       <expression><![CDATA[ id % 2 == 1 ]]></expression>
                       <defaultPools>master2</defaultPools>
                       <writePools>master2</writePools>
                       <readPools>slave2</readPools>
               </rule>
   
    </tableRule>
 
   
   垂直分割
 <tableRUle name="user_info" schema="blog" defaultPools="master1" />
 <tableRUle name="user_info" schema="webchat" defaultPools="master2" />

本文出自 “kenasel” 部落格,請務必保留此出處http://kenasel.blog.51cto.com/10620829/1839523

mysql讀寫分離

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.