Amoeba實現mysql讀寫分離

環境:參看“http://469952080.blog.51cto.com/8311493/1694613”


mysql寫服務器A:192.168.1.121

mysql讀服務器B:192.168.1.124

Amoeba服務器C:192.168.1.120


1、保證服務器A和服務器B的mysql服務器可以正常的運行

2、服務器A和服務器B分別授權給Amoeba可以訪問其對應數據庫

wKiom1Yt4AbBYfMxAAFeWm95ES4991.jpg


3、安裝Amoeba

1)java環境安裝

Amoeba框架是基於Java SE1.5開發的,建議使用Java SE 1.5版本。目前Amoeba經驗證在JavaTM SE 1.5和Java SE 1.6能正常運行。

Java SE 1.6下載地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk-6u32-downloads-1594644.html

下載完成後執行sh jdk-6u32-linux-i586-rpm.bin開始安裝,將會安裝到/usr/java/jdk1.6.0_32目錄。


4、Amoeba安裝

mkdir /usr/local/amoeba 

tar xzf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba

配置用戶環境變量

vi ~/.bash_profile

PATH=$PATH:$HOME/bin:/usr/local/amoeba/bin

JAVA_HOME=/usr/java/jdk1.6.0_32

export JAVA_HOME

export PATH


source  ~/.bash_profile  #設置的變量立即生效


5、Amoeba for mysql配置(兩臺服務器的設置)

配置Amoeba for mysql的讀寫分離主要涉及兩個文件:

1)/usr/local/amoeba/conf/dbServers.xml


 #設置連接後臺數據庫信息

<dbServer name="abstractServer1" abstractive="true">      

           <factoryConfig>

                        <!-- mysql port -->

                        <property name="port">3306</property>  #連接後端mysql服務器端口

                        <!-- mysql schema -->

                        <property name="schema">jiang</property> #連接的數據庫

                        <!-- mysql user -->

                        <property name="user">proxyuser</property> #連接的用戶

                        <!--  mysql password -->

                        <property name="password">jiang</property> #連接的密碼

            </factoryConfig>

 </dbServer>

<dbServer name="abstractServer2" abstractive="true">       #可以根據實際情況添加<dbServer>

               <factoryConfig>

                        <!-- mysql port -->

                        <property name="port">3306</property>

                        <!-- mysql schema -->

                        <property name="schema">jiang</property>

                        <!-- mysql user -->

                        <property name="user">proxyuser</property>

                        <!--  mysql password -->

                        <property name="password">jiang</property>

                </factoryConfig>

 </dbServer>


#連接的數據庫IP地址

 <dbServer name="server1"  parent="abstractServer1">   

                <factoryConfig>

                        <!-- mysql ip -->

                        <property name="ipAddress">192.168.1.121</property>

                </factoryConfig>

        </dbServer>


  <dbServer name="server2"  parent="abstractServer2">

                <factoryConfig>

                        <!-- mysql ip -->

                        <property name="ipAddress">192.168.1.124</property>

                </factoryConfig>

   </dbServer>


#定義dbpool,可以保護多個數據庫,方便在設置讀寫的數據


 <dbServer name="master" virtual="true">

                <poolConfig class="com.meidusa.amoeba.server.MultipleServerPool">

                     <!-- Load balancing strategy: 1=ROUNDROBIN , 2=WEIGHTBASED , 3=HA-->

                     #負載的調度算法

                        <property name="loadbalance">1</property>

                        <!-- Separated by commas,such as: server1,server2,server1 -->

                        <property name="poolNames">server1</property> #可以添加多個數據庫

                </poolConfig>

        </dbServer>


        <dbServer name="slave" virtual="true">

                <poolConfig class="com.meidusa.amoeba.server.MultipleServerPool">

                       <!-- Load balancing strategy: 1=ROUNDROBIN , 2=WEIGHTBASED , 3=HA-->

                        <property name="loadbalance">1</property>

                        <!-- Separated by commas,such as: server1,server2,server1 -->

                        <property name="poolNames">server2</property>

                </poolConfig>

        </dbServer>


2)/usr/local/amoeba/conf/amoeba.xml


找到入下幾項進行修改

<property name="port">8806</property>       #設置amobea登陸端口

<property name="user">root</property>       #登陸的用戶名

<property name="password">jiang</property>  #登陸密碼


修改如下幾項,設置讀寫數據庫,數據下的參數設置,與dbServers.xml有關

 <property name="defaultPool">master</property>

 <property name="writePool">master</property>

 <property name="readPool">slave</property>



6、測試使用的數據庫爲jiang,其內容如下

192.168.1.121數據庫信息

mysql> use jiang;

mysql> select * from personal_info;

+-------+---------------+--------------+----------+---------------------+

| pi_id | pi_name       | pi_tel       | pi_qq    | pi_email            |

+-------+---------------+--------------+----------+---------------------+

|     1 | 192.168.1.121 | 1586544556   | 42423423 | [email protected]  |

|     2 | mysqlproxy    | 111111111111 | 22222222 | [email protected] |

+-------+---------------+--------------+----------+---------------------+

192.168.1.124數據庫信息

mysql> use jiang;

mysql> select * from personal_info;

+-------+---------------+------------+----------+--------------------+

| pi_id | pi_name       | pi_tel     | pi_qq    | pi_email           |

+-------+---------------+------------+----------+--------------------+

|     1 | 192.168.1.124 | 1586544556 | 42423423 | [email protected] |

+-------+---------------+------------+----------+--------------------+


執行遠程連接 

[root@amoeba bin]# ./amoeba start &             #啓動amoeba

mysql -uroot -pjiang -h 192.168.1.120 -P 8806   #遠程連接amoeba

#查詢數據庫信息

mysql> show databases;

+--------------------+

| Database           |

+--------------------+

| information_schema |

| jiang              |

| test               |

+--------------------+


mysql> use jiang ;

mysql> select * from personal_info;       #讀取的數據爲192.168.1.124上的數據

+-------+---------------+------------+----------+--------------------+

| pi_id | pi_name       | pi_tel     | pi_qq    | pi_email           |

+-------+---------------+------------+----------+--------------------+

|     1 | 192.168.1.124 | 1586544556 | 42423423 | [email protected] |

+-------+---------------+------------+----------+--------------------+


接下來,插入數據

mysql>insert into personal_info values(3,'amoeba','amoebatest',44333333,'[email protected]');


再次查看,還是沒有插入的數據,其原因在於select執行的是讀操作,所以一直會讀取192.168.1.124上的數據,而寫數據(insert,update,delete)都在192.168.1.121上。所以查看不了數據

mysql> use jiang;

mysql> select * from personal_info;

+-------+---------------+------------+----------+--------------------+

| pi_id | pi_name       | pi_tel     | pi_qq    | pi_email           |

+-------+---------------+------------+----------+--------------------+

|     1 | 192.168.1.124 | 1586544556 | 42423423 | [email protected] |

+-------+---------------+------------+----------+--------------------+


接下來,直接登錄192.168.1.121查看數據是否發生了變化。如下所示,就可以看見插入的數據。


mysql> use jiang;

mysql> select * from personal_info;

+-------+---------------+--------------+----------+---------------------+

| pi_id | pi_name       | pi_tel       | pi_qq    | pi_email            |

+-------+---------------+--------------+----------+---------------------+

|     1 | 192.168.1.121 | 1586544556   | 42423423 | [email protected]  |

|     2 | mysqlproxy    | 111111111111 | 22222222 | [email protected] |

|     3 | amoeba        | amoebatest   | 44333333 | [email protected]     |

+-------+---------------+--------------+----------+---------------------+


總結:如上所示,就完成了讀寫分離,那麼在現實環境中,肯定要保障兩臺數據庫的數據同步。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章