深度磨练

深度磨练

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

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机器中执行。
阅读更多
个人分类: Amoeba
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭