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

时间:2022-11-04 00:10:45

运行环境

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

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

1.1.2   查看java信息

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

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

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

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

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

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

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

[root@amoeba1 java]# reboot

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

[root@amoeba1 ~]# java –version

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

二: 安装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

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

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

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

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

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

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

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

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

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

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

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

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访问信息,注意默认的注释问题,要把密码注释去掉

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

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)

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

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

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

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

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

3.3  配置log4j.xml文件

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

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

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

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

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

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

重启防火墙服务

[root@amoeba1 ~]# service iptables restart

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

四:读写分离测试

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

4.1.1  开启amoeba

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

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

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;

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

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

#从数据库

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

mysql> use zf_db;

mysql> select * from test_amoeba;

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

证明:主从复制成功

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

#从数据库

mysql> stop slave;

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

#主数据库

mysql> INSERT INTO test_amoeba VALUES (1);

mysql> SELECT * FROM test_amoeba;

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

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

#从数据库

mysql> select * from test_amoeba;

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

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

#从数据库

mysql> INSERT INTO test_amoeba VALUES (2);

mysql> select * from test_amoeba;

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

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

#主数据库

mysql> select * from test_amoeba;

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

4.1.9 查询从数据test_amoeba数据情况

#从数据库

mysql> select * from test_amoeba;

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

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

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

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

连接测试

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

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

4.1.11  查看amoeba数据库显示内容

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

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

#amoeba服务器

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

4.1.13  查询主数据test_amoeba数据

#主数据库

mysql> select * from test_amoeba;

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

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

4.1.14  查询从数据库test_amoeba数据

#从数据库

mysql> select * from test_amoeba;

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

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

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

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

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

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

amoeba安装与实现amoeba for mysql读写分离的更多相关文章

  1. CentOS7 安装lua环境(我是在mysql读写分离用的)

    下载地址:http://www.lua.org/download.html 安装方法: 依次执行以下命令: curl -R -O http://www.lua.org/ftp/lua-5.3.1.ta ...

  2. amoeba实现MySQL读写分离

    amoeba实现MySQL读写分离 准备环境:主机A和主机B作主从配置,IP地址为192.168.131.129和192.168.131.130,主机C作为中间件,也就是作为代理服务器,IP地址为19 ...

  3. Mysql读写分离-Amoeba Proxy

    参考:http://www.linuxidc.com/Linux/2015-10/124115.htm 一个完整的MySQL读写分离环境包括以下几个部分: 应用程序client database pr ...

  4. 使用Amoeba实现mysql读写分离机制

    Amoeba的实用指南 http://docs.hexnova.com/amoeba/ 如何实现mysql读写分离 : 通常来说有两种方式: 1,应用程序层实现 2,中间件层实现 应用层实现 应用层实 ...

  5. MySQL读写分离之amoeba

    MySQL读写分离之amoeba主从复制的搭建环境参考:http://www.cnblogs.com/fansik/p/5270334.htmlamoeba依赖于jdk环境:jdk环境搭建参考:htt ...

  6. 使用amoeba实现mysql读写分离

    使用amoeba实现mysql读写分离 1.什么是amoeba? ​ Amoeba(变形虫)项目,专注 分布式数据库 proxy 开发.座落与Client.DB Server(s)之间.对客户端透明. ...

  7. Amoeba mysql读写分离搭建及介绍

    Amoeba mysql读写分离搭建及介绍 推荐: http://blog.chinaunix.net/uid-20639775-id-154600.html

  8. Mycat安装并实现mysql读写分离,分库分表

    Mycat安装并实现mysql读写分离,分库分表 一.安装Mycat 1.1 创建文件夹 1.2 下载 二.mycat具体配置 2.1 server.xml 2.2 schema.xml 2.3 se ...

  9. Docker安装Mycat并实现mysql读写分离,分库分表

    Docker安装Mycat并实现mysql读写分离,分库分表 一.拉取mycat镜像 二.准备挂载的配置文件 2.1 创建文件夹并添加配置文件 2.1.1 server.xml 2.1.2 serve ...

随机推荐

  1. 【JSP】JSP基础学习记录(三)—— JSP的9个内置对象

    本节说一下JSP中的9个内置对象.这9个内置对象都是Servlet API接口的实例,只是JSP规范对他们进行了默认初始化(由JSP页面对应Servlet的_jspService()方法来创建这些实例 ...

  2. csharp: Socket

    https://github.com/joeandaverde/socket.io-csharp-client http://websocket4net.codeplex.com/ http://ww ...

  3. Android应用程序组件Content Provider在应用程序之间共享数据的原理分析

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6967204 在Android系统中,不同的应用 ...

  4. 批处理程序:自动上传FTP,再登陆linux服务器执行更新

    ----转载请注明出处:博客园-邦邦酱好 最近在学批处理程序,一直没找到能够结合工作来使用它的地方,前几天测试服务端的时候突然想到可以这样做: 写一个批处理程序,自动通过FTP上传软件包到指定的地方, ...

  5. qsort()函数(C)

    qsort包含在<stdlib.h>头文件中,此函数根据你给的比较条件进行快速排序,通过指针移动实现排序.排序之后的结果仍然放在原数组中.使用qsort函数必须自己写一个比较函数. 函数原 ...

  6. ubuntu 一些琐碎知识

    2017/09/01 ubuntu下面配置git公钥 $ git config --global user.name "Your Name" $ git config --glob ...

  7. 正确的git开发流程

    正确的git开发流程 第一步 在github中创建一个新的仓库,这时候项目是空的,而且只有一个master分支 第二步 第一个开发人员进来了,他在本地创建一个develop分支,并且提交到远程 git ...

  8. JAVA微信公众号通过openid发送模板消息~

    1,问题产生 在微信公众号开发过程中,我们有时候做不同权限的时候,比如在注册的时候,需要审核,然后我们要想办法让对方知道审核的结果.这时候我们可以通过模板消息来通知. 2,第一步,首先在微信公众号上获 ...

  9. Hadoop2&period;7&period;6&lowbar;01&lowbar;部署

    1. 主机规划 主机名称 外网IP 内网IP 操作系统 备注 安装软件 mini01 10.0.0.11 172.16.1.11 CentOS 7.4 ssh port:22 Hadoop [Name ...

  10. vue组件通信方式总结

    对于vue来说,组件之间的消息传递是非常重要的,下面是我对组件之间消息传递的各种方式的总结,总共有8种方式. 1. props和$emit 父组件向子组件传递数据是通过prop传递的,子组件传递数据给 ...