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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介:

环境:

        主机A( huangzp2):172.16.115.157

        主机B( huangzp3):172.16.115.100

        主机C( huangzp4):172.16.115.87

说明:

  • 依赖于主从结构

  • 需要中间件(连接两个独立的应用程序或独立的系统,即使没有相同的接口,也能为他们交换数据)实现,如tomcat、weblogic、数据库中间件

  • mysql proxy,支持读写分离、负载均衡、故障转移,缺点:性能差,不支持大数量转发,需要用到lua脚本

  • atlas,性能较差,相应时间较长,不支持动态参数的配置加载,即先关闭数据库,不适用在线业务;

  • amoeba,阿里研发和使用的,除了支持读写分离,也支持数据库分区、分表操作,对数据库性能较小,因为研发工程师跳槽至盛大,怕数据泄露,不用

  • cobar,阿里现在在使用的中间件,半开源软件,有较多限制)


1. 主从机器AB上安装mysql和mysql-server,修改配置文件和授权、查看状态

     yum install -y mysql mysql-server

    主上A:修改配置文件vim /etc/my.cnf,重启,授权(所有权限,更方便)、状态

 wKioL1ie2MewazdqAAAHkcDOG7w088.png  


     grant all privileges on *.* to 'silen'@'%' identified by '123456';

     说明:

 wKiom1ie2NjAJuG7AAAOQm69gbQ990.png


 wKioL1ie2OuQnuQ0AAAV1yjEOtw814.png 


     从上B:修改配置文件vim /etc/my.cnf,重启,填写Master.info信息、开启slave,查看状态

 wKiom1ie2S_ReAQLAAAHyi3CXBQ185.png


 wKioL1ie2TCj1CtoAAAXtnmKgVc476.png


 wKiom1ie2TDwoPpbAABEBaHxmlQ142.png


      主上A:

    wKiom1ie2VixPCjJAAAcB0GBHMM328.png


      从上B:

 wKioL1ie2WaRLgZRAAARLCXnn2U106.png


2. 从上也需要授权,让中间件能过访问

    grant all privileges on *.* to 'silen'@'%' identified by '123456';

 wKioL1ie2X_yi739AAANqlDapOI178.png


3. 中间件服务器设置

3.1 环境:

  (1)先安装gcc环境;

    yum install -y gcc*


   (2)需要获得amoeba主程序:amoeba-mysql-1.3.1-BETA.zip

下载链接:http://101.110.118.21/jaist.dl.sourceforge.net/project/amoeba/Amoeba%20for%20mysql/amoeba-mysql-1.3.1-BETA.zip


   (3)java的安装包:jdk-7u40-linux-x64.tar.gz

    下载链接:

http://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-javase7-521261.html


3.2 配置全局变量

3.2.1 创建 /amoeba目录,将java解压到该目录下

   mkdir /amoeba

   tar -zxvf jdk-7u40-linux-x64.tar.gz -C /amoeba/


3.2.2 目录标题较长,做个软链接,即可

   ln -s jdk1.7.0_40/ jdk


3.2.3 编辑全局变量

   vim /etc/profile配置java选项(java的东西都需要声明)

    JAVA_HOME=/amoeba/jdk

    export JAVA_HOME

    PATH=$JAVA_HOME/bin:$PATH

    export PATH

    CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$CLASSPATH

    export CLASSPATH

 spacer.gifwKioL1ie2leAus_uAAAevdKp8Ek088.png


说明:

  • JAVA_HOME表示java的目录位置,设置为全局变量,这样其他shell也可以使用

  • java目录下的工具脚本加入到系统环境变量中,便于执行命令,也升级为全局变量

  • CLASSPATH表示java类的库的环境变量,把当前目录.,java下的tool.jar,dt.jar加入到变量中(Linux下用冒号隔开,Windows下用分号隔开),也升级为全局变量


3.2.4. 刷新下全局变量文件

   source /etc/profile

3.2.5 验证java是否可用

 wKioL1ie2oSiDPZVAAAmmqDHPSU713.pngspacer.gif


3.3 安装配置amoeba

3.3.1 解压至/usr/local/amoeba目录下

   unzip amoeba-mysql-1.3.1-BETA.zip -d /usr/local/amoeba


3.3.2 添加命令执行权限,便于调用命令

  chmod -R +x /usr/local/amoeba/bin/


3.3.3 修改amoeba主配置文件

   vim /usr/local/amoeba/conf/amoeba.xml


<server>...</server>(服务器性能部分设置)

A. 找到:

<!--

<property name="ipAddress">127.0.0.1</property>

-->

去注释,改amoeba的服务器(中间件)ip为:

<property name="ipAddress">172.16.115.87</property>

 wKiom1ie2qiw8wqYAAArj3mtfl0046.pngspacer.gif


B. 找到:

<!--

<property name="password">password</property>

-->

去注释,修改amoeba的root登录密码为123456:

<property name="password">123456</property>

 wKiom1ie2sSBR56IAAAjGKRA-VM398.pngspacer.gif


<dbServerList>...</dbServerList>(amoeba每一个数据库服务器,对应一个dbServer)(数据库服务器列表部分设置)

A.  <dbServer name="server1">下找到:

<property name="ipAddress">127.0.0.1</property>

将ip地址改为主一的ip(端口和数据库名可以默认3306、test):

<property name="ipAddress">172.16.115.157</property>


B. 找到:

<property name="user">root</property>

将用户名改为授权的zhangshan:

<property name="user">silen</property>


C. 找到:

<!--

<property name="password">password</property>

-->

去掉注释,将密码改为123456:

<property name="password">123456</property>

 wKioL1ie2uihEAReAABkBkETE90670.pngspacer.gif


D. 找到:

<dbServer name="multiPool" virtual="true">

修改dbserver池子名为master(定义池子下面哪些server属于master这个池子,用来扩展服务器):

<dbServer name="master" virtual="true">


E. 找到:

<property name="poolNames">server1</property>

如果master池子新增多台主服务器,比如server1(已在master池子中了)、server2、server3,则修改为:

<property name="poolNames">server1,server2,server3</property>

 wKiom1ie2v2h6PJXAAA8DnuutWA593.pngspacer.gif


F. 因为有两台数据库服务器,已经设置了主服务器,所以需复制主服务器的dbServer,作为模板,修改从服务器dbServer

复制(64行-109行),粘贴在<dbServerList>...</dbServerList>范围内:

<dbServer name="server1">...</dbServer>

(1)修改dbServer的名称为server2:

   dbServer name="server2"


(2)ip地址修改为192.168.9.252:

   <property name="ipAddress">172.16.115.100</property>

 wKioL1ie2xvCq-8oAABlFeoYhcg528.pngspacer.gif


(3)在<dbServer name="multiPool" virtual="true">下,修改池子名称为slave:

     <dbServer name="slave" virtual="true">


(4)slave池子下server主机名字修改为server2:

     <property name="poolNames">server2</property>

spacer.gif wKiom1ie2zCDGMU0AAA6E_IDdK4425.png


最后跳出<dbServerList>:

A. 找到:

    <property name="defaultPool">server1</property>

    将单台服务器的名称修改为池子名称(如果有多台主机,依次轮询去分配),作为默认访问的服务器:

   <property name="defaultPool">master</property>


B. 找到:

   <!--

   <property name="writePool">server1</property>

   <property name="readPool">server1</property>

   -->

   去掉注释,写入池改为master,读取池改为slave:

  <property name="writePool">master</property>

  <property name="readPool">slave</property>

 wKioL1ie21GjoA_MAABZUXa37II394.pngspacer.gif


3.4 查看并编辑amomeba的执行脚本文件:

   vim /usr/local/amoeba/bin/amoeba

A. 找到:

    DEFAULT_OPTS="-server -Xms256m -Xmx256m -Xss128k"

修改为:

    DEFAULT_OPTS="-server -Xms256m -Xmx256m -Xss256k"

 wKiom1ie22biDRfnAAAtaOGHo2I537.pngspacer.gif


3.5 启动amoeba程序,并查看进程

      说明:nohup命令表示,放在后台启动,即使采用远程连接,远程断了,也能运行

      nohup bash -x /usr/local/amoeba/bin/amoeba &

 wKiom1ie23KTMGfMAAAoq_CJO3w853.pngspacer.gif


4. 中间件服务器,安装mysql,不需要安装mysql-server,登录amoeba

    说明:用户为配置文件中指定的用户和密码,默认端口为8066,登录的其实中间件,调用的是主从服务上的mysql,这里安装的mysql只是一个登录的工具

    yum install mysql -y

    mysql -u root -p123456 -h172.16.115.87 -P 8066

 wKioL1ie24Dh15A2AABAmMARvSs395.pngspacer.gif


    测试:实际生产环境中,不需要操作!!!

    停用从服务器slave,即stop slave,在主和从服务器上的test库中创建一个a1表(表名需一致,因为是主从),分别插入一条数据master和slave

    主上: 

 wKiom1ie25XBTCQwAAAOztVc5tA871.png


 wKioL1ie25WSCc1LAAALHHrQxZ8075.png


 wKiom1ie25WBhMUVAAAXP2UnzpQ775.png

spacer.gif

    从上:

spacer.gif wKioL1ie2-uCea1dAAAw-TH8tfw469.png

   

    结论:中间件查看a1表中数据,反复查询都是slave,表明,查询数据是从从服务器中获得

 wKiom1ie3B7hlSPrAAAaCjCAtSw403.pngspacer.gif


    中间件,往a1表中插入一条数据amoeba

 spacer.gifwKioL1ie3EmhE3lUAAAW7UKR944320.png


     结论:在主服务器上的a1表中看到amoeba数据,表明写数据是在主服务器中写入

     主上:

  wKiom1ie3F3TtgcPAAANzYS1K8U051.png spacer.gif


     从上:

 spacer.gifwKiom1ie3HjQ9BNSAAALiiCtCNM592.png


    最后分别删掉主和从上的test库中的tb1表,从上开启slave

spacer.gif wKioL1ie3IujFhA0AAA-moaIctI182.png










本文转自 huangzp168 51CTO博客,原文链接:http://blog.51cto.com/huangzp/1896937,如需转载请自行联系原作者
相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
10月前
|
关系型数据库 MySQL Java
MySQL的主从复制 && SpringBoot整合Sharding-JDBC解决读写分离
MySQL的主从复制 && SpringBoot整合Sharding-JDBC解决读写分离
228 0
|
10月前
|
SQL 关系型数据库 MySQL
Mycat【Mycat部署安装(核心配置及目录结构、安装以及管理命令详解)Mycat高级特性(读写分离概述、搭建读写分离、MySQL双主双从原理)】(三)-全面详解(学习总结---从入门到深化)
Mycat【Mycat部署安装(核心配置及目录结构、安装以及管理命令详解)Mycat高级特性(读写分离概述、搭建读写分离、MySQL双主双从原理)】(三)-全面详解(学习总结---从入门到深化)
878 0
|
1月前
|
SQL 关系型数据库 MySQL
如何实现 MySQL 的读写分离?
本文介绍了 MySQL 读写分离的实现方式及其主从复制原理,解释了如何通过主从架构提升读并发能力。重点分析了主从同步延时问题及解决方案,如半同步复制、并行复制等技术手段,并结合实际案例探讨了高并发场景下的优化策略。文章还提醒开发者在编写代码时需谨慎处理插入后立即查询的情况,避免因主从延时导致的数据不一致问题。
220 44
如何实现 MySQL 的读写分离?
|
25天前
|
关系型数据库 分布式数据库 PolarDB
PolarDB开源数据库进阶课9 读写分离
本文介绍了如何配置读写分离工具pgpool-II for PolarDB,使应用程序能够透明地实现读写分离。
37 1
|
5月前
|
负载均衡 监控 关系型数据库
MySQL 官宣:支持读写分离了!!
【10月更文挑战第8天】MySQL的读写分离功能显著提升了数据库性能、可用性和可靠性。通过将读写操作分配至不同服务器,有效减轻单个服务器负载,提高响应速度与吞吐量,并增强系统稳定性。此外,它还支持便捷的扩展方式,可通过增加只读服务器提升读操作性能。实现读写分离的方法包括软件层面(如使用数据库中间件)和硬件层面(使用独立服务器)。使用时需注意数据一致性、负载均衡及监控管理等问题。
344 0
|
10月前
|
SQL 关系型数据库 MySQL
mysql 主从复制与读写分离
mysql 主从复制与读写分离
|
6月前
|
关系型数据库 MySQL Java
MySQL主从复制实现读写分离
MySQL主从复制(二进制日志)、 Sharding-JDBC实现读写分离
MySQL主从复制实现读写分离
|
7月前
|
SQL 关系型数据库 MySQL
(二十五)MySQL主从实践篇:超详细版读写分离、双主热备架构搭建教学
在上篇《主从原理篇》中,基本上把主从复制原理、主从架构模式、数据同步方式、复制技术优化.....等各类细枝末节讲清楚了,本章则准备真正对聊到的几种主从模式落地实践,但实践的内容通常比较枯燥乏味,因为就是调整各种配置、设置各种参数等步骤。
801 3
|
7月前
|
关系型数据库 MySQL PHP
开发者必看:MySQL主从复制与Laravel读写分离的完美搭配
开发者必看:MySQL主从复制与Laravel读写分离的完美搭配
130 2
|
7月前
|
SQL 关系型数据库 MySQL
mysql读写分离,主从同步
本文介绍了如何在Laravel项目中配置数据库读写分离,并实现MySQL主从同步。主要步骤包括:在`config/database.php`中设置读写分离配置;为主机授予从机访问权限;配置各MySQL服务器的`/etc/my.cnf`文件以确保唯一的`server-id`;以及通过SQL命令设置主从关系并启动从服务。文章还针对一些常见错误提供了排查方法。最后通过验证确认主从同步是否成功。[原文链接](https://juejin.cn/post/6901581801458958344)。版权所有者为作者佤邦帮主,转载请遵循相关规定。

热门文章

最新文章