使用mysql-proxy軟體實作mysql讀寫分離
實驗環境:
3台readhat 5.4機器。
其中一台做代理服務,其他倆台跑資料庫。
代理機器: proxy 192.168.0.17
可寫資料庫: MASTER 192.168.0.193
可讀資料庫: BACKUP 192.168.0.59
安裝代理軟體
1、準備所需要的軟體包,主要有3個,其中mysql-proxy軟體為lua語言編寫,是以安裝lua工具。
[root@proxy ~]# ls
lua-5.0.2-1.el5.rf.i386.rpm mysql-proxy-0.8.0-linux-rhel5-x86-32bit.tar.gz
lua-devel-5.0.2-1.el5.rf.i386.rpm
[root@proxy ~]# rpm -ivh lua-5.0.2-1.el5.rf.i386.rpm
warning: lua-5.0.2-1.el5.rf.i386.rpm: Header V3 DSA signature: NOKEY, key ID 6b8d79e6
Preparing... ########################################### [100%]
1:lua ########################################### [100%]
[root@proxy ~]# rpm -ivh lua-devel-5.0.2-1.el5.rf.i386.rpm
warning: lua-devel-5.0.2-1.el5.rf.i386.rpm: Header V3 DSA signature: NOKEY, key ID 6b8d79e6
1:lua-devel ########################################### [100%]
将mysql-proxy軟體包減壓到/usr/local/目錄并改名為 proxy
[root@proxy ~]# tar xzf mysql-proxy-0.8.0-linux-rhel5-x86-32bit.tar.gz -C /usr/local/
[root@proxy ~]# cd /usr/local
[root@proxy ~]# mv mysql-proxy-0.8.0-linux-rhel5-x86-32bit/ proxy
這個代理軟體減壓就可以直接用了。
2、開啟其他倆台機器的mysqld服務。
[root@MASTER ~]# service mysqld start
啟動 MySQL: [确定]
[root@MASTER ~]#
[root@BACKUP ~]# service mysqld start
[root@BACKUP ~]#
3、完成後,在MASTER和BACKUP在準備一張表,分别授權一個使用者,檢視實驗效果。
[root@BACKUP ~]# mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.0.77 Source distribution
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> use test ;
Database changed
mysql> create table test(id int);
Query OK, 0 rows affected (0.04 sec)
mysql> grant all on *.* to zhaoyun@'%' identified by '123456';
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges ;
[root@MASTER ~]# mysql
Your MySQL connection id is 2
mysql> use test
mysql> create table test(id int);
Query OK, 0 rows affected (0.02 sec)
mysql> insert into test values(1);
Query OK, 1 row affected (0.00 sec)
現在back資料庫插入一條資料,來檢視實驗效果。
4、準備工作完成,下面配置代理服務。
[root@proxy mysql-proxy]# pwd
/usr/local/proxy/share/doc/mysql-proxy
[root@proxy mysql-proxy]# vi rw-splitting.lua
min_idle_connections = 4, 為了驗證試驗效果将他改成1 .就是當有一個連結的時候,就實作讀寫分離的功能。
# max_idle_connections = 8,
[root@proxy bin]# ./mysql-proxy -P 192.168.0.17:3306 -r 192.168.0.59:3306 -b 192.168.0.193:3306 -s /usr/local/proxy/share/doc/mysql-proxy/rw-splitting.lua
2011-12-09 21:28:39: (critical) chassis-limits.c:81: could not raise RLIMIT_NOFILE to 8192, Invalid argument (22). Current limit still 1024.
-P 指定本機位址端口即代理server
-r 可讀的資料庫伺服器及端口
-b 可寫的資料庫伺服器及端口
-s 執行配置檔案
在第一次執行時會出現檔案限制的資訊。需要修改一下系統參數
使用ulimit指令配置。
[root@proxy bin]# ulimit -n 10240
完成後再次啟動,現在啟動沒有資訊了,将其放在背景運作。後面加&就可以了。
&
代理啟動後會啟動一個端口就是-P指定的
[root@localhost ~]# netstat -antlp |grep 3306
tcp 0 0 192.168.0.17:3306 0.0.0.0:* LISTEN 23560/mysql-proxy
[root@localhost ~]#
5、在用戶端進行測試。
[root@client ~]# mysql -h 192.168.0.59 -uzhaoyun -p123456連接配接後分别對資料表進行讀寫操作,檢視是否能看到讀和寫不在同一個機器。。
在用戶端對資料進行操作時,代理服務會顯示資訊
server default db: test
client default db:
syncronizing
client default db: zhaoyun