天天看點

使用mysql-proxy軟體實作mysql讀寫分離

                            使用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