amoeba mysql binary_amoeba安装与实现amoeba for mysql读写分离

article/2025/9/13 12:52:30

运行环境

l  CentOS6.3

l  Jdk1.6.0_30

l  amoeba-mysql-binary-2.2.0

l  amoeba:192.168.88.17

l  master1:192.168.88.10

l  slave1:192.168.88.11

一: 安装jdk1.5以上版本

1.1    卸载centos服务器自带版本jdk

1.1.1          查看服务器自带jdk版本号

[root@amoeba1 ~]#java –version

6dea9685df9724805fb2b15df26b8544.png

1.1.2   查看java信息

[root@amoeba1 ~]#rpm -qa | grep java

363f54c4c82248f4c2043af1bc0c7565.png

1.1.3          卸载java文件

[root@amoeba1 ~]#rpm -e --nodeps java-1.6.0-openjdk-1.6.0.0-1.45.1.11.1.el6.x86_64

1.1.4          再次查看java版本,已经删除

[root@amoeba1 ~]#java –version

7e62eb644d683a007d4e5460de83b148.png

1.2    安装jdk

1.2.1          创建/usr/java文件夹,将jdk安装文件拷贝到此目录

[root@amoeba1 ~]#mkdir /usr/java

[root@amoeba1 ~]#cd /usr/java

1.2.2          赋予权限

[root@amoeba1 java]#chmod 777 jdk-6u30-linux-x64-rpm.bin

1.2.3          安装jdk

[root@amoeba1 java]#./jdk-6u30-linux-x64-rpm.bin

1.2.4          配置环境变量

[root@amoeba1 java]#vi /etc/profile

在配置文件最后面添加下面3条语句

export JAVA_HOME=/usr/java/jdk1.6.0_30

export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

export PATH=$PATH:$JAVA_HOME/bin

5183c656a810e3c64102190c9325b3ca.png

1.2.5          配置完成后,重启服务器

[root@amoeba1 java]#reboot

1.3     重启完成后查看新安装jdk版本

[root@amoeba1 ~]#java –version

f1c9e0a37211a7ce0639a6617f13fdf5.png

二: 安装amoeba

2.1下载amoeba,http://sourceforge.net/projects/amoeba/files/,我用的版本是amoeba-mysql-binary-2.2.0.tar

2.2   创建amoeba文件夹,将文件解压到此文件夹

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

[root@amoeba1 ~]#cd /usr/local/amoeba/

[root@amoeba1 amoeba]#tar -zxvf amoeba-mysql-binary-2.2.0.tar.gz

2.3   验证是否安装成功

[root@amoeba1 amoeba]#/usr/local/amoeba/bin/amoeba start

三:参数配置

[root@amoeba1 amoeba]#cd /usr/local/amoeba/conf/

[root@amoeba1 conf]#ls

608d2ef9a6eee5cb008a212576a4789d.png

l  Amoeba.xml:主配置文件,配置数据源和amoeba的自身参数

l  dbServer.xml:需要至少配置一个dbServer,每个dbServer将是物理数据库Server的衍射

l  log4j.xml:日志文件

l  rule.xml:配置所有Query路由规则的信息

l  functionMap.xml:配置用于解析Query中的函数所对应的Java实现类

l  rullFunctionMap.xml:配置路由规则中需要使用到的特定函数的实现类

这里我们通过修改amoeba.xml和dbServer.xml来实现读写分离,修改log4j.xml来节约服务器资源。

3.1 修改amoeba.xml

3.1.1 配置server

[root@amoeba1 amoeba]#cd /usr/local/amoeba/conf/

[root@amoeba1 conf]# vi amoeba.xml

配置项

是否必选

默认值

说明

port

8066

amoeba server绑定的对外端口

ipAddress

Amoeba绑定的IP

user

客户端连接到Amoeba的用户名

password

客户端连接到Amoeba的密码

readThreadPoolSize

16

负责读客户端、database server端网络数据包线程数

clientSideThreadPoolSize

16

负责读执行客户端请求的线程数

serverSideThreadPoolSize

16

负责处理服务端返回数据包的线程数

我配置的数据是:将端口号修改为了3306,用户root,密码123456,ip:192.168.88.17

200d9f4f265bbec35c22019bfaff5715.png

3.1.2 注释amoeba for monitor,因为我们不需要这个功能,只需要amoeba for mysql

bdf6981f1fd0b7caff4afcdb416dca46.png

3.1.3 配置runtime,具体意义参看3.1.1图标

48a753abea2b01c965d75f2fe0017bde.png

3.1.4 配置connectionManager:需要至少配置一个ConnectionManager,每个ConnectionManager将作为一个线程启动,ConnectionManager负责管理所注册在自身的Connection,负责他们的空闲检测、死亡检测、IO Event

64b033e42328727fd5ac1f7ecc13a6e4.png

3.1.5 配置默认引用其他配置文件,这里需要修改读写分离的数据库name值

配置项

是否必选

默认值

说明

class

QueryRouter实现类,Amoeba for Mysql (com.meidusa.amoeba.mysql.parser.MysqlQueryRouter)

functionConfig

用于解析sql函数的配置文件,如果不配置则将不解析包含函数sql或者解析的不完整

ruleConfig

数据切分规则配置文件,如果不配置则sql数据切分功能将不能用

needParse

true

是否对sql进行parse,如果false则将不能使用数据切分、读写分离等功能

defaultPool

needParse=false,无法解析query,不满足切分规则的,writePool |   readPool = null情况。所有sql将在默认的dbServer上面执行。

writePool

启用needParse功能,并且没有匹配到数据切分规则,则update、inster、delete语句将在这个pool中执行

readPool

启用needParse功能,并且没有匹配到数据切分规则,则select语句将在这个pool中执行

LRUMapSize

1000

statment cache , 存放sql解析后得到的statment

96102c59a1c9f971e60e48e6dfd9345a.png

3.2 配置dbServer.xml

3.2.1 配置文件信息:

Each dbServer needs to be configured into a Pool,If you need to configure multiple dbServer with load balancing that can be simplified by the following configuration:                         add attribute with name virtual = "true" in dbServer, but the configuration does not allow the element with name factoryConfig such as 'multiPool' dbServer

一台mysqlServer 需要配置一个pool,如果多台 平等的mysql需要进行loadBalance,平台已经提供一个具有负载均衡能力的objectPool:com.meidusa.amoeba.mysql.server.MultipleServerPool,简单的配置是属性加上 virtual="true",该Pool 不允许配置factoryConfig或者自己写一个ObjectPool。

3.2.2 配置 factoryconfig,配置amoeba访问信息,注意默认的注释问题,要把密码注释去掉

4b06fbc02b0d70dbfc5712bcafb56f40.png

3.2.3 配置连接池信息

配置项

是否必选

默认值

说明

className

com.meidusa.amoeba.net.poolable.PoolableObjectPool

连接池实现类

maxActive

8

最大活动连接数,如果达到最大活动连接数,则会等待

maxIdle

8

最大空闲连接数,如果超过则将会关闭多余的空闲连接

minIdle

0

最小空闲连接数,连接池将保持最小的空闲连接,即使这些连接长久不用

testOnBorrow

false

当连接在使用前

testWhileIdle

false

是否检测空闲连接数,这个参数启动的时候下列两个参数才有效

minEvictableIdleTimeMillis

30分钟

连接空闲数多少时间将被驱逐(关闭)(time Unit:ms)

timeBetweenEvictionRunsMillis

-1

用于关闭空闲连接每间隔多少时间检查一次空闲连接(time Unit:ms)

c20fcfd36296af0699819fdab84a1e31.png

3.2.4  配置读写数据库name名和ip地址

3f0bab2263caaeee0bb27b2bfe89e9c0.png

3.2.5  配置读写分离连接池:Amoeba提供读写分离pool相关配置。并且提供负载均衡配置。可配置slave1、slave2形成一个虚拟的virtualSlave,该配置提供负载均衡、failOver、故障恢复。

c2c5cf57a3b8db372286a0612f01d843.png

3.3  配置log4j.xml文件

3.3.1  在可用性测试已经完成的情况下, 建议将log4j.xml 中关于日志输出level为info的全部设置成warn或者error级别. 日志是非常消耗系统性能的, 在没有必要的情况下可以不使用debug.

本人暂时还是测试环境,所以未修改此项配置

54066c0584afc5fd8f64da65389a6ed9.png

62a9d17ae4fd78320cb058a6ff6be349.png

3.4  开启防火墙amoeba设置的端口,本人amoeba服务器没有安装mysql,因此自定义的amoeba是3306端口,开启如下

[root@amoeba1 ~]#vi /etc/sysconfig/iptables

编辑文件,在

-A INPUT -j REJECT --reject-with icmp-host-prohibited之前

加入

-A INPUT -p tcp -m state --state NEW -m tcp --dport 3306 -j ACCEPT

0df0fb3acb3c773b215463910ffc0ed0.png

重启防火墙服务

[root@amoeba1 ~]#service iptables restart

e1fc3c2d04ecb3b1f10cf1e120324e56.png

四:读写分离测试

4.1  测试思路:因为两个是在两个主从数据库上实现读写分离,向主数据库写入操作,从数据库通过数据库复制同步主数据库内容,读取时读取从数据库数据,因此,我在主从数据库上建立同样的表,然后断开从数据库的复制,在主从数据库分别插入不同数据,再连接amoeba服务器,写入第三条语句,此时主数据库有1,3两条数据,从数据库只有2一条数据,证明写入是master数据库,读取是slave数据库。

4.1.1  开启amoeba

[root@amoeba1 ~]#/usr/local/amoeba/bin/amoeba start

65a52620d30b12dc41a4d03f69480a74.png

4.1.2  在主从数据库复制成功的前提下,在主数据库创建一张测试表,从数据库自动复制此操作

#主数据库,进入mysql

[root@mysql1 ~]#/usr/local/mysql/bin/mysql -u root -p123456

mysql>use zf_db;

mysql>create table test_amoeba(id int);

mysql>select * from test_amoeba;

4ca47a910a2ce1da09cf3a90a9d95631.png

4.1.3  从数据库查看是否成功创建test_amoeba测试表

#从数据库

[root@mysql2 ~]#/usr/local/mysql/bin/mysql -u root -p123456

mysql>use zf_db;

mysql>select * from test_amoeba;

83d9d8ac1c5fa1638d5f53228b4c0f7d.png

证明:主从复制成功

4.1.4  从数据库断开主从数据库复制

#从数据库

mysql>stop slave;

4.1.5  主数据库插入一条语句,数值1

#主数据库

mysql>INSERT INTO test_amoeba VALUES (1);

mysql>SELECT * FROM test_amoeba;

cf33a5dfe86140f3b0cde7826405233a.png

4.1.6  从数据库查看test_amoeba数据,因为已经断开复制,所以此时从数据库应该是没有值的

#从数据库

mysql>select * from test_amoeba;

83d9d8ac1c5fa1638d5f53228b4c0f7d.png

4.1.7  从数据库在test_amoeba表中插入数值2

#从数据库

mysql>INSERT INTO test_amoeba VALUES (2);

mysql>select * from test_amoeba;

52dfcc5b439b9ba7a9463c21b5961b11.png

4.1.8  查询主数据库test_amoeba数据情况

#主数据库

mysql>select * from test_amoeba;

cf33a5dfe86140f3b0cde7826405233a.png

4.1.9 查询从数据test_amoeba数据情况

#从数据库

mysql>select * from test_amoeba;

52dfcc5b439b9ba7a9463c21b5961b11.png

注:此时主从数据库的数据是不一致的,以便我们证明amoeba的读写分离

4.1.10  使用mysql可视化软件连接amoeba服务器

0d384ad6160dddd579e8e0b94c2df6dd.png

连接测试

9eeab4426d254e9d4c5ade8b798e2c4f.png

注:如果没有成功,请注意amoeba服务器的iptables是否开启amoeba的端口

4.1.11  查看amoeba数据库显示内容

e17aa3e2f509ff53b0fdecf5f561d2fb.png

4.1.12  在amoeba服务器,向test_amoeba表写入数据

#amoeba服务器

5b90b6a704c44744f749d77cfcd4ef62.png

4.1.13  查询主数据test_amoeba数据

#主数据库

mysql>select * from test_amoeba;

cbe790142fda394950c345e34a0340cd.png

证明:通过amoeba服务器,我们写入数据进入到主数据库test_amoeba表中

4.1.14  查询从数据库test_amoeba数据

#从数据库

mysql>select * from test_amoeba;

5fb2fc0fa75ac51c8125fbaf62ea39e1.png

证明:在未开启主从数据库复制的情况下,向amoeba服务器写入数据时,从数据库未写入数据

4.1.15  连接amoeba服务器,查询test_amoeba数据

e606b860b5e3083b518fe6ca40ab1bd8.png

只能看到id为2的一条数据

证明:我们连接amoeba服务器时,读的数据是slave服务器的数据,因此,我们主从数据库的读写分离成功!


http://chatgpt.dhexx.cn/article/HaN4ruIT.shtml

相关文章

amoeba-mysql主从复制配置

amoeba-mysql主从复制配置 主mysql192.168.8.186 1. 同步时间ntpdate ntp.org.cn 2. 打开mysql配置文件/etc/my.cnf,在mysqld下添加 a) log-binmaster-bin ---------启动二进制日志系统 b) server-id1 ---------服务id,主服务器server-id比从服务器serv…

mysql amoeba 事务_MySQL-Amoeba

Amoeba 变形虫 Amoeba 变形虫服务默认端口号8066 该软件能识别读写请求,把读写请求分配到不同的后端MySQL服务器 不用像MySQL-router用端口进行区分读写。 实验: 为了查看读写分离效果 本实验就不配置主从复制 1、 首先IP规划 amoeba:192.168.1.76 master:192.168.1…

amoeba mysql proxy_mysql-proxy和amoeba 分别实现Mariadb读写分离

内容概览: 1、mysql-proxy实现Mariadb读写分离 1、1 拓扑图和环境介绍 1、2 mysql-proxy安装 1、3 设置mysql-proxy 1、4 主节点添加mysql-proxy可访问用户 1、5 读写分离验证 2、amoeba 2、1 amoeba工作原理图 2、2 环境拓扑 2、3 配置JAVA环境 2、4 安装配置amoeb…

amoeba mysql_使用Amoeba 实现MySQL DB 读写分离

Amoeba(变形虫)项目是一个开源框架,于2008年开始发布一款 Amoeba for MySQL软件; 这个软件致力于MySQL的分布式数据库前端代理层,它主要在应用层访问MySQL的时候充当SQL路由功能,专注于分布式数据库代理层(Database Proxy)开发&am…

amoeba mysql_mysql中间件-amoeba

中间件:一种提供在不同技术、不同的软件之间共享资源的程序,更大化了利用了数据库的性能,可以无限扩展(注:真实环境中并非如此) 数据库的中间件: mysql proxy (官方版本)性能低,需要lua 脚本 atlas 性能低&…

Amoeba

1.介绍 Amoeba是mysql代理,增强mysql。类似的产品还有MyCat (mysql代理) 2.资源:点击打开链接c82k 3.准备:amoeba是基于java的所以必须有jdk 4.上传amoeba 5.解压tar包 6.配置文件 amoeba配置文件两个 dbServer…

Mysql基于Amoeba_读写分离搭架

一、Amoeba简介 Amoeba是一个以MySQL为底层数据存储,并对应用提供MySQL协议接口的proxy。它集中地响应应用的请求,依据用户事先设置的规则,将SQL请求发送到特定的数据库上执行。基于此可以实现负载均衡、读写分离、高可用性等需求&#xff0…

mysql基于Amoeba(变形虫)实现读写分离

一,Amoeba介绍 1、什么是amoeba? ​ Amoeba(变形虫)项目,专注 分布式数据库 proxy 开发。座落与Client、DB Server(s)之间。对客户端透明。具有负载均衡、高可用性、sql过滤、读写分离、可路由相关的query到目标数据库、可并发请求多台数据…

Amoeba:开源的分布式数据库Porxy解决方案

什么是Amoeba? Amoeba(变形虫)项目,该开源框架于2008年 开始发布一款 Amoeba for Mysql软件。这个软件致力于MySQL的分布式数据库前端代理层,它主要在应用层访问MySQL的 时候充当SQL路由功能,专注于分布式数据库代理层(Database …

findbugs html报告,利用findBugs插件来扫描代码,并用ant生成报告

最近项目要用findbugs插件来生成报告,总结了一下用法和如何生成报告 1, 把下载的压缩包解压后,把 copy到eclipse的plugin目录中去; 2, 重新启动eclipse 3, 打开eclipse->window->Preferences&#xf…

AS之Findbugs

一 前言 Findbugs是由 National Science Foundation支持的一个用静态分析的方式来寻找Java代码中Bug的项目,它是一个静态分析工具,它检查类或者jar文件,将字节码和一组缺陷模式进行对比以发现可能的问题。有了静态分析工具,就可以…

AndroidStudio中FindBugs的简单使用教程

对于代码质量的检查,一直是一个比较棘手的问题。虽然我们部门有关于java代码的各种规范,领导也多次强调对代码的评审。 但是在实际执行过程中,由于开发人员的水平参差不齐,在开发项目时还有各种其他因素,比如时间紧任…

maven项目集成findbugs详解

文章目录 0、概述一、接入方式二、如何使用方式一、在控制台中执行打包命令方式二、使用IntelliJ IDEA的maven工具(其他IDE用户忽略) 三、bug详情查看四、忽略指定的包、类、类中的方法步骤一、在pom.xml中 增加配置。步骤二、增加配置文件,用…

Findbugs maven 插件使用

Findbugs maven 插件使用 FindBugs™手册 http://findbugs.sourceforge.net/manual/index.html 0、概述 FindBugs是一个静态分析工具,它将**字节码(因此需要先编译)**与一组缺陷模式进行对比以发现可能的问题。有了静态分析工具,…

检查代码质量的插件Findbugs使用说明

一、简介 Findbugs是一个静态分析工具,它检查类或者jar文件,将字节码与一组缺陷模式进行对比以发现可能的问题。利用这个工具可以在不实际运行程序的情况下对软件进行分析。可以帮助改进代码质量。Findbugs提供了方便操作的可视化界面,同时也…

Findbugs的使用

转载请注明出处:http://blog.csdn.net/feibendexiaoma/article/details/72821781前言 Findbugs很多人都并不陌生,Eclipse中有插件可以帮助查找代码中隐藏的bug,IDEA中也有这款插件。这个插件可以帮助我们查找隐藏的bug,比较重要的功能就是查找…

android studio findbugs 过滤,Android Studio中使用FindBugs

1.什么是FindBugs 一句话简单理解就是:是一个工具,可以用它自动帮你找出代码中潜在的BUG。当然事实并不一定总是如此,也有很多它找不出来的地方。下面将直接介绍如何在Android Studio中的简单使用。有兴趣的童鞋可以自己去了解了解&#xff0…

FindBugs插件

官网 FindBugs官网:http://findbugs.sourceforge.net/ 插件安装 点击settings---->plugins---->Browse repositories 搜索框输入FindBugs-IDEA并点击右侧Install按钮 安装完毕后重启idea,发现左下角多了一个FindBugs图标 插件使用 在被检查文…

eclipse常用插件之FindBugs

1、简介 FindBugs 是由马里兰大学提供的一款开源 Java静态代码分析工具。FindBugs通过检查类文件或 JAR文件,将字节码与一组缺陷模式进行对比从而发现代码缺陷,完成静态代码分析。FindBugs既提供可视化 UI 界面,同时也可以作为 Eclipse插件使…

php findbugs,findBugs插件

现在使用Java进行开发的软件已经很多了,那么我们在使用Java开发的时候,是不是会遇到各种各样的错误了,有的错误隐藏着,有的错误你发现了,可以修改,那没有发现的错误就令人担忧了!小编这款插件就…