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程式碼- server-id = 1 #主資料庫標誌
- # 增加 日誌檔案, 用於驗證讀寫分離
- log = /home/mysql/mysql/log/mysql.log
slave1.cnf
Cnf程式碼- server-id = 2
- # 增加 日誌檔案, 用於驗證讀寫分離
- log = /home/mysql/mysql/log/mysql.log
slave2.cnf
Cnf程式碼- server-id = 3
- # 增加 日誌檔案, 用於驗證讀寫分離
-
log = /home/mysql/mysql/log/mysql.log
b. Master 中 建立兩個 只讀許可權 的使用者。 使用者名稱均為:repl_user 密碼均為:copy 分別開放給 slave1, slave2
Sql程式碼- mysql> grant replication slave on *.* to [email protected] identified by 'copy';
- mysql> grant replication slave on *.* to [email protected] identified by 'copy';
c. 檢視 Master 資訊
Sql程式碼- mysql> show master status;
- +------------------+----------+--------------+------------------+
- | File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
- +------------------+----------+--------------+------------------+
- | mysql-bin.000017 | 2009 | | |
- +------------------+----------+--------------+------------------+
- 1 row in set (0.00 sec)
d. Slave1 ,Slave2 中 啟動 Master - Slave 複製功能。
分別執行以下命令
Sql程式碼- mysql> slave stop;
- Query OK, 0 rows affected (0.02 sec)
- mysql> change master to
- -> master_host='192.168.14.131',
- -> master_user='repl_user',
- -> master_password='copy',
- -> master_log_file='mysql-bin.000017',
- -> master_log_pos=2009;
- Query OK, 0 rows affected (0.03 sec)
- mysql> start slave;
- Query OK, 0 rows affected (0.00 sec)
2. Amoeba 讀寫分離的配置
a. Master , Slave1 ,Slave2 中開放許可權給 Amoeba 訪問。
在 Master , Slave1 , Slave2 中分別執行
Sql程式碼- mysql> grant all on test.* to [email protected] indentified by '1234';
Amoeba 訪問三個資料庫的賬號密碼相同。
b. 修改 Amoeba 的配置檔案
dbServer.xml
Xml程式碼- <?xml version="1.0" encoding="gbk"?>
- <!DOCTYPE amoeba:dbServers SYSTEM "dbserver.dtd">
- <amoeba:dbServers xmlns:amoeba="http://amoeba.meidusa.com/">
- <!--
- Each dbServer needs to be configured into a Pool,
- If you need to configure multiple dbServer with load balancing that can be simplified by the following configuration:
- add attribute with name virtual = "true" in dbServer, but the configuration does not allow the element with name factoryConfig
- such as 'multiPool' dbServer
- -->
- <!-- 資料庫連線配置的公共部分 -->
- <dbServer name="abstractServer" abstractive="true">
- <factoryConfig class="com.meidusa.amoeba.mysql.net.MysqlServerConnectionFactory">
- <property name="manager">${defaultManager}</property>
- <property name="sendBufferSize">64</property>
- <property name="receiveBufferSize">128</property>
- <!-- mysql port -->
- <property name="port">3306</property>
- <!-- mysql schema -->
- <property name="schema">test</property>
- <!-- mysql user -->
- <property name="user">test_user</property>
- <!-- mysql password -->
- <property name="password">1234</property>
- </factoryConfig>
- <poolConfig class="com.meidusa.amoeba.net.poolable.PoolableObjectPool">
- <property name="maxActive">500</property>
- <property name="maxIdle">500</property>