常見的讀寫分離方案:
1)Amoeba讀寫分離
2)MySQL-Proxy讀寫分離
3)基於程序讀寫分離(效率很高,實施難度大,開發改代碼)php
2)原理 web 訪問數據庫,經過proxy4040端口做爲轉發到真實數據庫3306端口 mysql
wget http://ftp.ntu.edu.tw/pub/MySQL/Downloads/MySQL-Proxy/mysql-proxy-0.8.4-linux-el6-x86-64bit.tar.gz linux
useradd -r mysql-proxy 建立用戶 web
tar zxvf mysql-proxy-0.8.4-linux-el6-x86-64bit.tar.gz -C /usr/localsql
mv /usr/local/mysql-proxy-0.8.4-linux-el6-x86-64bit /usr/local/mysql-proxy 數據庫
vi在/etc/profile中加入以下語句:
export PATH=$PATH:/usr/local/mysql-proxy/bin/ 設爲環境變量 apache
source /etc/profile 加載變量 後端
Mysql-proxy的相關參數以下:
--help-all :獲取所有幫助信息;
--proxy-address=host:port :代理服務監聽的地址和端口;
--admin-address=host:port :管理模塊監聽的地址和端口;
--proxy-backend-addresses=host:port :後端mysql服務器的地址和端口;
--proxy-read-only-backend-addresses=host:port :後端只讀mysql服務器的地址和端口;
--proxy-lua-script=file_name :完成mysql代理功能的Lua腳本;
--daemon :以守護進程模式啓動mysql-proxy;
--keepalive :在mysql-proxy崩潰時嘗試重啓之;
--log-file=/path/to/log_file_name :日誌文件名稱;
--log-level=level :日誌級別;
--log-use-syslog :基於syslog記錄日誌;
--plugins=plugin:在mysql-proxy啓動時加載的插件;
--user=user_name :運行mysql-proxy進程的用戶;
--defaults-file=/path/to/conf_file_name : 默認使用的配置文件路徑;其配置段使用[mysql-proxy]標識;
--proxy-skip-profiling : 禁用profile;
--pid-file=/path/to/pid_file_name :進程文件名;服務器
mysql-proxy --daemon --log-level=debug --user=mysql-proxy --keepalive --log-file=/var/log/mysql-proxy.log --plugins="proxy" --proxy-backend-addresses="192.168.10.128:3306" --proxy-read-only-backend-addresses="192.168.10.130:3306" --proxy-lua-script="/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua" --plugins=admin --admin-username="admin" --admin-password="admin" --admin-lua-script="/usr/local/mysql-proxy/lib/mysql-proxy/lua/admin.lua" 測試
netstat -tlun
4040是proxy端口;4041是管理端口
mysql -h192.168.10.129 -uadmin -p -P4041 IP爲安裝proxy的機子
select * from backends; 查看狀態
mysql -h192.168.10.129 -uxian -p -P4040 數據寫入測試 ( WEB鏈接數據庫改成proxy代理IP 改web服務器發佈目錄PHP配置文件爲4040端口 /usr/local/apache2/htdocs/upload/config/config_global.php與config_ucenter.php 改www.service.com:4040 同時修改WEB服務器/etc/hosts爲代理IP 192.168.10.129 www.service.com 主從數據庫都要對proxy的IP進行受權)