Amoeba+mysql实现读写分离

Amoeba实现mysql读写分离 一、关于读写分离 amoeba : 英[ə’mi:bə] 读写分离(Read/Write Splitting),基本的原理是让主数据库处理事务性增、改、删操作(INSERT、UPDATE、DELETE),而从数据库处理SELECT查询操作。 数据库复制被用来把事务性操作导致的变更同步到集群中的从数据库。 二、Amoeba 是什么 Amoeba(变形虫)项目,专注 分布式数据库 proxy 开发。座落与Client、DB Server(s)之间。对客户端透明。具有负载均衡、高可用性、sql过滤、读写分离、可路 阅读详情
 

安装mysql的过程和配置主从备份的过程在这里都不详细说了

说明:master主机:192.168.0.136 slave主机:192.168.0.135  amoeba主机和master在同一台主机上面

1,  首先要安装jdk环境,                      在0.136上安装

下载jdk1.5或者更新版本,地址 http://java.sun.com/javase/downloads/index.jsp

我用的是:jdk-6u20-linux-i586-rpm.bin

在Amoeba server上执行

chmod +x jdk-6u20-linux-i586-rpm.bin

./ jdk-6u20-linux-i586-rpm.bin

然后按n次空格键,然后输入yes就可以了!^_ ^

ln -s /usr/java/jdk1.6.0_20/ /usr/java/jdk1.6

vi /etc/profile

#添加如下两行内容

export JAVA_HOME=/usr/java/jdk1.6

export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH

#执行下面的命令使更改的内容生效

source /etc/profile

 

2,安装amoeba-mysql

安装amoeba-mysql

下载amoeba-mysql,目前最新版本为amoeba-mysql-1.3.1-BETA.zip

Mkdir /usr/local/amoeba               amoeb的安装目录

下载地址:http://blogimg.chinaunix.net/blog/upfile2/101027160252.zip

unzip 101027160252.zip

配置文件位于conf目录下,执行文件位于bin目录下,解压后发现bin目录下的启动文件没有可执行权限,

请执行:chmod -R +x /usr/local/amoeba/bin/

Amoeba For MySQL  的使用非常简单,所有的配置文件都是标准的XML文件,总共有四个配置文件。分别为:

◆amoeba.xml:主配置文件,配置所有数据源以及Amoeba 自身的参数设置;实现主从的话配置这个文件就可以了;

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

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

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

下面我们就来通过更改amoeba.xml配置文件实现mysql主从读写分离,我的配置如下:

<?xml version="1.0" encoding="gbk"?>

<!DOCTYPE amoeba:configuration SYSTEM "amoeba.dtd">
<amoeba:configuration xmlns:amoeba="http://amoeba.meidusa.com/">

       <server>
      <!-- proxy server绑定的端口 对外的端口-->
      <property name="port">8066</property>
                                       
      <!-- proxy server绑定的IP  对外的IP地址-->
      <property name="ipAddress">192.168.0.136</property>

说明:这个ip地址是amoeba安装的ip地址
      <!-- proxy server net IO Read thread size -->
      <property name="readThreadPoolSize">20</property>
                                                  
      <!-- proxy server client process thread size -->
      <property name="clientSideThreadPoolSize">30</property>
                                             
      <!-- mysql server data packet process thread size -->
      <property name="serverSideThreadPoolSize">30</property>
                                                    
      <!-- socket Send and receive BufferSize(unit:K)  -->
      <property name="netBufferSize">128</property>
                                                 
      <!-- Enable/disable TCP_NODELAY (disable/enable Nagle's algorithm). -->
      <property name="tcpNoDelay">true</property>
                                                
      <!-- 对外验证的用户名 -->
      <property name="user">root</property>

      <!-- 对外验证的密码 -->
      <property name="password">password</property>
                                                 
      <!-- query timeout( default: 60 second , TimeUnit:second) -->
      <property name="queryTimeout">60</property>
      </server>
                                                        
      <!-- 
      每个ConnectionManager都将作为一个线程启动。
      manager负责Connection IO读写/死亡检测
      -->
      <connectionManagerList>
      <connectionManager name="defaultManager"     class="com.meidusa.amoeba.net.MultiConnectionManagerWrapper">
      <property name="subManagerClassName">com.meidusa.amoeba.net.AuthingableConnectionManager</property>
 
      <!-- 
      default value is avaliable Processors 
      <property name="processors">5</property>
      -->
      </connectionManager>
      </connectionManagerList>
                                                
      <dbServerList>
      <!-- 
      一台mysqlServer 需要配置一个pool,
      如果多台 平等的mysql需要进行loadBalance, 
      平台已经提供一个具有负载均衡能力的objectPool:com.meidusa.amoeba.mysql.server.MultipleServerPool
      简单的配置是属性加上 virtual="true",该Pool 不允许配置factoryConfig
      或者自己写一个ObjectPool。
       -->
     <dbServer name="server1">
                                                   
     <!-- PoolableObjectFactory实现类 -->
      <factoryConfig class="com.meidusa.amoeba.mysql.net.MysqlServerConnectionFactory">
      <property name="manager">defaultManager</property>
                                                       
       <!-- 真实mysql数据库端口 -->
        <property name="port">3306</property>
                                                      
         <!-- 真实mysql数据库IP -->
          <property name="ipAddress">192.168.0.136</property>
          <property name="schema">brook</property>
   说明:test为读写分离即是主从备份的数据库名称   (其实这里面只是一个测试数据库,在登录用户名下的所有数据库amoeba都可以访问)                                                
           <!-- 用于登陆mysql的用户名 -->
          <property name="user">root</property>
                                                          
           <!-- 用于登陆mysql的密码 -->
                                                        
           <property name="password">password</property>
                                                         
            </factoryConfig>
           
            <!-- ObjectPool实现类 -->
            <poolConfig class="com.meidusa.amoeba.net.poolable.PoolableObjectPool">
            <property name="maxActive">200</property>
            <property name="maxIdle">200</property>
            <property name="minIdle">10</property>
       <property name="minEvictableIdleTimeMillis">600000</property>
       <property name="timeBetweenEvictionRunsMillis">600000</property>
       <property name="testOnBorrow">true</property>
       <property name="testWhileIdle">true</property>
       </poolConfig>
       </dbServer>
                                                              
                                                              
       <dbServer name="server2">
 
        <!-- PoolableObjectFactory实现类 -->
        <factoryConfig class="com.meidusa.amoeba.mysql.net.MysqlServerConnectionFactory">
         <property name="manager">defaultManager</property>
                                                       
         <!-- 真实mysql数据库端口 -->
         <property name="port">3306</property>
                                                               
         <!-- 真实mysql数据库IP -->
         <property name="ipAddress">192.168.0.135</property>
         <property name="schema">brook</property>
  说明:读写分离的数据库                                                               
         <!-- 用于登陆mysql的用户名 -->
         <property name="user">root</property>
                                                                 
         <!-- 用于登陆mysql的密码 -->
                                                                 
           <property name="password">password</property>

           </factoryConfig>
                                                                 
          <!-- ObjectPool实现类 -->
          <poolConfig class="com.meidusa.amoeba.net.poolable.PoolableObjectPool">
          <property name="maxActive">200</property>
          <property name="maxIdle">200</property>
          <property name="minIdle">10</property>
          <property name="minEvictableIdleTimeMillis">600000</property>
          <property name="timeBetweenEvictionRunsMillis">600000</property>
          <property name="testOnBorrow">true</property>
          <property name="testWhileIdle">true</property>
          </poolConfig>
          </dbServer>

        <dbServer name="master" virtual="true">
        <poolConfig class="com.meidusa.amoeba.server.MultipleServerPool">
      <!-- 负载均衡参数 1=ROUNDROBIN , 2=WEIGHTBASED , 3=HA-->
      <property name="loadbalance">1</property>
                                                                
      <!-- 参与该pool负载均衡的poolName列表以逗号分割 -->
      <property name="poolNames">server1</property>
      </poolConfig>
      </dbServer>
                                                                 
      <dbServer name="slave" virtual="true">
      <poolConfig class="com.meidusa.amoeba.server.MultipleServerPool">
      <!-- 负载均衡参数 1=ROUNDROBIN , 2=WEIGHTBASED , 3=HA-->
      <property name="loadbalance">1</property>
                                                                  
       <!-- 参与该pool负载均衡的poolName列表以逗号分割 -->
       <property name="poolNames">server1,server2</property>
       </poolConfig>
       </dbServer>
                                                                 
     </dbServerList>
                                                                 
  <queryRouter class="com.meidusa.amoeba.mysql.parser.MysqlQueryRouter">
  <property name="ruleConfig">${amoeba.home}/conf/rule.xml</property>
  <property name="functionConfig">${amoeba.home}/conf/functionMap.xml</property>
  <property name="ruleFunctionConfig">${amoeba.home}/conf/ruleFunctionMap.xml</property>
     <property name="LRUMapSize">1500</property>
     <property name="defaultPool">master</property>
                                                                 
     <property name="writePool">master</property>
     <property name="readPool">slave</property>
     <property name="needParse">true</property>
</queryRouter>
</amoeba:configuration>

 

启动amoeba

/usr/local/amoeba/bin/amoeba &

检验启动是否成功(使用的是默认的8066端口):

执行ps aux | grep amoeba

root     24580  0.2 19.2 408912 49264 pts/1    Sl   12:52   0:11 /usr/java/jdk1.6/bin/java -server -Xms256m -Xmx256m -Xss128k -Damoeba.home=/usr/local/amoeba -Dclassworlds.conf=/usr/local/amoeba/bin/amoeba.classworlds -classpath /usr/local/amoeba/lib/classworlds-1.0.jar org.codehaus.classworlds.Launche

 

netstat -lnp | grep java

tcp        0      0 ::ffff:192.168.1.159:8066   :::*                        LISTEN     24580/java

 

试之前先要保证amoeba-server有访问两个主从服务器test库的权限,在主从mysql上都执行:

grant all on brook.* to root@'192.168.0.%' identified by 'password';

#用户名密码要和前面配置的意志

flush privileges;

测试的时候和我们平时使用一样,amoeba-mysql对我们应用透明,就是个mysql的代理了!

登录mysql使用如下命令(用户名密码和上面配置的要一致):

mysql -uroot -ppassword -h192.168.0.136 -P8066

登录上去后,为了测试读和写必须,先把mysql的主从复制停掉,才能更清楚地看出读写的服务器是哪台,在从上使用stop slave;登录到amoeba-mysql上,使用命令mysql -uroot -ppassword -h192.168.0.136 -P8066,然后执行写和读操作,查看写的是哪台服务器,读的是哪台服务器,实验结果显示:写只在主上进行,读在主和从都进行,比率是1:1

 

# mysql -uroot -ppassword -h192.168.0.136 -P8066

Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 14556042

Server version: 5.1.45-mysql-amoeba-proxy-1.3.1-BETA Source distribution

说明:这个说明用代理登陆mysql

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

 

现在使用amoeba+mysql实现读写分离配置完成,可以写测试用例完成测试

使用Amoeba实现MySQL读写分离 读写分离是在高并发的数据库环境中提高性能和可扩展性的一种常用方法。Amoeba是一个开源的MySQL代理,它可以帮助实现MySQL的读写分离。本文将介绍如何使用Amoeba来实现MySQL读写分离,并提供相应的源代码。通过使用Amoeba代理,我们可以轻松实现MySQL的读写分离。在应用程序中执行读操作和写操作,然后查看MySQL的主从复制状态来验证是否实现了读写分离。现在,我们需要修改应用程序的配置文件,将数据库连接的地址和端口指向Amoeba代理。Amoeba代理将会监听配置文件中指定的地址和端口。 阅读详情

相关推荐

amoeba-mysql

Amoeba在分布式数据库领域将致力解决数据切分,应付客户端“集中式”处理分布式数据

Amoeba实现mysql主从读写分离

一直想找一个工具,能很好的实现mysql主从的读写分离架构,曾经试用过mysql-proxy发现lua用起来很不爽,尤其是不懂lua脚本,突然发现了Amoeba这个项目,试用了下,感觉还不错,写出文档,希望对大家有帮助!一、Amoeba 是什么Amoeba(变形虫)项目,专注 分布式数据库 proxy 开发。座落与Client、DB Server(s)之间。对客户端透明。具有负载均衡、高可用...

虚客 214

amoeba-mysql-3.0.4-BETA.tar.gz 实现集群管理 读写分离

Amoeba主要解决以下问题: a). 数据切分后复杂数据源整合 b). 提供数据切分规则并降低数据切分规则给数据库带来的影响 c). 降低数据库与客户端连接 d). 读写分离路由 通过Amoeba实现读写分离

amoeba mysql读写分离_mysql数据库-基于amoeba读写分离

环境:主机A( huangzp2):172.16.115.157主机B( huangzp3):172.16.115.100主机C( huangzp4):172.16.115.87说明:依赖于主从结构需要中间件(连接两个独立的应用程序或独立的系统,即使没有相同的接口,也能为他们交换数据)实现,如tomcat、weblogic、数据库中间件mysql proxy,支持读写分离、负载均衡、故障转移,缺点...

weixin_28876287的博客 279

amoeba-n.zip

amoeba和jdk安装包。以实现mysql集群的读写分离,提高存取效率。 amoeba和jdk安装包。以实现mysql集群的读写分离,提高存取效率。

高效网络流量回放:使用tcpreplay实现多目标IP的pcap重放

本文详细介绍了如何使用tcpreplay工具高效回放网络流量pcap文件,并实现多目标IP发送。通过tcprewrite编辑报文和并行回放策略,可满足安全测试、负载测试等场景需求。文章涵盖安装、基础回放、核心技巧及性能优化,帮助读者构建真实流量压力测试环境。

weixin_29297127的博客 479

​​​amoeba实现MySQL读写分离

​​​amoeba实现MySQL读写分离

虫虫的博客 1147

HP SPP download

是一个全面的系统软件和固件更新解决方案,以单个ISO映像的形式提供。该解决方案使用智能更新管理器(SUM)作为部署工具。

极致,细节 9857

mysql amoeba 事务_MySQL基于Amoeba实现读写分离

在实际的生活环境中,如果对数据库的读和写都在同一个数据库服务中操作,无论是在安全性,高可用还是高并发等各个方面都不能完全满足实际需求的,因此一般来说都是通过主从复制的方式来同步数据,再通过读写分离来提升数据的高并发负载能力这样的方案来进行部署。读写分离就是只在主服务器上写,只在从服务器上读,基本的原理是让主数据库处理事务性查询,而从数据库处理select查询,数据库复制被用来把事务性查询导致的改变...

weixin_39638801的博客 224

Cursor+Playwright MCP实现UI全自动化,告别繁琐元素定位!

摘要:本文探讨了利用Cursor和PlaywrightMCP实现UI自动化测试的创新方法。通过将AI编程助手与浏览器自动化技术结合,解决了传统UI自动化测试中元素定位繁琐、维护成本高等痛点。文章详细介绍了项目架构设计、AI使用技巧(包括精准提问和编写.mdc规则文档),以及如何实现自然语言测试用例到自动化脚本的转换。最终实现了测试人员只需输入手工测试步骤,AI即可自动生成完整测试代码的智能化流程,并展望了通过Excel表格一键生成测试用例的未来发展方向,为UI自动化测试提供了高效解决方案。

baidu_29774881的博客 2793

System Verilog学习笔记(十九)——覆盖率

覆盖率是用来衡量验证精度和完备性的数据指标。也可以告诉我们在仿真时设计的哪些结构被触发,哪些没被触发。高质量的验证需要满足以下三个条件。

ljy77882333的博客 2142

Amoeba 实现MySQL读写分离

Amoeba是一个以MySQL为底层数据存储,并对应用提供MySQL协议接口的proxy,它集中地响应应用的请求,依据用户事先设置的规则,将SQL请求发送到特定的数据库上执行.基于此可以实现负载均衡、读写分离、高可用性等需求,与MySQL官方的MySQL Proxy相比,作者强调的是amoeba配置的方便.

微软技术分享 1万+

ESD 防护深度解析:模型、等级、系统设计与防护策略

本文系统阐述了静电放电(ESD)防护的核心技术体系。首先对比分析了HBM(人体模型)和CDM(充电设备模型)两种基础ESD模型的物理特性、测试标准及分级要求,指出相同电压下CDM的破坏性是HBM的15-20倍。其次详细解析了IEC61000-4-2系统级ESD标准,包括接触/空气放电测试方法及判定等级。重点提出了系统级防护的三层架构:空间隔离(≥10mm间距)、电气隔离(地平面分割)和TVS管选型(响应时间<1ns),并对比了MOV、SCR等防护器件特性。针对不同应用场景(消费电子、工业控制等)给出了差异化

bother3000的博客 1882

【Amoeba】amoeba实现mysql读写分离

centos7:amoeba实现mysql读写分离。

喜欢你,像风走了八千里 不问归期 3454

[网络安全自学篇] 六十八.WannaCry勒索病毒复现及分析(二)MS17-010利用及病毒解析

这是作者的网络安全自学教程系列,主要是关于安全工具和实践操作的在线笔记,特分享出来与博友们学习,希望您们喜欢,一起进步。前文分享了通过Python利用永恒之蓝漏洞加载WannaCry勒索病毒,并实现对Win7文件加密的过程,但过程较为复杂,为什么不直接利用永恒之蓝呢?所以,这篇文章将直接分享MSF利用MS17-010漏洞进行反弹Shell,再上传勒索病毒进行实验复现,并详细讲解WannaCry勒索病毒的原理。基础性文章,希望对您有所帮助。

杨秀璋的专栏 1万+

C#上位机性能优化全攻略:彻底解决界面卡顿+多线程死锁+PLC数据延迟,产线实测稳定运行2年

一开始我们用的是网上找的零散优化代码,根本满足不了要求,后来花了2个月的时间,把之前27条产线的代码整理、重构、优化,做了一套这套方案上线后,连续稳定运行2年零3个月:界面响应时间稳定在50ms以内,多线程死锁率持续为0,PLC数据延迟稳定在150ms以内,系统可用率≥99.99%,帮客户一年省下了超过480万的停线损失、罚款损失和人工成本,客户第二年就把剩下的22条产线也全部交给我们做了,还介绍了3家同行。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 293

amoeba实现mysql主从读写分离_Amoeba实现mysql主从读写分离

defaultManager330610.10.0.77testtest12345620020010600000600000truetrue1server11property name="poolNames">server1,server2${amoeba.home}/conf/rule.xml${amoeba.home}/conf/functionMap.xml${amoeba.home}...

weixin_26766559的博客 167

C语言程序设计——单词的统计和替换

【任务描述】 对任意一篇英文文章,统计其中每个单词分别出现了多少次,并可替换指定的单词。⑶ 对单词进行替换时,允许用户选择全部替换或逐个替换。替换完成后,将文章保存到文件。⑴ 英文文章以文件形式输入。⑵ 统计的结果保存到文件。

m0_60738889的博客 810

使用amoeba实现mysql读写分离

使用amoeba实现mysql读写分离 1、什么是amoeba? ​ Amoeba(变形虫)项目,专注 分布式数据库 proxy 开发。座落与Client、DB Server(s)之间。对客户端透明。具有负载均衡、高可用性、sql过滤、读写分离、可路由相关的query到目标数据库、可并发请求多台数据库合并结果。 主要解决: • 降低 数据切分带来的复杂多数据库结构 • 提供切分规则并降低 数据切...

爱笑的k11的博客 363

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

mysql 读写分离 amoeba_MySQL之-基于Amoeba实现读写分离详解(图文)

今天,我们继续MySQL的话题,今天为大家带来一篇基于Amoeba实现MySQL读写分离的方案文章,好我们直接进入今天的正题吧。一、服务器规划主机名IP地址节点liuyazhuang152192.168.0.152amoebaliuyazhuang153192.168.0.153写库liuyazhuang154192.168.0.154读库二、测试方案我们在192.168.0.152上安装amoe...

weixin_39637614的博客 306

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

amoeba mysql读写分离_Amoeba实现Mysql读写分离

环境规划Amoeba读写分离器172.16.254.144/16Mysql服务器(master)172.16.254.150/16Mysql服务器(slave)172.16.254.151/16一、先实现mysql主从复制,在master上使用yum安装mysql[root@localhost mysql]# yum -y install mysql mysql-server启用二进制日志,编辑/...

weixin_39732991的博客 231

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

使用Amoeba实现mysql读写分离

使用amoeba实现mysql读写分离 1、什么是amoeba? ​ Amoeba(变形虫)项目,专注 分布式数据库 proxy 开发。座落与Client、DB Server(s)之间。对客户端透明。具有负载均衡、高可用性、sql过滤、读写分离、可路由相关的query到目标数据库、可并发请求多台数据库合并结果。 主要解决: • 降低 数据切分带来的复杂多数据库结构 • 提供切分规则并降低 数据切分规则 给应用带来的影响 • 降低db 与客户端的连接数 • 读写分离 2、为什么要用Amoeba 目前要实现m

Add小兵的博客 249

mysql amoeba_MySQL基于Amoeba实现读写分离

读写分离应用分析:在企业用户中,在大量的数据请求下,单台数据库将无法承担所有读写操作。解决方法:配置多台数据库服务器以实现主从复制+读写分离。1、基于程序代码内部实现在代码中根据select、 insert 进行路由分类,这种方法目前生产环境中应用最广泛。优点是性能较好,因为在程序代码中实现,不需要增加额外的设备作为硬件开支。缺点是需要开发人员能来实现,运维人员无从下手。2、基于中间代理层实现代理...

weixin_42503881的博客 242

MySQL之——基于Amoeba实现读写分离

今天,我们继续MySQL的话题,今天为大家带来一篇基于Amoeba实现MySQL读写分离的方案文章,好我们直接进入今天的正题吧。 一、服务器规划 主机名 IP地址 节点 liuyazhuang152 192.168.0.152 amoeba liuyazhuang153 192.168.0.153 写库 liuyazhuang154

冰河的专栏 2446

Amoeba实现MySQL读写分离

配置 安装JDK和amoeba 1.上传jdk安装包到服务器 2.安装jdk chmod +x jdk-6u14-linux-x64.bin ./jdk-6u14-linux-x64.bin 一路空格输入yes同意协议即可 mv jdk1.6.0_14 /usr/local/jdk1.6 配置环境变量 vim /etc/profile 文件末尾追加 从新载入文件 source /etc...

天涯ur的博客 255
上一篇: nginx+tomcat+session复制(linux)
下一篇: 检测sqlserver2005性能瓶颈
dabao_java
博客等级 码龄19年 35粉丝 28原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值