博主本人平和谦逊,热爱学习,读者阅读过程中发现错误的地方,请帮忙指出,感激不尽


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)的更多相关文章

  1. 数据库读写分离Amoeba

    1.理解读写分离的原理 Amoeba(变形虫)项目,该开源框架于2008发布一款Amoeba for mysql软件,该软件致力于mysql的分布式数据库前端代理层,主要的作用是应用服务访问mysql ...

  2. Mysql数据库读写分离Amoeba

    1.理解读写分离的原理 随着一个网站的业务不断扩展,数据不断增加,数据库的压力也会越来越大,对数据库或者SQL的基本优化可能达不到最终的效果,我们可以采用读写分离的策略来改变现状.读写分离现在被大量应 ...

  3. 数据库的读写分离(Amoeba)

    目录 Amoeba Amoeba读写分离的配置 Amoeba Amoeba(变形虫) 项目,该开源框架于2008年开始发布一款 Amoeba for Mysql软件. 这个软件基于Java致力于MyS ...

  4. MySQL搭建Amoeba_读写分离

    一.背景知识 Amoeba(变形虫)项目,专注 分布式数据库 proxy 开发.座落与Client.DB Server(s)之间.对客户端透明.具有负载均衡.高可用性.sql过滤.读写分离.可路由相关 ...

  5. MySQL的读写分离的几种选择

    MySQL的读写分离的几种选择 MySQL主从复制(Master-Slave)与读写分离(MySQL-Proxy)实践 原址如下: http://heylinux.com/archives/1004. ...

  6. LAMP企业架构读写分离

    1.1  LAMP企业架构读写分离 LAMP+Discuz+Redis缓解了MYSQL的部分压力,但是如果访问量非常大,Redis缓存中第一次没有缓存数据,会导致MYSQL数据库压力增大,此时可以基于 ...

  7. 30.Mysql主从复制、读写分离

    Mysql主从复制.读写分离 目录 Mysql主从复制.读写分离 读写分离 读写分离概述 为什么要读写分离 什么时候要读写分离 主从复制与读写分离 mysql支持的复制类型 主从复制的工作过程 初始环 ...

  8. MySQL+Amoeba实现数据库主从复制和读写分离

    MySQL读写分离是在主从复制的基础上进一步通过在master上执行写操作,在slave上执行读操作来实现的.通过主从复制,master上的数据改动能够同步到slave上,从而保持了数据的一致性.实现 ...

  9. 使用Amoeba for mysql实现mysql读写分离

    Amoeba主要在应用层访问MySQL的时候充当query 路由功能,专注 分布式数据库 proxy 开发.座落与Client.DB Server(s)之间.对客户端透明.具有负载均衡.高可用性.Qu ...

  10. Amoeba for MySQL读写分离配置

    一.      安装和运行Amoeba 1. Amoeba for MySQL 架构: 2. 验证Java的安装Amoeba框架是基于Java SE1.5开发的,建议使用Java SE1.5以上的版本 ...

随机推荐

  1. ftp限制

    /etc/hosts.deny /etc/vsftpd/user_list 从2.3.5之后,vsftpd增强了安全检查,如果用户被限定在了其主目录下,则该用户的主目录不能再具有写权限了!如果检查发现 ...

  2. qt使用了qstackedwidget里面放置了widget后对该子widget设置的样式无效

    关键字:子窗口样式无效 QStackedwidget 问题: 我有一个对话框,里面放了一个qstackedwidget,qstackedwidget放了N个子窗口,使用addwidget添加上去了: ...

  3. vue项目 首页开发 part3

    da当拖动图标时候,只有上部分可以,下部分无响应 swiper 为根页面引用,其中的css为独立,点击swiper标签可以看见其包裹区域只有部分 那么需要修改 就需要穿透样式 外部  >> ...

  4. Codeforces Round #571 (Unrated for Div. 1+Div. 2)

    A 略 B 被删了,被这个假题搞自闭了,显然没做出来. C 开始莽了个NTT,后来发现会TLE,其实是个SB前缀和,对于这题,我无**说. #include<bits/stdc++.h> ...

  5. python 2.7编译安装

    一 官网下载python2.7源码: python安装pip python -m ensurepip --default-pip

  6. 计蒜客 蒜头君回家(有条件的BFS)

    蒜头君要回家,但是他家的钥匙在他的朋友花椰妹手里,他要先从花椰妹手里取得钥匙才能回到家.花椰妹告诉他:“你家的钥匙被我复制了很多个,分别放在不同的地方.” 蒜头君希望能尽快回到家中,他需要首先取得任意 ...

  7. Qt QRect与QRectF的区别

    一直在与QRect和QRectF打交道.甚至在使用过程中因为QRect而出现了致命的Bug.因为QRect在数据存储表示上有一个很大的“历史遗留问题”! QRect Class   也就是说,对于QR ...

  8. Python dict 字典 keys和values对换

    原字典: d1 = { 'en':'英语', 'cn':'中文', 'fr':'法语', 'jp':'日语' } 经过相互对换: d1_inverse = {values:keys for keys, ...

  9. 循环队列--忘记分配空间和如何用tag判断队空队满

    #include<iostream> #define maxsize 100 using namespace std; struct CLqueue { int *Q; int front ...

  10. JavaSE--【JAVA】unicode为12288字符

    转载:http://blog.csdn.net/zfpigpig/article/details/8186470 今天做一个导入数据功能时发现一个问题,就是一个unicode为12288的字符显示为空 ...