環境:參看“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可以訪問其對應數據庫
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] |
+-------+---------------+--------------+----------+---------------------+
總結:如上所示,就完成了讀寫分離,那麼在現實環境中,肯定要保障兩臺數據庫的數據同步。