使用amoeba实现mysql读写分离

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 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
相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
4月前
|
负载均衡 监控 关系型数据库
MySQL 官宣:支持读写分离了!!
【10月更文挑战第8天】MySQL的读写分离功能显著提升了数据库性能、可用性和可靠性。通过将读写操作分配至不同服务器,有效减轻单个服务器负载,提高响应速度与吞吐量,并增强系统稳定性。此外,它还支持便捷的扩展方式,可通过增加只读服务器提升读操作性能。实现读写分离的方法包括软件层面(如使用数据库中间件)和硬件层面(使用独立服务器)。使用时需注意数据一致性、负载均衡及监控管理等问题。
278 0
|
5月前
|
关系型数据库 MySQL Java
MySQL主从复制实现读写分离
MySQL主从复制(二进制日志)、 Sharding-JDBC实现读写分离
MySQL主从复制实现读写分离
|
6月前
|
SQL 关系型数据库 MySQL
(二十五)MySQL主从实践篇:超详细版读写分离、双主热备架构搭建教学
在上篇《主从原理篇》中,基本上把主从复制原理、主从架构模式、数据同步方式、复制技术优化.....等各类细枝末节讲清楚了,本章则准备真正对聊到的几种主从模式落地实践,但实践的内容通常比较枯燥乏味,因为就是调整各种配置、设置各种参数等步骤。
759 3
|
6月前
|
关系型数据库 MySQL PHP
开发者必看:MySQL主从复制与Laravel读写分离的完美搭配
开发者必看:MySQL主从复制与Laravel读写分离的完美搭配
112 2
|
6月前
|
SQL 关系型数据库 MySQL
mysql读写分离,主从同步
本文介绍了如何在Laravel项目中配置数据库读写分离,并实现MySQL主从同步。主要步骤包括:在`config/database.php`中设置读写分离配置;为主机授予从机访问权限;配置各MySQL服务器的`/etc/my.cnf`文件以确保唯一的`server-id`;以及通过SQL命令设置主从关系并启动从服务。文章还针对一些常见错误提供了排查方法。最后通过验证确认主从同步是否成功。[原文链接](https://juejin.cn/post/6901581801458958344)。版权所有者为作者佤邦帮主,转载请遵循相关规定。
|
6月前
|
cobar 关系型数据库 MySQL
使用MyCat实现MySQL主从读写分离(一)概述
【8月更文挑战第11天】MySQL读写分离通过主从复制分散负载,主库负责写操作,从库承担读查询,以复制技术确保数据一致性。此策略有效缓解锁竞争,提升查询效能并增强系统可用性。实现方式包括应用层处理,简便快捷但灵活性受限;或采用中间件如MyCAT、Vitess等,支持复杂场景但需专业团队维护。
185 0
|
6月前
|
SQL 关系型数据库 MySQL
基于proxysql实现MySQL读写分离
基于proxysql实现MySQL读写分离
126 0
|
19天前
|
关系型数据库 MySQL 数据库连接
数据库连接工具连接mysql提示:“Host ‘172.23.0.1‘ is not allowed to connect to this MySQL server“
docker-compose部署mysql8服务后,连接时提示不允许连接问题解决
|
6天前
|
关系型数据库 MySQL 数据库
Docker Compose V2 安装常用数据库MySQL+Mongo
以上内容涵盖了使用 Docker Compose 安装和管理 MySQL 和 MongoDB 的详细步骤,希望对您有所帮助。
73 42
|
24天前
|
缓存 关系型数据库 MySQL
【深入了解MySQL】优化查询性能与数据库设计的深度总结
本文详细介绍了MySQL查询优化和数据库设计技巧,涵盖基础优化、高级技巧及性能监控。
174 0

推荐镜像

更多