如何用 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机器中执行

你可能感兴趣的:(mysql,数据库,mysql,for,休闲,amoeba,数据库读写分离)