博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
amoeba + mysql 学习笔记
阅读量:5076 次
发布时间:2019-06-12

本文共 5487 字,大约阅读时间需要 18 分钟。

 学习资料: 陈思儒——《Amoeba》

分布式数据库系统的优点:

1、降低费用。分布式数据库在地理上可以式分布的。其系统的结构符合这种分布的要求。允许用
户在自己的本地录用、查询、维护等操作,实行局部控制,降低通信代价,避免集中式需要更高要求
的硬件设备。而且分布式数据库在单台机器上面数据量较少,其响应速度明显提升。
2、提高系统整体可用性。避免了因为单台数据库的故障而造成全部瘫痪的后果。
3、易于扩展处理能力和系统规模。分布式数据库系统的结构可以很容易地扩展系统,在分布式数
据库中增加一个新的节点,不影响现有系统的正常运行。这种方式比扩大集中式系统要灵活经济。在
集中式系统中扩大系统和系统升级,由于有硬件不兼容和软件改变困难等缺点,升级的代价常常是昂
贵和不可行的。

Amoeba 是什么 [英][əˈmi:bə][美][əˈmibə]

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

主要解决问题:

  • Built on Java NIO:采用java NIO 框架无阻塞模式,不像传统的Socket编程在大量并发的情况非常浪费系统资源、
    而且可扩展性也较差

  注:Java NIO 简介

    nio是java New IO的简称,在jdk1.4里提供的新api。Sun官方标榜的特性如下:

    –    为所有的原始类型提供(Buffer)缓存支持。

    –    字符集编码解码解决方案。

    –    Channel:一个新的原始I/O抽象。

    –    支持锁和内存映射文件的文件访问接口。

    –    提供多路(non-bloking)非阻塞式的高伸缩性网络I/O。

  • Reusable Server Connection(可重复使用的服务器连接):Amoeba 提供与数据库连接的可重用度非常高,在Amoeba系统内Database Connection同时共享给所有连接到Amoeba的客户端
  • 提供读写分离、数据切分

    1. 传统的读写分离技术需要通过客户端或者相关的Database Driver技术才能解决,而且客户端的

      配置也比较复杂
    2. 单台Database 性能总是有限制的,基于Amoeba上面可以寻找一种可线性扩展的多数据库支持。
      Amoeba为DBA提供一种非常友好的类似SQL语法的数据切分规则同时客户端不用担心过多的
      DataBase Server会给应用带来更多的配置。

  • 支持高可用性、负责均衡

    1. Amoeba 提供Database 连接的异常检测与连接恢复功能。

    2. 用户可节省使用其他昂贵的负载均衡的硬件设备,Amoeba提供多台Database Server负载均衡策略
      (轮询、当前活动连接数量)

Amoeba For Mysql

先决条件:

  1. Java SE 1.5 或以上 Amoeba 框架是基于JDK1.5开发的,采用了JDK1.5的特性。
  2. 支持Mysql 协议版本10(mysql 4.1以后的版本)。
  3. 您的网络环境至少运行有一个mysql 4.1以上的服务。

 

快速配置

  1. 配置Server
配置项 是否必选 默认值 说明
  8066 amoeba server绑定的对外端口
ipAddress Amoeba绑定的IP
user 客户端连接到Amoeba的用户名
password 客户端连接到Amoeba的密码
readThreadPoolSize 16 负责读客户端、database server端网络数据包线程数
clientSideThreadPoolSize 16 负责读执行客户端请求的线程数
serverSideThreadPoolSize 16 负责处理服务端返回数据包的线程数

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

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

   factoryConfig——目标物理数据库衍射配置情况:

配置项 是否必选 默认值 说明
manager 表示该dbServer将注册到指定的ConnectionManager
port 3306 目标数据库端口
ipAddress 127.0.0.1 目标数据库IP
schema 连接初始化的Schema
user 用于登录目标数据库的用户名
password 用于登录目标数据库的密码
class

连接工厂实现类

(com.meidusa.amoeba.mysql.net.MysqlServerConnectionFactory)

 

 

 

 

 

 

 

 

 

  4. poolConfig——连接池配置

配置项 是否必选 默认值 说明
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)

 

  

 

 

 

 

 

 

dbServer Tag Configuration

 

defaultManager
3301
127.0.0.1
root
password
test
200
200
10
600000
600000
true
true
defaultManager
3302
127.0.0.1
blog
blog
test
200
200
10
600000
600000
true
true
<
defaultManager
3303
127.0.0.1
root
password
test
200
200
10
600000
600000
true
true
1
server1,server2,server3

  5. QueryRouter查询路由配置:

配置项 是否必选 默认值 说明
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

 

 

 

 

 

 

 

 

Master/Slave结构之下的读写分离:

Master:master(1个主数据库,可读写)

Slave:slave1,slave2(2个从数据库,只读/负载均衡)

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

1
slave1,slave2

如果不启用数据切分,那么只需要配置QueryRouter属性writePool = master   readPool = virtualSlave

1500
master
master
virtualSlave
true

那么遇到update / insert / delete 将query 语句发送到 writePool ,将 select 发送到 readPool 机器中执行。

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/cczhoufeng/archive/2012/12/12/2814609.html

你可能感兴趣的文章
历届试题 大臣的旅费
查看>>
优化SQL查询:如何写出高性能SQL语句
查看>>
迭代器-Iterator
查看>>
开学收好这 17 种工具 App,让你新学期学习更有效率
查看>>
html设定快捷键
查看>>
基于HTML5 audio元素播放声音jQuery小插件
查看>>
background-origin 设置背景图片原始起始位置
查看>>
Navicat 在MySQL中建表查询scott实例之员工表dbo_emp
查看>>
POJ - 1850 B - Code
查看>>
oracle Linux 7.4 oracle-database-preinstall-18c
查看>>
电商支付架构设计
查看>>
(2)理解neutron ml2---network创建流程源码解析
查看>>
Django CSRF提交遇见的问题
查看>>
学习笔记51_MongoDB使用
查看>>
证书打印CSS知识点总结
查看>>
Linux 磁盘分区及挂载
查看>>
解析java实体类
查看>>
IDEA的使用
查看>>
安装DotNetCore.1.0.1-VS2015Tools.Preview2.0.2出现0x80072f8a未指定的错误
查看>>
POJ 2003 Hire and Fire (Tree)
查看>>