环境声明:

MySQL读写分离之 Amoeba实现_第1张图片

192.168.0.101 Amoeba

192.168.0.102 Mysql-master

192.168.0.103 Mysql-slave

环境前提1:已经建立主从关系的两台后端数据库

    前提2:

  主服务器授权

grant all on test.* to test@'192.168.0.101' identified by '123456';

  从服务器授权

grant select on test.* to test@'192.168.0.101' identified by '123456';

## 这里的test用户会在amoeba.xml 中进行配置来供客户端连接

  1. 安装jdk  

yum -y install glibc* glibc.i686
wget http://download.oracle.com/otn-pub/java/jdk/6u29-b11/jdk-6u29-linux-i586.bin?AuthParam=1388373434_ccd3a0704be0fed5ea5f8f96ccfeb9db
chmod +x jdk-6u29-linux-i586.bin 
./jdk-6u29-linux-i586.bin 
mv jdk1.6.0_29/ /application/
ln -s /application/jdk1.6.0_29 /application/j2sdk

2. 配置java环境变量

cat >> /etc/profile.d/java.sh << EOF
#for java
export JAVA_HOME="/application/j2sdk"
export CLASS_PATH="$JAVA_HOME/lib:$JAVA_HOME/jre/lib"
export PATH=".:$JAVA_HOME/bin:$PATH"
#CATALINA_HOME="/usr/local/tomcat"
EOF

3.获取amoeba安装包

cd /mnt/tools
wget http://cznic.dl.sourceforge.net/project/amoeba/Amoeba%20for%20mysql/3.x/amoeba-mysql-3.0.5-RC-distribution.zip
unzip amoeba-mysql-3.0.5-RC-distribution.zip
mv amoeba-mysql-3.0.5-RC /application/
ln -s /application/amoeba-mysql-3.0.5-RC /application/amoeba

4. 修改配置文件

Amoeba for MySQL的使用是很简单的,主要是通过xml文件来实现的。

1). 配置文件介绍:

(1) dbServers.xml   Amoeba作为数据库代理层,它一定会和很多数据库保持通信,因此它必须知道由它代理的数据库如何连接,比如最基础的:主机IP、端口、Amoeba使用的用户名和密码等等。这些信息存储在$AMOEBA_HOME/conf/dbServers.xml中。

(2) rule.xml  Amoeba为了完成数据切分提供了完善的切分规则配置,为了了解如何分片数据、如何将数据库返回的数据整合,它必须知道切分规则。与切分规则相关的信息存储在$AMOEBA_HOME/conf/rule.xml中。

(3) functionMap.xml  当我们书写SQL来操作数据库的时候,常常会用到很多不同的数据库函数,比如:UNIX_TIMESTAMP()、SYSDATE()等等。这些函数如何被Amoeba解析呢?$AMOEBA_HOME/conf/functionMap.xml描述了函数名和函数处理的关系。

(4) ruleFunctionMap.xml  对$AMOEBA_HOME/conf/rule.xml进行配置时,会用到一些我们自己定义的函数,比如我们需要对用户ID求HASH值来切分数据,这些函数在$AMOEBA_HOME/conf/ruleFunctionMap.xml中定义。

(5) access_list.conf  Amoeba可以制定一些可访问以及拒绝访问的主机IP地址,这部分配置在$AMOEBA_HOME/conf/access_list.conf中。

(6) log4j.xml  Amoeba允许用户配置输出日志级别以及方式,配置方法使用log4j的文件格式,文件是$AMOEBA_HOME/conf/log4j.xml。

(7)amoeba.xml 客户端连接Amoeba时所绑定的IP地址、端口、用户名和密码。及IP访问限制

其中,我们主要用到dbServer.xml 和 amoeba.xml 。

……

2)修改配置文件dbServer.xml






                
				
        
                
                        ${defaultManager}
                        64
                        128

                        
                        
                        3306

                        
                        
                        test
                        
                        
                        test
                        
                        123456
                

                
                        500
                        500
                        1
                        600000
                        600000
                        true
                        true
                        true
                
        

        
                
                        
                        
                        192.168.0.102
                
        

        
                
                        
                        
                        192.168.0.103
                
        

        
                
                        
                        
                        1
                        
                        
                        server1,server2
                
        

3)修改配置文件amoeba.xml






        

                
                
                        
                        
                        8066

                        
                        

                        
                                
                                        128
                                        64
                                
                        

                        
                                
                                        <-- 对外验证的用户名 -->
                                        root
                                        <-- 对外验证的密码 -->
                                        123456

                                        
                                                
                                                        ${amoeba.home}/conf/access_list.conf
                                                
                                        
                                
                        

                


                

                        
                        128

                        
                        500

                        
                        utf8

                        
                        60
                

        

        
        
                
                        com.meidusa.toolkit.net.AuthingableConnectionManager
                
        

                
        
                ${amoeba.home}/conf/dbServers.xml
        
				
        
                
                        
                                ${amoeba.home}/conf/rule.xml
                                ${amoeba.home}/conf/ruleFunctionMap.xml
                        
                
                ${amoeba.home}/conf/functionMap.xml
                1500
                multiPool

                
                server1
                
                server2
                true
        

5. 启动amoeba

/application/amoeba/bin/launcher &

6. 检查启动结果

[root@shell logs]# netstat -lnt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State      
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      
tcp        0      0 :::22                       :::*                        LISTEN      
tcp        0      0 :::8066                     :::*                        LISTEN

7.客户端连接测试

# 这里拿root用户连接,实际上root账户是由 后端数据库授权的test用户映射而来,这点非常重要!

mysql -u test -P root -h 192.168.0.101 -p123456
mysql> select host,user from mysql.user;  #发现结果是从库的信息
+---------------+------+
| host          | user |
+---------------+------+
| 127.0.0.1     | root |
| 192.168.0.101 | test |
| ::1           | root |
| localhost     | root |
| slave         | root |
+---------------+------+
5 rows in set (0.01 sec)

此时进入数据库之后,进行其他增删改查等变量,查看响应mysql日志,查看执行过程,会发现,读写分离已经OK...