Amoeba for MySQL 是一款基於 MySQL 協議的分布式資料庫代理中間件,座落於應用與 DB 之間,對應用透明,提供讀寫分離、負載均衡、高可用、SQL 路由、分片等能力。本文以 CentOS 6.8 + MySQL 5.1.73 為環境,完整記錄主從搭建、Amoeba 安裝配置、啟動排錯、功能驗證全過程。
| 角色 | IP | 說明 |
|---|---|---|
| Master DB | 172.16.2.239 | 寫入主庫 |
| Slave DB | 172.16.2.230 | 讀取從庫 |
| Amoeba Proxy | 172.16.2.231 | 代理入口,監聽 8066 |
# /etc/my.cnf
[mysqld]
server-id = 1
log-bin = master_bin
replicate-ignore-db = mysql,test,information_schema
GRANT REPLICATION SLAVE ON *.* TO 'root'@'172.16.2.230' IDENTIFIED BY '123456';SHOW MASTER STATUS 輸出的 File 與 Position# /etc/my.cnf
[mysqld]
server-id = 2
relay-log = relay-bin
mysql -uroot -p123456 -h 172.16.2.239SLAVE STOP;
CHANGE MASTER TO MASTER_HOST='172.16.2.239', MASTER_USER='root', MASTER_PASSWORD='123456', MASTER_LOG_FILE='master_bin.000019', MASTER_LOG_POS=106;
SLAVE START;
SHOW SLAVE STATUS\G -- 確認 Slave_IO_Running & Slave_SQL_Running 均為 Yes
yum -y install java-1.6.0-openjdk
# 配置 /etc/profile
export JAVA_HOME=/usr/lib/jvm/java-1.6.0-openjdk
export PATH=$JAVA_HOME/bin:$PATH
source /etc/profile
java -version # 驗證
wget https://sourceforge.net/projects/amoeba/files/Amoeba_for_mysql/2.2.x/amoeba-mysql-binary-2.2.0.tar.gz/download
mkdir /usr/local/amoeba-2.2.0
tar xvf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba-2.2.0
<dbServer name="master" host="172.16.2.239" port="3306" user="root" password="123456" schema="test"/>
<dbServer name="slave" host="172.16.2.230" port="3306" user="root" password="123456" schema="test"/>
<proxy>
<service name="amoeba-mysql" port="8066" user="root" password="123456"/>
<factory className="com.meidusa.amoeba.mysql.net.MysqlServerConnectionFactory">
<property name="manager">defaultManager</property>
</factory>
</proxy>
<pool name="defaultPool" ... /> -- DDL 等非增刪改查語句
<pool name="writePool" server="master" /> -- 寫操作路由至 Master
<pool name="readPool" server="slave" weight="3" /> -- 讀操作路由至 Slave,權重 1:3
LRUMapSize:SQL 解析緩存條數writePool 綁定 Master,readPool 綁定 Slave 並可配置多節點權重# /etc/profile.d/amoeba.sh
export AMOEBA_HOME=/usr/local/amoeba-2.2.0
export PATH=$AMOEBA_HOME/bin:$PATH
啟動報錯 The stack size specified is too small,修改 bin/amoeba:
DEFAULT_OPTS="-server -Xms256m -Xmx256m -Xss256k" # 原 128k 改 256k
amoeba start
# 連接代理
mysql -uroot -p123456 -h 172.16.2.231 -P8066
SLAVE STOP 停止同步 → Amoeba 執行 INSERT → 僅 Master 有數據server-id 唯一、schema 名稱一致、weight 比例合理$AMOEBA_HOME/logs/ 下查看詳細錯誤堆棧Amoeba 實現了應用零代碼改造的讀寫分離,但項目已停止維護(最後更新 2013 年),生產環境建議考慮更現代的替代方案:
若維護舊系統必須用 Amoeba,請做好單點故障預案(部署雙 Amoeba + Keepalived/VIP),並嚴格控制 SQL 複雜度,避免不支援語法導致代理報錯。