Amoeba for mysql 读写分离

馋奶兔 提交于 2019-12-10 15:16:20

        Amoeba(变形虫)项目 http://docs.hexnova.com/amoeba/ ,该开源框架于2008年 开始发布一款 Amoeba for Mysql软件。这个软件致力于MySQL的分布式数据库前端代理层,它主要在应用层访问MySQL的 时候充当SQL路由功能,专注于分布式数据库代理层(Database Proxy)开发。座落与 Client、DB Server(s)之间,对客户端透明。具有负载均衡、高可用性、SQL 过滤、读写分离、可路由相关的到目标数据库、可并发请求多台数据库合并结果。 通过Amoeba你能够完成多数据源的高可用、负载均衡、数据切片的功能,目前Amoeba已在很多 企业的生产线上面使用,但amoeba目前不支持事务。

环境:数据库master服务器 192.168.32.131
数据库slave服务器 192.168.32.132 
amoeba for mysql 192.168.32.130

一、主从配置过程略(见上下文)

二、master 创建读写分离连接用户
mysql > grant all on *.* to 'proxy'@'192.168.32.130' identified by 'proxy'; #从服务器会自动同步

三、amoeba代理服务器 
1、amoeba基于Java开发,首先安装jdk
官网最新jdk wget -c  http://download.oracle.com/otn-pub/java/jdk/8u31-b13/jdk-8u31-linux-i586.rpm
chmod 755 jdk-8u31-linux-i586.rpm
rpm -ivh jdk-8u31-linux-i586.rpm
vim /etc/profile #配置jdk环境变量
# set JAVA declare
JAVA_HOME=/usr/java/jdk1.8.0_31
CLASSPATH=$JAVA_HOME/lib:$JAVA_HOME/jre/lib
PATH=$JAVA_HOME/bin:$PATH
export JAVA_HOME CLASSPATH PATH

. /etc/profile 
java -version #验证版本

2、安装amoeba
官网  http://sourceforge.net/projects/amoeba/files/
mkdir /usr/local/amoeba
unzip -d /usr/local/amoeba/ amoeba-mysql-3.0.5-RC-distribution.zip #解压
cd /usr/local/amoeba/amoeba-mysql-3.0.5-RC/

配置文件:
amoeba.xml #主配置文件
dbServers.xml #后端服务器配置文件
rule.xml #Query路由规则的信息
access_list.conf #访问控制

vim amoeba.xml 
 <property name="port">8066</property>     #监听端口

 <!-- bind ipAddress -->
 <property name="ipAddress">192.168.32.130</property>    #监听IP

<property name="user">amoeba</property>     #连接帐号
<property name="password">amoeba</property> 

<property name="writePool">server2</property>   #定义写组
<property name="readPool">server1</property>    #定义读组



vim conf/dbServers.xml
 <!-- mysql port -->
 <property name="port">3306</property>   #连接后端数据库使用的用户,密码

 <!-- mysql schema -->
 <property name="schema">test</property>  #定义适用数据库
 <property name="schema">testing</property>
 <!-- mysql user -->
 <property name="user">proxy</property>
<property name="password">proxy</property>

 <dbServer name="server1"  parent="abstractServer">    #定义后端2台server信息
                <factoryConfig>
                        <!-- mysql ip -->
                        <property name="ipAddress">192.168.32.131</property>
                </factoryConfig>
        </dbServer>

        <dbServer name="server2"  parent="abstractServer">
                <factoryConfig>
                        <!-- mysql ip -->
                        <property name="ipAddress">192.168.32.132</property>
                </factoryConfig>
        </dbServer>

         <dbServer name="multiPool" 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>



/usr/local/amoeba/amoeba-mysql-3.0.5-RC/bin/launcher & #启动服务

四、客户端连接测试

1、读
关闭master数据库
mysql -h 192.168.32.130 -u amoeba -p -P 8066 #连接amoeba
mysql> show databases; #查询的是slave上的数据库

2、写
mysql -h 192.168.32.130 -u amoeba -p -P 8066
写到master后,slave会自动同步

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!