1. 程式人生 > >基於amoeba實現MySQL讀寫分離

基於amoeba實現MySQL讀寫分離

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

server use ip
master mysql主 192.168.0.172
slave mysql從 192.168.0.173
amoeba 將使用者請求代理至mysqlserver 192.168.0.176

一、mysql伺服器基於GTID主從複製的實現
1、配置主從節點的服務配置檔案
master節點:

[[email protected] ~]# cat /etc/my.cnf |grep "^\s*[^#\t]*s"
[mysqld] sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES basedir = /usr/local/mysql log-bin=master-bin log-slave-updates=true master-info-repository=TABLE relay-log-info-repository=TABLE sync-master-info=1 slave-parallel-workers=2 binlog-checksum=CRC32 master-verify-checksum=1 slave-sql-verify-checksum=1
binlog-rows-query-log_events=1 server-id=1 socket=/tmp/mysql.sock

slave節點:

[[email protected] data]# cat /etc/my.cnf |grep "^\s*[^#\t]*s"
[mysqld]
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES 
basedir = /usr/local/mysql
log-slave-updates=true
master-info-repository=TABLE
relay-log-info-repository=TABLE
sync-master-info=1
slave-parallel-workers=2 binlog-checksum=CRC32 master-verify-checksum=1 slave-sql-verify-checksum=1 binlog-rows-query-log_events=1 server-id=11 log-bin=mysql-bin.log socket=/tmp/mysql.sock

2、master建立複製使用者

mysql> grant replication slave on *.* to [email protected] identified by 'syncpass';
mysql> show global variables like '%uuid%'\G
*************************** 1. row ***************************
Variable_name: server_uuid
        Value: 9652c294-25d4-11e6-898b-000c2919c9d0
mysql> show master status\G
*************************** 1. row ***************************
             File: master-bin.000001
         Position: 151
     Binlog_Do_DB: 
 Binlog_Ignore_DB: 
Executed_Gtid_Set: 
1 row in set (0.00 sec)

3、slave啟動複製執行緒

mysql>  change master to master_host='192.168.0.172',master_user='dbsync',master_password='syncpass',master_auto_position=1;
mysql> show global variables like '%uuid%'\G
*************************** 1. row ***************************
Variable_name: server_uuid
        Value: 997046fa-5b8e-11e6-a7e2-000c2919c9d0
mysql> start slave;
mysql> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.0.172
                  Master_User: dbsync
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: master-bin.000001
          Read_Master_Log_Pos: 151
               Relay_Log_File: slave-relay-bin.000002
                Relay_Log_Pos: 363
        Relay_Master_Log_File: master-bin.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   Last_Errno: 0
                   Last_Error: 
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 151
              Relay_Log_Space: 567
              Until_Condition: None
               Until_Log_File: 
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File: 
           Master_SSL_CA_Path: 
              Master_SSL_Cert: 
            Master_SSL_Cipher: 
               Master_SSL_Key: 
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 0
               Last_SQL_Error: 
  Replicate_Ignore_Server_Ids: 
             Master_Server_Id: 1
                  Master_UUID: 9652c294-25d4-11e6-898b-000c2919c9d0
             Master_Info_File: mysql.slave_master_info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it
           Master_Retry_Count: 86400
                  Master_Bind: 
      Last_IO_Error_Timestamp: 
     Last_SQL_Error_Timestamp: 
               Master_SSL_Crl: 
           Master_SSL_Crlpath: 
           Retrieved_Gtid_Set: 
            Executed_Gtid_Set: 
                Auto_Position: 1

3、建立一個測試書庫庫檢視MySQLmaster程序,顯示已經發送二進位制日誌給salve

mysql> create database reliacatedb;
mysql> show processlist\G
*************************** 1. row ***************************
     Id: 1
   User: root
   Host: localhost
     db: NULL
Command: Query
   Time: 0
  State: init
   Info: show processlist
*************************** 2. row ***************************
     Id: 3
   User: dbsync
   Host: slave:33608
     db: NULL
Command: Binlog Dump GTID
   Time: 259
  State: Master has sent all binlog to slave; waiting for binlog to be updated
   Info: NULL

二、amoeba節點安裝配置
1、配置java環境

# yum install -y java-1.6.0-openjdk
# vim /etc/profile.d/jdk.sh 
export JAVA_HOME=/usr/
export PATH=$PATH:$JAVA_HOME/bin
# source /etc/profile.d/jdk.sh 
# wget https://sourceforge.net/projects/amoeba/files/Amoeba%20for%20mysql/2.2.x/amoeba-mysql-binary-2.2.0.tar.gz/download
# mkdir !$
mkdir /usr/local/amoeba-2.2.0
# tar xvf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba-2.2.0

3、修改ameoba配置檔案
amoeba前端訪問配置

# vim /usr/local/amoeba-2.2.0/conf/amoeba.xml
 <property name="port">3306</property> # 將預設埠8066改為3306,便於實現前端程式連線資料庫的透明性
 <property name="ipAddress">0.0.0.0</property> # 有多塊網絡卡時可按此設定,表示繫結任意地址,即amoeba對外訪問的IP地址
 <property name="user">root</property> # 客戶端連線amoeba的代理使用的使用者 
 <property name="password">mypass</property> # 客戶端連線amoeba的代理使用的密碼
 <property name="defaultPool">master</property> # 預設訪問節點
 <property name="writePool">master</property>
 <property name="readPool">slave</property>
 # 讀寫分離配置,讀池和寫池和dbServer.xml中配置的節點相關

4、amoeba後端代理配置

# vim /usr/local/amoeba-2.2.0/conf/dbServers.xml
<property name="user">root</property> # 預設連線mysql server的使用者
<property name="password">pass</property> # 預設連線mysql server的密碼,以上兩項如不在下文中的dbserver中單獨定義,則直接繼承此處定義
  <dbServer name="master"  parent="abstractServer">
                <factoryConfig>
  <property name="ipAddress">192.168.0.172</property>
                </factoryConfig>
  </dbServer>

  <dbServer name="slave"  parent="abstractServer">
                <factoryConfig>
  <property name="ipAddress">192.168.0.173</property>
                </factoryConfig>
  </dbServer>

  <dbServer name="multiPool" virtual="true"> #服務組,輪詢策略
           <poolConfig   class="com.meidusa.amoeba.server.MultipleServerPool">
<!-- Load balancing strategy: 1=ROUNDROBIN , 2=WEIGHTBASED , 3=HA-->
 <property name="loadbalance">1</property>
  <!-- Separated by commas,such as: server1,server2,server1 -->
  <property name="poolNames">master,slave,slave,slave</property>
                </poolConfig>
        </dbServer>

5、環境變數配置

# vim /etc/profile.d/amoeba.sh 
export AMOEBA_HOME=/usr/local/amoeba-2.2.0/
export PATH=$AMOEBA_HOME/bin/:$PATH
source /etc/profile.d/amoeba.sh

6、啟動amoeba

# amoeba start
The stack size specified is too small, Specify at least 160k
Could not create the Java virtual machine.
如果報以上錯誤,需編輯二進位制指令碼
# vim /usr/local/amoeba-2.2.0/bin/amoeba
DEFAULT_OPTS="-server -Xms256m -Xmx256m -Xss128k"
修改為如下
DEFAULT_OPTS="-server -Xms256m -Xmx256m -Xss256k"

7、通過amoeba連線mysql
這裡寫圖片描述
執行一些讀寫操作,在兩臺mysql伺服器上使用tcpdump抓包

[root@master ~]# tcpdump -i eth0 -s0 -nn -A tcp dst port 3306 and dst host 192.168.0.172
[root@slave ~]# tcpdump -i eth0 -s0 -nn -A tcp dst port 3306 and dst host 192.168.0.173

master上實現寫操作
這裡寫圖片描述
slave上實現讀操作
這裡寫圖片描述

相關推薦

基於amoeba實現MySQL分離

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

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請求發送到特定的數據庫上運行

Amoeba實現mysql分離

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

mycat實現MySQL分離

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

使用Spring AOP實現MySQL分離

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

實現MySQL分離MySQL性能調優

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

安裝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

amoeba搭建mysql分離

實驗環境5臺centos7 amoeba192.168.10.1, master192.168.10.10, slave1192.168.10.20, slave2192.168.10.21, client192.168.10.100, 用到的軟體a

通過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並配置

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

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

使用mycat實現mysql分離

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

thinkphp框架實現mysql分離

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

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

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

windows實現mysql分離

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

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

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

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

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

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

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