Mysql 集群Amoeba读写分离

一、概述

Amoeba是一个以MySQL为底层数据存储,并对应用提供MySQL协议接口的proxy。它集中地响应应用的请求,依据用户事先设置的规则,将SQL请求发送到特定的数据库上执行。基于此可以实现负载均衡、读写分离、高可用性等需求。与MySQL官方的MySQL Proxy相比,作者强调的是amoeba配置的方便(基于XML的配置文件,用SQLJEP语法书写规则,比基于lua脚本的MySQL Proxy简单)。

Amoeba相当于一个SQL请求的路由器,目的是为负载均衡、读写分离、高可用性提供机制,而不是完全实现它们。用户需要结合使用MySQL的 Replication等机制来实现副本同步等功能。amoeba对底层数据库连接管理和路由实现也采用了可插拨的机制,第三方可以开发更高级的策略类来替代作者的实现。这个程序总体上比较符合KISS原则的思想。

二、实现原理

客户端连接由amoeba代理的mysql集群,实现读写分离,写操作由一台master负责,读操作由多个slave负载均衡决定,这样大量访问都会集中到多个slave上,而不会影响master写的性能,在内部有写给master的数据会自动同步到多个slave上。这里需要master授权给amoeba登录来进行写操作,还要授权给slave可以同步数据。每个slave需要授权给amoeba来进行读操作,同时amoeba还会负载均衡来协调这些slave主机,原理如下图。

Mysql 集群Amoeba读写分离_第1张图片

企业里典型的架构就是多台web服务器访问多台mysql服务器,在mysql集群上再实现主从分离,即使其中的单台mysql服务器挂了,amoeba也会选择其他的mysql服务器继续服务,master相对而言压力不算太大,master的数据可以同步到其他的slave上

Mysql 集群Amoeba读写分离_第2张图片

三、实验环境

实验至少需要2台安装mysql的虚拟机,本实验为保证实验效果,能清楚演示工作原理,分开装需要的软件

操作系统:rhel6.4  64位

主机名 IP 安装软件
amoeba 192.168.111.141 jdk-7u40-linux-x64.tar.gz,amoeba-mysql-1.3.1-BETA.zip
master 192.168.111.142 mysql-5.1.73
slave1 192.168.111.143 mysql-5.1.73


四、master、slave1授权给amoeba

在master、slave1上给amoeba授权,用户客户端提交给amoeba的请求处理后提交到对应的mysql上,需要能登录到mysql的权限

mysql>grant all privileges on *.* to amoeba@'%' identified by 'amoeba';

在master上操作,开放一个登录名zcfz,密码zcfz的给slave登录主从复制帐号

mysql>grant all privileges on *.* to zcfz@'%' identified by 'zcfz';
mysql>show master status;

Mysql 集群Amoeba读写分离_第3张图片

然后在slave1上操作,slave1和slave2作为从机登录到master上复制数据,实现主从复制

mysql>change master to master_host='192.168.111.142',master_user='zcfz',master_password='zcfz',master_log_file='mysql-bin.000004',master_log_pos=9003;
mysql>start slave;
mysql>show slave status\G;

Mysql 集群Amoeba读写分离_第4张图片


五、amoeba机安装amoeba

amoeba基于JDK运行的,需要事先安装JDK

amoeba官网下载

https://sourceforge.net/projects/amoeba/files/Amoeba for mysql/

https://sourceforge.net/projects/amoeba/files/Amoeba for mysql/amoeba-mysql-1.3.1-BETA.zip/download


[root@amoeba ~]# mkdir /usr/local/amoeba       

[root@amoeba ~]# unzip amoeba-mysql-1.3.1-BETA.zip -d /usr/local/amoeba

[root@amoeba ~]# chmod -R +x /usr/local/amoeba/bin/

 
  

 
  

 
  

六、amoeba配置

amoeba的配置都是修改安装目录下的xml文件的,mysql的读写分离主要配置/usr/local/amoeba/conf/amoeba.xml文件

vim /usr/local/amoeba/conf/amoeba.xml






	
		
		8066
		
		
		

		
		20
		
		
		30
		
		
		30
		
		
		128
		
		
		true
		
		
		amoeba              
		
		
		
		amoeba          
		
		
		
		60
	
	
	
	
		
			com.meidusa.amoeba.net.AuthingableConnectionManager
			
			
		
	
	
	
		
		
			
			
			
				defaultManager
				
				
				3306
				
				
				192.168.111.142   
				amoeba            
				
				
				
				
				amoeba       
				
				
			
			
			
			
				200
				200
				10
				600000
				600000
				true
				true
			
		

		     

                        
                        
                                defaultManager

                                
                                3306

                                
                                192.168.111.143    
                                test

                                
                                amoeba                   

                                


                                amoeba               


                        

                        
                        
                                200
                                200
                                10
                                600000
                                600000
                                true
                                true
                        
                
		
		
		         
			
				
				1
				
				
				server1
			
		

		       
                        
                                
                                1

                                
                                server2     
                        
                
		
	

		
	
		${amoeba.home}/conf/rule.xml
		${amoeba.home}/conf/functionMap.xml
		${amoeba.home}/conf/ruleFunctionMap.xml
		1500
		
		master    
		
		
		master      
		slave        
		
		true
	
	



修改bin/amoeba启动文件,默认配置的java虚拟机堆栈空间太小,修改大一点

[root@test1 bin]# vim amoeba

#DEFAULT_OPTS="-server -Xms256m -Xmx256m -Xss128k"  
DEFAULT_OPTS="-server -Xms256m -Xmx256m -Xss256k"

在master 上创建test库,master 会自动同步到slave1上,因为amoeba工作需要一张默认工作库

mysql>create database test;


七、测试

在amoaba主机上到/usr/local/amoeba/bin目录下启动amoaba,注意查看日志

[root@test1 bin]# ./amoeba


看到server listening on 0.0.0.0/0.0.0.0:8066信息就是启动成功了,然后mysql客户端就可以连接到amoeba的IP:192.168.111.141的端口8066测试mysql的读写分离了


要测试是否读写分离,使实验效果明显,需要停止主从同步,主从数据差异即可观察到主从分离了

在slave1上操作

mysql>stop slave;

在任意mysql客户端连接amoeba主机,然后创建amoeba表,插入数据

[root@test ~]# mysql -h 192.168.111.141 -uamoeba -pamoeba -P 8066
mysql>use test;
mysql>create table amoeba(id int);
mysql>insert into amoeba values (1);
mysql>select * from amoeba;

结果是没有数据,数据插入到master上,但是slave上没有数据.

原文链接:http://www.waze7.com/?p=81


你可能感兴趣的:(mysql)