读写分离(AMOEBA)
博主本人平和谦逊,热爱学习,读者阅读过程中发现错误的地方,请帮忙指出,感激不尽
1. 环境准备:
1.1新增一台虚拟机
amoeba:192.168.247.80
架构(使用图片源自其它博文):

1.2下载地址(amoeba)
https://liquidtelecom.dl.sourceforge.net/project/amoeba/Amoeba%20for%20mysql/3.x/amoeba-mysql-3.0.5-RC-distribution.zip
1.3配置jdk
[root@amoeba~]# mkdir /usr/local/java -p [root@amoeba~]# tar -zxvf jdk-8u202-linux-x64.tar.gz -C /usr/local/java/ 设置环境变量: [root@amoeba~]# vim /etc/profile 在最后输入: export JAVA_HOME=/usr/local/java/jdk1..0_202 export JRE_HOME=$JAVA_HOME/jre export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib export PATH=$JAVA_HOME/bin:$PATH 生效: [root@amoeba~]# source /etc/profile 验证: [root@amoeba~]# java -version java version "1.8.0_202" Java(TM) SE Runtime Environment (build 1.8.0_202-b08) Java HotSpot(TM) -Bit Server VM (build 25.202-b08, mixed mode) [root@amoeba~]#
1.4关闭SELinux

1.5设置时间同步
timedatectl set-timezone Asia/Shanghai date
1.6amoeba简介(参考自其它博文)
Mysql的读写分离可以使用MySQL Proxy,也可以使用Amoeba。Amoeba(变形虫)项目是一个类似MySQL Proxy的分布式数据库中间代理层软件 Amoeba专注分布式数据库proxy开发。Amoeba身处在Client、DB Server(s)之间,对客户端透明,具有负载均衡、高可用性、sql过滤、读写分离、可路由相关的query到目标数据库、可并发请求多台数据库合并结果。 Amoeba主要解决: )降低 数据切分带来的复杂多数据库结构 )提供切分规则并降低 数据切分规则 给应用带来的影响 )降低db 与客户端的连接数 )读写分离 为什么要用Amoeba 目前要实现mysql的主从读写分离,主要有以下几种方案: )通过程序实现,网上很多现成的代码,比较复杂,如果添加从服务器要更改多台服务器的代码。 )通过mysql-proxy来实现,由于mysql-proxy的主从读写分离是通过lua脚本来实现,目前lua的脚本的开发跟不上节奏,而写没有完美的现成的脚本,因此导致用于生产环境的话风险比较大,据网上很多人说mysql-proxy的性能不高。 )自己开发接口实现,这种方案门槛高,开发成本高,不是一般的小公司能承担得起。 )利用阿里巴巴的开源项目Amoeba来实现,具有负载均衡、高可用性、sql过滤、读写分离、可路由相关的query到目标数据库,并且安装配置非常简单。经测试,性能相比mysql-proxy较高。 amoeba不足之处: )暂时不支持存储过程 )不适合从amoeba导数据的场景或者对大数据量查询的query并不合适(比如一次请求返回10w以上甚至更多数据的场合) )暂时不支持分库分表,amoeba只做到分数据库实例,每个被切分的节点需要保持库表结构一致: )amoeba目前无人维护,这是最大的安全隐患 )还不支持事务
1.7amoeba现状
目前并没有大型企业使用,我写博文的目的是为了记录安装过程,深入一些可以了解其思想和架构,但是本文并无深入研究
1. 安装amoeba
2.1解压安装
[root@amoeba amoeba]# pwd /opt/amoeba [root@amoeba amoeba]# unzip -o amoeba-mysql--RC-distribution.zip [root@amoeba amoeba]# mkdir /usr/local/amoeba -p [root@amoeba amoeba]# mv amoeba-mysql--RC /usr/local/amoeba/ .2设置配置 [root@amoeba amoeba]# cd /usr/local/amoeba/amoeba-mysql--RC/conf [root@amoeba conf]# vim dbServers.xml 修改如下(提前在数据库主库上创建amoebadb):


[root@amoeba conf]# vim amoeba.xml
修改如下:

[root@amoeba conf]# cd /usr/local/amoeba/amoeba-mysql-3.0.5-RC
[root@amoeba amoeba-mysql-3.0.5-RC]# vim jvm.properties
修改如下(java8可以将其注释):
JVM_OPTIONS="-server -Xms1024m -Xmx1024m -Xss256k -XX:PermSize=16m -XX:MaxPermSize=96m"
如果启动报错,则可以将这行配置注释掉,因为java8可以不用我们自己配置这些参数
3.启动服务
3.1启动
.1启动 [root@amoeba amoeba-mysql--RC]# ./bin/launcher [root@amoeba ~]# /usr/local/amoeba/amoeba-mysql--RC/bin/launcher Java HotSpot(TM) -Bit Server VM warning: ignoring option PermSize=16m; support was removed in 8.0 Java HotSpot(TM) -Bit Server VM warning: ignoring option MaxPermSize=96m; support was removed in 8.0 -- :: [INFO] Project Name=Amoeba-MySQL, PID= , starting... log4j:WARN log4j config load completed -RC/conf/log4j.xml -- ::, INFO context.MysqlRuntimeContext - Amoeba -mysql-amoeba-proxy--BETA log4j:WARN ip access config load completed -RC/conf/access_list.conf -- ::, INFO net.ServerableConnectionManager - Server listening on .
3.2不挂断启动
[root@amoeba ~]# nohup /usr/local/amoeba/amoeba-mysql--RC/bin/launcher & >>/usr/local/amoeba/amoeba-mysql--RC/logs/console.log >&
3.3设置防火墙
[root@amoeba ~]# firewall-cmd --permanent --add-port=/tcp [root@amoeba ~]# firewall-cmd --permanent --add-port=/udp [root@amoeba ~]# firewall-cmd --reload
4.测试验证
4.1连接验证
mysql -uroot -p123456 -h mysql> show databases; mysql> select version(); ERROR (): poolName=slaves, no valid pools 报错解决方案: dbServers.xml中的用户,需要在主从机上分配权限。同时注意该文件中的 <property name="schema">test</property> test数据库肯定是要存在的。 mysql> GRANT ALL PRIVILEGES ON *.* TO ' WITH GRANT OPTION; mysql> flush privileges; 关闭主库,则系统无法进行写操作,关闭从库,则系统无法进行读操作,表示读写分离验证完毕 第一次查询显示slave1库,第二次查询显示slave2库,表示轮询配置验证完成 轮询配置验证具体如下:
在主库上面的amoebadb上建表test01(247.53):
mysql> use amoebadb;
mysql> create table test01(id int(10));
在slave1上insert数据(247.54):
mysql> use amoebadb;
mysql> insert into test01 values(9587); (在slave1上手动插入一条数据)
返回amoeba上查询test01: mysql> select * from test; (第一次查询得到数据,也就是slave1上面的数据) +------+ | id | +------+ | | +------+ row in set (0.00 sec) mysql> select * from test01; Empty set (0.00 sec) (查询不到数据,也就是查询的是slave2上面的表)
转载需注明出处
读写分离(AMOEBA)的更多相关文章
- 数据库读写分离Amoeba
1.理解读写分离的原理 Amoeba(变形虫)项目,该开源框架于2008发布一款Amoeba for mysql软件,该软件致力于mysql的分布式数据库前端代理层,主要的作用是应用服务访问mysql ...
- Mysql数据库读写分离Amoeba
1.理解读写分离的原理 随着一个网站的业务不断扩展,数据不断增加,数据库的压力也会越来越大,对数据库或者SQL的基本优化可能达不到最终的效果,我们可以采用读写分离的策略来改变现状.读写分离现在被大量应 ...
- 数据库的读写分离(Amoeba)
目录 Amoeba Amoeba读写分离的配置 Amoeba Amoeba(变形虫) 项目,该开源框架于2008年开始发布一款 Amoeba for Mysql软件. 这个软件基于Java致力于MyS ...
- MySQL搭建Amoeba_读写分离
一.背景知识 Amoeba(变形虫)项目,专注 分布式数据库 proxy 开发.座落与Client.DB Server(s)之间.对客户端透明.具有负载均衡.高可用性.sql过滤.读写分离.可路由相关 ...
- MySQL的读写分离的几种选择
MySQL的读写分离的几种选择 MySQL主从复制(Master-Slave)与读写分离(MySQL-Proxy)实践 原址如下: http://heylinux.com/archives/1004. ...
- LAMP企业架构读写分离
1.1 LAMP企业架构读写分离 LAMP+Discuz+Redis缓解了MYSQL的部分压力,但是如果访问量非常大,Redis缓存中第一次没有缓存数据,会导致MYSQL数据库压力增大,此时可以基于 ...
- 30.Mysql主从复制、读写分离
Mysql主从复制.读写分离 目录 Mysql主从复制.读写分离 读写分离 读写分离概述 为什么要读写分离 什么时候要读写分离 主从复制与读写分离 mysql支持的复制类型 主从复制的工作过程 初始环 ...
- MySQL+Amoeba实现数据库主从复制和读写分离
MySQL读写分离是在主从复制的基础上进一步通过在master上执行写操作,在slave上执行读操作来实现的.通过主从复制,master上的数据改动能够同步到slave上,从而保持了数据的一致性.实现 ...
- 使用Amoeba for mysql实现mysql读写分离
Amoeba主要在应用层访问MySQL的时候充当query 路由功能,专注 分布式数据库 proxy 开发.座落与Client.DB Server(s)之间.对客户端透明.具有负载均衡.高可用性.Qu ...
- Amoeba for MySQL读写分离配置
一. 安装和运行Amoeba 1. Amoeba for MySQL 架构: 2. 验证Java的安装Amoeba框架是基于Java SE1.5开发的,建议使用Java SE1.5以上的版本 ...
随机推荐
- 吴裕雄--天生自然 JAVASCRIPT开发学习:测试 jQuery
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- 安装eclipse步骤以及配置jdk
1.官网下载eclipse 2.下载jdk并且安装,记住自己安装路径 3.配置jdk环境变量 在高级系统设置里面配置 新建: 用户变量:“变量名”:JAVA_HOME “变量值”:C:\Program ...
- html中的标签总结
HTML <ul> 元素(或称 HTML 无序列表元素)表示一个内可含多个元素的无序列表或项目符号列表 <ol>元素中的顺序是有意义的 <ul> 元素用来将没有数字 ...
- nginx常用编译参数
./configurate --prefix=/app/tengine --user=www --group=www --with-http_v2_module --with-http_ssl_mod ...
- Python笔记_第四篇_高阶编程_检测_1.对函数进行单元检测
1. 对函数进行单元检测: 单元检测: 作用:用来对一个函数.一个类.一个模块进行正确性校验工作. 结果: * 单元测试通过,说明我们测试函数的功能正确. * 单元测试不通过,说明函数有BUG,要么测 ...
- 移除手机端a标签点击自动出现的边框和背景
手机端a标签会自动补充出现边框或者背景,使得用户知道a标签的点击状态,但样式很不好看 <!DOCTYPE html> <html> <head> <meta ...
- c#之初识结构(Struct)
C# 结构(Struct) 首先结构是值类型数据结构.它使得一个单一变量可以存储各种数据类型的相关数据.struct 关键字用于创建结构.通俗说:结构就是一个可以包含不同数据类型的集合.它是一种可以自 ...
- sklearn KMeans聚类算法(总结)
基本原理 Kmeans是无监督学习的代表,没有所谓的Y.主要目的是分类,分类的依据就是样本之间的距离.比如要分为K类.步骤是: 随机选取K个点. 计算每个点到K个质心的距离,分成K个簇. 计算K个簇样 ...
- ZJNU 1269 - 灯塔——高级
根据题目输入可以得到一个有向图 信号可以根据有向图的传递性传递,因此可以说是找到这个有向图的所有父亲即可 但又要考虑可能会出现环这类情况 所以跑一遍强连通分量模板,再根据分块后的图找到入度为0的块,把 ...
- Django专题之ORM
ORM介绍 ORM概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术. 简单的说,ORM是通过使用描述 ...

