1. 程式人生 > >Mysql 分散式叢集 主從同步 讀寫分離 amoeba 中介軟體配置

Mysql 分散式叢集 主從同步 讀寫分離 amoeba 中介軟體配置

首先說明一下amoeba 跟 MySQL proxy在讀寫分離的使用上面的區別:

在MySQL proxy 6.0版本 上面如果想要讀寫分離並且 讀叢集、寫叢集 機器比較多情況下,用mysql proxy 需要相當大的工作量,目前mysql proxy沒有現成的 lua指令碼。mysql proxy根本沒有配置檔案, lua指令碼就是它的全部,當然lua是相當方便的。那麼同樣這種東西需要編寫大量的指令碼才能完成一 個複雜的配置。而Amoeba只需要進行相關的配置就可以滿足需求。



 

假設有這樣的使用場景,有三個資料庫節點分別命名為Master、Slave1、Slave2如下:

Amoeba: Amoeba <192.168.14.129>

Master: Master <192.168.14.131> (可讀寫)

Slaves:Slave1 <192.168.14.132>、Slave2<192.168.14.133> (2個平等的資料庫。只讀/負載均衡)

在 主從資料庫 的複製的部分, 任然需要使用資料庫自己的複製機制。 Amoeba 不提供複製功能。

1. 起動資料庫的主從複製功能。

a. 修改配置檔案

master.cnf

Cnf程式碼  收藏程式碼
  1. server-id = 1 #主資料庫標誌  
  2. # 增加 日誌檔案, 用於驗證讀寫分離  
  3. log = /home/mysql/mysql/log/mysql.log  

slave1.cnf

Cnf程式碼  收藏程式碼
  1. server-id = 2  
  2. # 增加 日誌檔案, 用於驗證讀寫分離  
  3. log = /home/mysql/mysql/log/mysql.log  

slave2.cnf

Cnf程式碼  收藏程式碼
  1. server-id = 3  
  2. # 增加 日誌檔案, 用於驗證讀寫分離  
  3. log = /home/mysql/mysql/log/mysql.log  

b. Master 中 建立兩個 只讀許可權 的使用者。 使用者名稱均為:repl_user   密碼均為:copy  分別開放給 slave1, slave2

Sql程式碼  收藏程式碼
  1. mysql> grant replication slave on *.* to [email protected] identified by 'copy';  
  2. mysql> grant replication slave on *.* to [email protected] identified by 'copy';  

c. 檢視 Master 資訊

Sql程式碼  收藏程式碼
  1. mysql> show master status;  
  2. +------------------+----------+--------------+------------------+  
  3. | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |  
  4. +------------------+----------+--------------+------------------+  
  5. | mysql-bin.000017 |     2009 |              |                  |  
  6. +------------------+----------+--------------+------------------+  
  7. 1 row in set (0.00 sec)  

d. Slave1 ,Slave2 中 啟動 Master - Slave 複製功能。

分別執行以下命令

Sql程式碼  收藏程式碼
  1. mysql> slave stop;  
  2. Query OK, 0 rows affected (0.02 sec)  
  3. mysql> change master to  
  4.     -> master_host='192.168.14.131',  
  5.     -> master_user='repl_user',  
  6.     -> master_password='copy',  
  7.     -> master_log_file='mysql-bin.000017',  
  8.     -> master_log_pos=2009;  
  9. Query OK, 0 rows affected (0.03 sec)  
  10. mysql> start slave;  
  11. Query OK, 0 rows affected (0.00 sec)  

2. Amoeba 讀寫分離的配置

a. Master , Slave1 ,Slave2 中開放許可權給 Amoeba 訪問。

在 Master , Slave1 , Slave2 中分別執行

Sql程式碼  收藏程式碼
  1. mysql> grant all on test.* to [email protected] indentified by '1234';  

Amoeba 訪問三個資料庫的賬號密碼相同。

b. 修改 Amoeba 的配置檔案

dbServer.xml

Xml程式碼  收藏程式碼
  1. <?xml version="1.0" encoding="gbk"?>  
  2. <!DOCTYPE amoeba:dbServers SYSTEM "dbserver.dtd">  
  3. <amoeba:dbServers xmlns:amoeba="http://amoeba.meidusa.com/">  
  4.         <!--   
  5.             Each dbServer needs to be configured into a Pool,  
  6.             If you need to configure multiple dbServer with load balancing that can be simplified by the following configuration:  
  7.              add attribute with name virtual = "true" in dbServer, but the configuration does not allow the element with name factoryConfig  
  8.              such as 'multiPool' dbServer     
  9.         -->  
  10.     <!-- 資料庫連線配置的公共部分 -->   
  11.     <dbServer name="abstractServer" abstractive="true">  
  12.         <factoryConfig class="com.meidusa.amoeba.mysql.net.MysqlServerConnectionFactory">  
  13.             <property name="manager">${defaultManager}</property>  
  14.             <property name="sendBufferSize">64</property>  
  15.             <property name="receiveBufferSize">128</property>  
  16.             <!-- mysql port -->  
  17.             <property name="port">3306</property>  
  18.             <!-- mysql schema -->  
  19.             <property name="schema">test</property>  
  20.             <!-- mysql user -->  
  21.             <property name="user">test_user</property>  
  22.             <!--  mysql password -->  
  23.             <property name="password">1234</property>  
  24.         </factoryConfig>  
  25.         <poolConfig class="com.meidusa.amoeba.net.poolable.PoolableObjectPool">  
  26.             <property name="maxActive">500</property>  
  27.             <property name="maxIdle">500</property>  
  28.