MySQL基于Amoeba实现读写分离

摘要:
目前较为常见的MySQL读写分离方案有两种:1.基于程序代码内部实现:根据select,insert进行路由分类,是目前生产环境应用最广泛的,优点是性能好,因为在代码中实现,不需要增加额外的设备作为硬件开支,缺点是需要开发人员来实现,运维人员无从下手。

在实际的生活环境中,如果对数据库的读和写都在同一个数据库服务中操作,无论是在安全性,高可用还是高并发等各个方面都不能完全满足实际需求的,因此一般来说都是通过主从复制的方式来同步数据,再通过读写分离来提升数据的高并发负载能力这样的方案来进行部署。

读写分离就是只在主服务器上写,只在从服务器上读,基本的原理是让主数据库处理事务性查询,而从数据库处理select查询,数据库复制被用来把事务性查询导致的改变更新同步到集群中的从数据库。

目前较为常见的MySQL读写分离方案有两种:

1.基于程序代码内部实现:

根据select,insert进行路由分类,是目前生产环境应用最广泛的,优点是性能好,因为在代码中实现,不需要增加额外的设备作为硬件开支,缺点是需要开发人员来实现,运维人员无从下手。

2.基于中间代码层实现:

代理一般位于客户端和服务器之间,代理服务器接到客户端请求后通过判断后转发到后端数据库,代表性程序:

1mysql-proxy mysql开发早期开源项目,通过其自带的lua脚本进行SQL判断,虽然是mysql的官方产品,但是mysql官方不建议将其应用到生产环境。

2Amoeba (变形虫)由陈思儒开发,曾就职与阿里巴巴,该程序由java语言进行开发,阿里巴巴将其应用于生成环境,它不支持事物和存储过程。

通过程序代码实现mysql读写分离自然是一个不错的选择,但是并不是所有的应用都适合在程序代码中实现读写分离,像一些大型复杂的java应用,如果在程序代码中实现读写分离对代码改动就较大,像这种应用一般会考虑使用代理层来实现。

MySQL基于Amoeba实现读写分离第1张

MySQL Master IP: 192.168.96.6

MySQL Slave1 IP: 192.168.96.7

MySQL Slave2 IP: 192.168.96.5

MySQL Amoeba IP: 192.168.96.4

MySQL Client IP: 192.168.96.9

在主机Amoeba上安装Java环境(因为Amoeba是基于jdk1.5版本开发的,所以官方推荐使用1.5或1.6版本)

rz

将bin格式的安装包传进来(jdk-6u14-linux-x64.bin)

chmod +x jdk-6u14-linux-x64.bin //添加可执行权限

./jdk-6u14-linux-x64.bin //执行后会生成一个文件夹(jdk1.6.0_14)

MySQL基于Amoeba实现读写分离第2张

mv jdk1.6.0_14/ /usr/local/jdk1.6 //将文件夹移动到/usr/local/下起名为jdk1.6

vim /etc/profile //修改文件

文档底部插入内容:

export JAVA_HOME=/usr/local/jdk1.6
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$PATH:$JAVA_HOME/lib:$JAVA_HOME/jre/bin:$HOME/bin

export AMOEBA_HOME=/usr/local/amoeba
export PATH=$PATH:$AMOEBA_HOME/bin

MySQL基于Amoeba实现读写分离第3张

source /etc/profile //声明一下修改的文档

java -version //查看版本号

如果Java版本号过高请执行一下操作:

rm -rf /usr/bin/java

source /etc/profile

java -version

MySQL基于Amoeba实现读写分离第4张

将amoeba-mysql-binary-2.2.0.tar.gz 传入

mkdir /usr/local/amoeba //创建一个amoeba的文件夹

tar xf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba //解压

chmod -R 755 /usr/local/amoeba //给文件夹一个755权限

配置Amoeba读写分离,两个Slave读负载均衡

在Master、Slave1、Slave2服务器中配置Amoeba的访问授权

grant all on *.* to 'test'@'192.168.96.%' identified by '123.com'; //三台机器都做

MySQL基于Amoeba实现读写分离第5张

修改amoeba配置文件

cd /usr/local/amoeba/conf/

cp amoeba.xml amoeba.xml.bak //给要修改的文件做一个备份

vim amoeba.xml

MySQL基于Amoeba实现读写分离第6张

MySQL基于Amoeba实现读写分离第7张

cp dbServers.xml dbServers.xml.bak //做备份

vim dbServers.xml

MySQL基于Amoeba实现读写分离第8张

MySQL基于Amoeba实现读写分离第9张

配置无误后,启动Amoeba软件,默认端口是TCP协议8066

nohup /usr/local/amoeba/bin/amoeba start & //开启Amoeba在后台

MySQL基于Amoeba实现读写分离第10张

netstat -lnpt //查看一下有没有8066端口

MySQL基于Amoeba实现读写分离第11张

在Client上进行访问测试

mysql -u amoeba -p123456 -h 192.168.96.6 -P 8066 //IP为主机IP 123456为设置amoeba的密码

MySQL基于Amoeba实现读写分离第12张

master上操作:

create database db_test; //创建新库

use db_test

create table student (id int(10),name varchar(10),address varchar(20)); //创建新数据,查看每个服务器都有新的数据

stop slave; //关闭主从复制,所有的都关闭

在master上:

use db_test

insert into student values('1','crushlinux','this_is_master');

在slave1上:

use db_test

insert into student values('2','crushlinux','this_is_slave1');

在slave2上:

use db_test

insert into student values('3','crushlinux','this_is_slave2');

测试读操作:均在在测试机上操作

select * from student;

测试写操作:

在client上插入语句:

use db_test

insert into student values('4','crushlinux','write_test');

select * from student;

在Slave上

start slave;

show slave statusG

再次测试(测试过程略)

免责声明:文章转载自《MySQL基于Amoeba实现读写分离》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇delphi 多线程 数据库ABAP如何创建和使用sap的号码范围对象下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

oracle的sqlnet.ora,tnsnames.ora,listener.ora三个配置文件

总结:1 .三个配置文件都是放在$ORACLE_HOME etworkadmin目录下。2 .sqlnet.ora确定解析方式3 .listener.ora上设SID_NAME,通常用于JDBC访问,对应的错误码为125054 .tnsnames.ora上设SERVICE_NAME,通常用于linux sqlplus客户端,对应的错误码为12514 sql...

EFCore数据库迁移命令整理

因为现在用.net core 开发新项目,过程中需要经常涉及到数据命令的迁移,今天分别整EFCore 的两种迁移数据库的方式  1 程序包管理器控制台 , Package Manager Console(PMC)        -如果你用visual studio 开发建议使用PMC迁移方式,该方式是同时支持efcore和原先的ef 迁移的 2 命令行工具...

MySQL父子节点查询

MySQL父子结点递归查询 表结构: 1 CREATE TABLE`agency` ( 2 `id` varchar(32) NOT NULL COMMENT '编号', 3 `name` varchar(30) NOT NULL COMMENT '名称', 4 `addr` varchar(100) NOT NULL COMMENT '位置'...

【转】常用的python模块及安装方法

  adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheetahcherrypy:一个WEB frameworkctypes:用来调用动态链接库DBUtils:数据库连接池django:一个WEB frameworkdocutils:用来写文档的dpkt:数据包的解包和组包...

深入MySQL复制(一)

本文非常详细地介绍MySQL复制相关的内容,包括基本概念、复制原理、如何配置不同类型的复制(传统复制)等等。在此文章之后,还有几篇文章分别介绍GTID复制、半同步复制、实现MySQL的动静分离,以及MySQL 5.7.17引入的革命性功能:组复制(MGR)。 本文是MySQL Replication的基础,但却非常重要。对于MySQL复制,如何搭建它不是重...

我的MYSQL学习心得(一) 简单语法

我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运算符 我的MYSQL学习心得(六) 函数 我的MYSQL学习心得(七) 查询 我的MYSQL学习心得(八) 插入 更新 删除 我的MYSQL学习心得(九) 索引 我的MYSQL学习心得(十) 自定义...