首页 > 代码库 > mysql基于amoeba的读写分离

mysql基于amoeba的读写分离

如何实现mysql读写分离 :                                                                        

通常来说有两种方式:                      master<--->master  (前读,后写)                                                                          |  

1,应用程序层实现                                                                                                                                   /\

2,中间件层实现                                                                                                                                 slave slave                    


应用层实现:


应用层实现是指在应用程序内部及连接器中实现读写分离。

例如:

com.mysql.jdbc.replicationdriver

mysqlnd_ms

优点:

程序内部实现读写分离,安装即可使用

减少部署难度。

访问压力在一定级别以下,性能很好。

缺点:

架构一旦调整,代码要更这变, 不够灵活。

难以实现高级应用,如自动分库,分表

无法适用于更大型的应用场景。



中间件层实现:

中间件层实现是指外部中间件程序实现读写分离

mysql-proxy

amoeba

TDDL(TAObao)

CObar(alibaba)

Atlas(qihoo360)

 

优点:

架构设计上更加灵活、

可在程序上实现一些高级控制,failover,流量控制

依靠一些技术可以实现mysql性能提升,如连接池

对业务代码侵入性少

缺点:

需要有一定的开发实力和运维团队的支持



什么是Amoeba?


Amoeba 2008发布的第一款开源框架

amoeba for mysql,致力于mysql分布式数据库代理层

它主要在应用层访问mysql的时候充当sql路由功能,专注于分布式数据库代理层,坐落于client,DBserver之间,对客户端透明

具有负载均衡,高可用,sql过滤,读写分离,可路由相到目标数据库,可并发请求多台数据库合并结果

通过amoeba您能够完成数据源的高可用,负载均衡,数据切换功能,

目前amoeba目前不支持事务


1,安装amoeba基于Java开发,首先安装jdk

2,安装amoeba .

3,配置amoeba 在proxy 代理层的amoeba服务器上

 vim amoeba.xml

<property name="authenticator">

                                <bean class="com.meidusa.amoeba.mysql.server.MysqlClientAuthenticator">


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


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

vim  vim dbServers.xml


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


                        <!-- mysql schema -->

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


                        <!-- mysql user -->

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


                        <!--  mysql password -->

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


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

                <factoryConfig>

                        <!-- mysql ip -->

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

                </factoryConfig>

        </dbServer>


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

                <factoryConfig>

                        <!-- mysql ip -->

                        <property name="ipAd dress">192.168.20.237</property>

                </factoryConfig>

        </dbServer>


4,在后端服务器授权amoeba访问mysql服务器 ,此时授权的是dbServe.xml 里的user

mysql> grant all on rwdb.* to amou@192.168.1.211 identified by ‘123456‘

mysql>flush privileges;


5, vim amoeba.xml


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


                <!-- -->  默认注释,现在打开

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

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

                <!-- -->

                <property name="needParse">true</property>

6,vim  /bin/amoeba


DEFAULT_OPTS="-server -Xms256m -Xmx256m -Xss256k"  将最后的值改为大于160K


7,运行amoeba

cd  /usr/bin/amoeba/bin

./amoeba start &

./amoeba stop


本文出自 “crazy_sir” 博客,请务必保留此出处http://douya.blog.51cto.com/6173221/1607493

mysql基于amoeba的读写分离