Amoeba数据库代理 实现mysql读写分离
Amoeba 依赖jdk centons7安装jdk8
目前Amoeba for Mysql最新版本为amoeba-mysql-3.0.5-RC-distribution.zip。
安装过程很简单,只需要将zip压缩包解压至/usr/local/即可。若没有安装zip和unzip,可以通过centOS yum安装。
接下来,解压Amoeba压缩包。
[root@chenllcentos ~]# unzip amoeba-mysql-3.0.5-RC-distribution.zip
[root@chenllcentos ~]# cp -rf amoeba-mysql-3.0.5-RC /usr/local
启动Amoeba。
[root@chenllcentos ~]# /usr/local/amoeba-mysql-3.0.5-RC/bin/launcher
但是提示出现fatal exception:
The stack size specified is too small, Specify at least 228k
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.
从错误文字上看,应该是由于stack size太小,导致JVM启动失败,要如何修改呢?
其实Amoeba已经考虑到这个问题,并将JVM参数配置写在属性文件里。现在,让我们通过该属性文件修改JVM参数。
修改jvm.properties文件JVM_OPTIONS参数。
[root@chenllcentos ~]# vi /usr/local/amoeba-mysql-3.0.5-RC/jvm.properties
将内容:
JVM_OPTIONS="-server -Xms256m -Xmx1024m -Xss196k -XX:PermSize=16m -XX:MaxPermSize=96m"
替换为:
JVM_OPTIONS="-server -Xms1024m -Xmx1024m -Xss256k -XX:PermSize=16m -XX:MaxPermSize=96m"
再次启动Amoeba。
[root@chenllcentos ~]# /usr/local/amoeba-mysql-3.0.5-RC/bin/launcher
若使用Amoeba完成读写分离,需要分别对dbServers.xml和amoeba.xml两个配置文件进行配置。与在应用层实现读写分离不同,使用Amoeba实现读写分离只需要修改配置文件,并不会产生硬编码耦合,有利于系统扩展和维护。
首先是配置dbServers.xml,主要是配置真实Mysql数据库连接信息。
<?xml version="1.0" encoding="gbk"?><!DOCTYPE amoeba:dbServers SYSTEM "dbserver.dtd">
<amoeba:dbServers xmlns:amoeba="http://amoeba.meidusa.com/"><!-- 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 factoryConfigsuch as 'multiPool' dbServer --><dbServer name="abstractServer" abstractive="true"><factoryConfig class="com.meidusa.amoeba.mysql.net.MysqlServerConnectionFactory"><property name="connectionManager">${defaultManager}</property><property name="sendBufferSize">64</property><property name="receiveBufferSize">128</property><!-- mysql port --><property name="port">3306</property><!-- mysql schema --><property name="schema">itcast</property><!-- mysql user --><property name="user">root</property><property name="password">root</property></factoryConfig><poolConfig class="com.meidusa.toolkit.common.poolable.PoolableObjectPool"><property name="maxActive">500</property><property name="maxIdle">500</property><property name="minIdle">1</property><property name="minEvictableIdleTimeMillis">600000</property><property name="timeBetweenEvictionRunsMillis">600000</property><property name="testOnBorrow">true</property><property name="testOnReturn">true</property><property name="testWhileIdle">true</property></poolConfig></dbServer><dbServer name="master" parent="abstractServer"><factoryConfig><!-- mysql ip --><property name="ipAddress">192.168.96.130</property></factoryConfig></dbServer><dbServer name="slave1" parent="abstractServer"><factoryConfig><!-- mysql ip --><property name="ipAddress">192.168.96.131</property></factoryConfig></dbServer><dbServer name="slave2" parent="abstractServer"><factoryConfig><!-- mysql ip --><property name="ipAddress">192.168.96.132</property></factoryConfig></dbServer><dbServer name="readPool" virtual="true"><poolConfig class="com.meidusa.amoeba.server.MultipleServerPool"><!-- Load balancing strategy: 1=ROUNDROBIN , 2=WEIGHTBASED , 3=HA--><property name="loadbalance">1</property><!-- Separated by commas,such as: server1,server2,server1 --><property name="poolNames">slave1,slave2</property></poolConfig></dbServer></amoeba:dbServers>
可以看出,对dbServers.xml文件的配置,主要就是对dbServer节点的配置。其中,readPool节点需要特别注意,因为Amoeba实现读写分离就是根据它来实现。接下来是amoeba.xml,主要是配置代理数据库连接信息。
<span style="font-size:18px;"><?xml version="1.0" encoding="gbk"?><!DOCTYPE amoeba:configuration SYSTEM "amoeba.dtd">
<amoeba:configuration xmlns:amoeba="http://amoeba.meidusa.com/"><proxy><!-- service class must implements com.meidusa.amoeba.service.Service --><service name="Amoeba for Mysql" class="com.meidusa.amoeba.mysql.server.MySQLService"><!-- port --><property name="port">8066</property><!-- bind ipAddress --><!-- <property name="ipAddress">127.0.0.1</property>--><property name="connectionFactory"><bean class="com.meidusa.amoeba.mysql.net.MysqlClientConnectionFactory"><property name="sendBufferSize">128</property><property name="receiveBufferSize">64</property></bean></property><property name="authenticateProvider"><bean class="com.meidusa.amoeba.mysql.server.MysqlClientAuthenticator"><property name="user">root</property><property name="password">root</property><property name="filter"><bean class="com.meidusa.toolkit.net.authenticate.server.IPAccessController"><property name="ipFile">${amoeba.home}/conf/access_list.conf</property></bean></property></bean></property></service><runtime class="com.meidusa.amoeba.mysql.context.MysqlRuntimeContext"><!-- proxy server client process thread size --><property name="executeThreadSize">128</property><!-- per connection cache prepared statement size --><property name="statementCacheSize">500</property><!-- default charset --><property name="serverCharset">utf8</property><!-- query timeout( default: 60 second , TimeUnit:second) --><property name="queryTimeout">60</property></runtime></proxy><!-- Each ConnectionManager will start as threadmanager responsible for the Connection IO read , Death Detection--><connectionManagerList><connectionManager name="defaultManager" class="com.meidusa.toolkit.net.MultiConnectionManagerWrapper"><property name="subManagerClassName">com.meidusa.toolkit.net.AuthingableConnectionManager</property></connectionManager></connectionManagerList><!-- default using file loader --><dbServerLoader class="com.meidusa.amoeba.context.DBServerConfigFileLoader"><property name="configFile">${amoeba.home}/conf/dbServers.xml</property></dbServerLoader><queryRouter class="com.meidusa.amoeba.mysql.parser.MysqlQueryRouter"><property name="ruleLoader"><bean class="com.meidusa.amoeba.route.TableRuleFileLoader"><property name="ruleFile">${amoeba.home}/conf/rule.xml</property><property name="functionFile">${amoeba.home}/conf/ruleFunctionMap.xml</property></bean></property><property name="sqlFunctionFile">${amoeba.home}/conf/functionMap.xml</property><property name="LRUMapSize">1500</property><property name="defaultPool">master</property><property name="writePool">master</property><property name="readPool">readPool</property><property name="needParse">true</property></queryRouter>
</amoeba:configuration>
</span>
在amoeba.xml中,主要完成连接信息和SQL路由配置。在queryRouter节点中,通过配置writePool和readPool可以实现读写分离。
配置完成后,重启Amoeba。
[root@chenllcentos ~]# /usr/local/amoeba-mysql-3.0.5-RC/bin/shutdown
[root@chenllcentos ~]# /usr/local/amoeba-mysql-3.0.5-RC/bin/launcher
至此,Mysql主从复制和使用Amoeba实现数据库读写分离全部配置完成。
读写分离验证
接下来,进行简单测试,验证以上配置是否能够正确运行。
登录master主数据库。
[root@chenllcentos ~]# mysql -uroot -proot -h192.168.96.130 -P8066
额外说明下,此处的yourpassword是连接Amoeba的密码,也就是在amoeba.xml配置文件中配置的密码,与Mysql密码不同,需要注意。
登陆后,此时会提示以下信息。
Server version: 5.1.45-mysql-amoeba-proxy-3.0.4-BETA Source distribution
说明已经成功连接Mysql代理Amoeba。
为了验证Amoeba读写分离配置是否生效,我们做一个简单的测试。
先在181服务器master服务器上创建一个表。
mysql> create table sxit (id int(10) ,name varchar(10));
而后,分别停止服务器B和服务器C两个从数据库的主从复制,便于数据库操作观察。
登陆服务器B从数据库。
[root@chenllcentos ~]# mysql -uroot -proot
停止从数据库主从复制。
mysql> slave stop;
登陆服务器C从数据库。
[root@chenllcentos ~]# mysql -uroot -proot
停止从数据库主从复制。
mysql> slave stop;
在主数据库插入。
mysql> insert into sxit values('1','zhangsan');
在从数据库B插入。
mysql> insert into sxit values('2','lisi');
在从数据库C插入。
mysql> insert into sxit values('3','john');
登陆到amoeba服务器,进行读写分离的测试:
[root@chenllcentos ~]# mysql -uroot -proot -h192.168.96.130 -P8066
mysql> use test;
mysql> select * from sxit;
+------+------+
| id | name |
+------+------+
| 2 | lisi |
+------+------+
mysql> select * from sxit;
+------+------+
| id | name |
+------+------+
| 3 | john |
+------+------+
重复执行多次,发现始终只显示从数据库的数据,说明如果进行数据库读操作,Amoeba只将读数据SQL命令路由至从数据库。
登录主数据库。
[root@chenllcentos ~]# mysql -uroot -proot
mysql> use test;
mysql> select * from sxit;
+------+----------+
| id | name |
+------+----------+
| 1 | zhangsan |
+------+----------+
可以验证,使用Amoeba对Mysql读写分离成功。若此时开启从数据库主从复制,则可以进行Mysql集群和负载均衡。
小结
使用Amoeba做数据库代理,对于应用层来说是透明的。所谓透明,可以这么简单理解,是否使用代理,在应用层编码上是没有任何区别的,即使用代理的情况下,应用层和数据层能够保持高度解耦
Amoeba数据库代理 实现mysql读写分离相关推荐
- 【MySQL】Gaea 数据库中间件实现 MySQL 读写分离
声明: 以下内容是学习macro作者的文章,作者原创文章链接:你还在代码里做读写分离么,试试这个中间件吧! 下面夹杂了我自己运行过程中的错误与心得,能运行成功 传统的MySql读写分离方案是通过在代码 ...
- mysql amoeba 配置_Amoeba新版本MYSQL读写分离配置
官方简介 Amoeba的中文意思是变型虫 主要解决: • 降低 数据切分带来的复杂多数据库结构 • 提供切分规则并降低 数据切分规则 给应用带来的影响 • 降低db 与客户端的连接数 • 读写分离 个 ...
- 后端传输大量log数据_京东智联云MySQL读写分离最佳实践 ,轻松搞定数据库高性能扩展...
数字化时代,数据库对任何企业而言都是其应用的核心资源.MySQL作为当前最流行的关系型数据库,虽然是开源软件,但是其简单易懂.易于部署管理,且具有ACID特性.强大的SQL查询等特点,被各种业务系统作 ...
- 京东智联云MySQL读写分离最佳实践 ,轻松搞定数据库高性能扩展
云妹导读: 互联网公司业务往往都有着高并发.大数据量等特点,为了在激烈的市场竞争中占得先机,需要不断推陈出新,并做大量的促销运营活动.但由于互联网的特殊性,企业无法提前预判这些活动给技术架构带来的压力 ...
- amoeba mysql下载_amoeba数据库中间件透明实现MYSQL读写分离
Amoeba(变形虫)项目,该开源框架于2008年 开始发布一款 Amoeba for Mysql软件.这个软件致力于MySQL的分布式数据库前端代理层,它主要在应用层访问MySQL的 时候充当SQL ...
- mysql读写分离_Mysql数据库09MySQL读写分离
Mysql数据库09-MySQL读写分离 一.读写分离应用案例分析 在企业用户中,在大量的数据请求下,单台数据库将无法承担所有读写操作.解决方法:配置多台数据库服务器以实现主从复制+读写分离. 二.读 ...
- mysql微服务查询问题_微服务架构下,Mysql读写分离后,数据库CPU飙升卡壳问题解析...
前言 最近系统(基于SpringCloud+K8s)上线,运维团队早上8点左右在群里反馈,系统登录无反应!我的第一反应是Mysql数据库扛不住了. 排查问题也是一波三折,有网络问题,也有mysql读写 ...
- docker二进制安装mysql_Docker搭建MySQL读写分离主从模式 分布式数据库中间件Mycat分库分表应用...
一.MySQL读写分离主从模式 1. 下载镜像 docker pull mysql 当前最新版本:mysql Ver 8.0.19 for Linux on x86_64 (MySQL Communi ...
- Mycat分布式数据库架构解决方案--搭建MySQL读写分离环境--一主多从
Mycat分布式数据库架构解决方案--搭建MySQL读写分离环境--一主多从 参考文章: (1)Mycat分布式数据库架构解决方案--搭建MySQL读写分离环境--一主多从 (2)https://ww ...
最新文章
- python 获取用户ip_Python爬虫教程:你还在苦苦拉票吗?刷票小程序案例原理剖析!...
- freemaker页面字符串特殊字符显示异常处理
- android 强制打开gps定位_Android 6.0 默认关闭定位和GPS,开启后默认选省电
- terminate和quit导致串口资源被占用
- Android应用开发之(通过ClipboardManager, ClipData进行复制粘贴)
- linux dns配置bind9,DNS服务(bind9)配置过程
- 前端JavaScripts基础知识点轮播图
- Tpcc-MySQL测试
- MATLAB学习笔记(十三)
- 冻结行_Excel如何冻结窗口
- 自带的jvm监控不准_如何实时监控 Flink 集群和作业?
- 这『六本』电子书能帮助你成为优秀的程序员(含下载地址)
- 第五十六题(最长公共子串)
- CString转换成const char*
- RAIM (GNSS完好性监测算法合集)
- HBase权威指南,架构:存储
- idea格式化代码小技巧
- QT5.12.0 程序在中标麒麟(neokylin)系统问题处理
- 【Strategy模式】C++设计模式——策略模式
- Ubuntu双系统卸载教程
热门文章
- linux改文件权限为root,Linux创建root不可修改删除而只可追加权限的文件
- C#网站图片下载器,网络爬虫,仅供学习参考使用,不可用于商业活动
- 做为一个好人 你应该看这部电影
- java 浏览器 qq_Qq浏览器通用版移动QQ浏览器v2.1Java通用版下载
- loadrunner入门教程(4) --loadrunner的下载
- 微信小程序Ⅴ [获取登录用户信息,重点openID(详解)]
- 软件开发之硬件扫盲篇)固态硬盘需要了解的知识
- 关于凸函数求最大值的下标的小讨论(斐波那契优选法/二分法/三分法)
- 【Antdv】input type=number去掉上下箭头、提示文字、鼠标滚轮
- Linux Overview