使用amoeba实现mysql读写分离

简介: amoeba
1.什么是amoeba?

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

优点:

• 降低数据切分带来的复杂多数据库结构

• 提供切分规则并降低 数据切分规则 给应用带来的影响

• 降低db与客户端的连接数

• 读写分离

2.amoeba的部署安装
 准备:
主机 IP地址
master(主数据库):负责写入操作 10.0.0.201
slave(从数据库):负责读取操作 10.0.0.202
amoeba 10.0.0.41
client(客户端) 10.0.0.31

系统:CentOS7

JDK:版本1.5以上,实验用的是jdk1.8

MySQL:版本5.7

Amoeba:amoeba-mysql-3.0.5-RC

(1)安装JDK(amoeba主机)

#下载jdk包
wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.rpm
#安装jdk并配置环境变量
rpm -ivh jdk-8u131-linux-x64.rpm
#vim /etc/profile
#底部添加:
export JAVA_HOME=/usr/java/jdk1.8.0_221-amd64
export PATH="$JAVA_HOME/bin:$PATH"

source /etc/profile #(使环境变量立即生效)

(2)安装amoeba

#下载软件包
wget https://sourceforge.net/projects/amoeba/files/Amoeba%20for%20mysql/3.x/amoeba-mysql-3.0.5-RC-distribution.zip
#安装
yum install unzip zip -y #已安装请忽略
unzip amoeba-mysql-3.0.5-RC-distribution.zip -d /usr/local/amoeba #解压软件包到/usr/local下
#配置环境变量
#vim /etc/profile
#底部添加:
export AMOEBA_HOME=/usr/local/amoeba/amoeba-mysql-3.0.5-RC
export PATH=$PATH:$AMOEBA_HOME/bin

source /etc/profile #立即生效
#给amoeba授权mysql远程账户
#实验中使用的是root用户,实际工作中根据需要配置
4.配置文件

(1)conf/dbServers.xml

#设置amoeba要连接mysql数据库的端口,默认3306
<property name="port">3306</property>
#设置缺省的数据库
<property name="schema">test_1</property>
#设置amoeba连接后端数据库服务器的账户密码
 <property name="user">root</property>
 <property name="password">123456</property>
#设置后端可写的数据库
 <dbServer name="writedb"  parent="abstractServer">
    factoryConfig>
        <!-- mysql ip -->
         <property name="ipAddress">10.0.0.201</property>  
    </factoryConfig>
</dbServer>
#设置后端可读的数据库
<dbServer name="slave"  parent="abstractServer">
    <factoryConfig>
        <!-- mysql ip -->
        <property name="ipAddress">10.0.0.202</property> 
    </factoryConfig>
</dbServer>
#定义一个虚拟的dbserver,相当于一个dbserver组,将可读的数据库ip统一放到一个组内
<dbServer name="myslave" virtual="true">
    <poolConfig class="com.meidusa.amoeba.server.MultipleServerPool">
        <property name="loadbalance">1</property> #选择调度算法,1表示复制均衡,2表示权重,3表示HA
        <property name="poolNames">slave</property> #myslave组成员
    </poolConfig>
</dbServer>

(2)conf/amoeba.xml

#设置amoeba监听的端口,默认8066
<property name="port">8066</property>
#配置客户端连接amoeba时的账号,与后端服务器密码无关
   <property name="user">root</property>
   <property name="password">123456</property>
   
#设置amoeba默认的池   
<property name="defaultPool">writedb</property>
#取消注释,这里用来指定前面定义好的两个读写池
<property name="writePool">writedb</property>
<property name="readPool">myslave</property>

(3)./jvm.properties

#占用内存配置文件,Xss必须大于228才能启动JVM
JVM_OPTIONS="-server -Xms256m -Xmx1024m -Xss256k -XX:PermSize=16m -XX:MaxPermSize=96m"
5.启动amoeba
/bin/launcher
6.测试amoeba(client)
#在客户端登录amoeba
mysql -h10.0.0.41 -uroot -p123456 -P8066
use test_1;
select * from dept;
#在amoeba上插入数据
insert into dept values(2,2);
#在master和slave上分别查看表中的数据
select * from dept;
#将master上的mysql服务停止,继续插入数据会发现插入不成功,但是能够查询
#将master上的msyql服务开启,停止slave上的mysql,发现插入成功,但是不能够查询
mysql> select * from aaa;
ERROR 1044 (42000): poolName=myslave, no valid pools
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
目录
相关文章
|
负载均衡 监控 关系型数据库
MySQL 官宣:支持读写分离了!!
【10月更文挑战第8天】MySQL的读写分离功能显著提升了数据库性能、可用性和可靠性。通过将读写操作分配至不同服务器,有效减轻单个服务器负载,提高响应速度与吞吐量,并增强系统稳定性。此外,它还支持便捷的扩展方式,可通过增加只读服务器提升读操作性能。实现读写分离的方法包括软件层面(如使用数据库中间件)和硬件层面(使用独立服务器)。使用时需注意数据一致性、负载均衡及监控管理等问题。
748 0
|
SQL 关系型数据库 MySQL
如何实现 MySQL 的读写分离?
本文介绍了 MySQL 读写分离的实现方式及其主从复制原理,解释了如何通过主从架构提升读并发能力。重点分析了主从同步延时问题及解决方案,如半同步复制、并行复制等技术手段,并结合实际案例探讨了高并发场景下的优化策略。文章还提醒开发者在编写代码时需谨慎处理插入后立即查询的情况,避免因主从延时导致的数据不一致问题。
1532 44
如何实现 MySQL 的读写分离?
|
关系型数据库 MySQL Java
MySQL主从复制实现读写分离
MySQL主从复制(二进制日志)、 Sharding-JDBC实现读写分离
MySQL主从复制实现读写分离
|
SQL 关系型数据库 MySQL
(二十五)MySQL主从实践篇:超详细版读写分离、双主热备架构搭建教学
在上篇《主从原理篇》中,基本上把主从复制原理、主从架构模式、数据同步方式、复制技术优化.....等各类细枝末节讲清楚了,本章则准备真正对聊到的几种主从模式落地实践,但实践的内容通常比较枯燥乏味,因为就是调整各种配置、设置各种参数等步骤。
2423 4
|
SQL 关系型数据库 MySQL
mysql读写分离,主从同步
本文介绍了如何在Laravel项目中配置数据库读写分离,并实现MySQL主从同步。主要步骤包括:在`config/database.php`中设置读写分离配置;为主机授予从机访问权限;配置各MySQL服务器的`/etc/my.cnf`文件以确保唯一的`server-id`;以及通过SQL命令设置主从关系并启动从服务。文章还针对一些常见错误提供了排查方法。最后通过验证确认主从同步是否成功。[原文链接](https://juejin.cn/post/6901581801458958344)。版权所有者为作者佤邦帮主,转载请遵循相关规定。
286 0
|
cobar 关系型数据库 MySQL
使用MyCat实现MySQL主从读写分离(一)概述
【8月更文挑战第11天】MySQL读写分离通过主从复制分散负载,主库负责写操作,从库承担读查询,以复制技术确保数据一致性。此策略有效缓解锁竞争,提升查询效能并增强系统可用性。实现方式包括应用层处理,简便快捷但灵活性受限;或采用中间件如MyCAT、Vitess等,支持复杂场景但需专业团队维护。
577 0
|
SQL 关系型数据库 MySQL
基于proxysql实现MySQL读写分离
基于proxysql实现MySQL读写分离
840 0
|
缓存 关系型数据库 BI
使用MYSQL Report分析数据库性能(下)
使用MYSQL Report分析数据库性能
694 158
|
关系型数据库 MySQL 数据库
自建数据库如何迁移至RDS MySQL实例
数据库迁移是一项复杂且耗时的工程,需考虑数据安全、完整性及业务中断影响。使用阿里云数据传输服务DTS,可快速、平滑完成迁移任务,将应用停机时间降至分钟级。您还可通过全量备份自建数据库并恢复至RDS MySQL实例,实现间接迁移上云。
|
关系型数据库 MySQL 数据库
阿里云数据库RDS费用价格:MySQL、SQL Server、PostgreSQL和MariaDB引擎收费标准
阿里云RDS数据库支持MySQL、SQL Server、PostgreSQL、MariaDB,多种引擎优惠上线!MySQL倚天版88元/年,SQL Server 2核4G仅299元/年,PostgreSQL 227元/年起。高可用、可弹性伸缩,安全稳定。详情见官网活动页。
1835 152

推荐镜像

更多