使用amoeba实现mysql读写分离

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