如何用 Amoeba 进行mysql数据库读写分离

http://terryzhang25.blog.163.com/blog/static/1823423132011218015481/

amoeba主要是针对数据切分方面、读写分离、负载均衡、故障恢复。
首先说明一下amoeba 跟 mysql proxy在读写分离的使用上面的区别。
在 mysql proxy 上面如果想要读写分离并且 读集群、写集群 机器比较多情况下,用mysql proxy 需要相当大的工作量,目前mysql proxy没有现成的 lua脚本。mysql proxy根本没有配置文件,lua脚本就是它的全部,当然lua是相当方便的。那么同样这种东西需要编写大量的脚本才能完成一个复杂的配置。 amoeba目标是走产品化这条路。只需要进行相关的配置就可以满足需求。
一、Master/Slave 结构读写分离: 
Master: server1 (可读写) 
slaves:server2、server3、server4(3个平等的数据库。只读/负载均衡) 
amoeba提供读写分离pool相关配置。并且提供负载均衡配置。 
可配置server2、server3、server4形成一个虚拟的 virtualSlave,该配置提供负载均衡、failOver、故障恢复功能 
Xml代码
  
<dbServer name="virtualSlave" virtual="true">  
    <poolConfig>  
        <className>com.meidusa.amoeba.server.MultipleServerPool</className>  
        <!-- 负载均衡参数 1=ROUNDROBIN , 2=WEIGHTBASED -->  
        <property name="loadbalance">1</property>  
                   
        <!-- 参与该pool负载均衡的poolName列表以逗号分割 -->  
        <property name="poolNames">server2,server3,server4</property>  
    </poolConfig>  
</dbServer>  

如果不启用数据切分,那么只需要配置QueryRouter属性 
wirtePool=server1 
readPool=virtualSlave 
<queryRouter>  
    <className>com.meidusa.amoeba.mysql.parser.MysqlQueryRouter</className>  
    <property name="LRUMapSize">1500</property>  
    <property name="defaultPool">server1</property>  
  
    <property name="writePool">server1</property>  
    <property name="readPool">virtualSlave</property>  
  
    <property name="needParse">true</property>  
</queryRouter>  

那么遇到update/insert/delete将 query语句发送到 wirtePool,将 select发送到 readPool机器中执行

猜你喜欢

转载自mw-fang.iteye.com/blog/1727674