设为首页 收藏本站
查看: 691|回复: 0

[经验分享] MySQL读写分离-amoeba

[复制链接]

尚未签到

发表于 2018-10-2 11:20:55 | 显示全部楼层 |阅读模式
  1、理论部分
  1.1、为什么需要MySQL读写分离
  随着传统的数据库技术日趋成熟、计算机网络技术的飞速发展和应用范围的扩充,数据库应用已经普遍建立于计算机网络之上。这时集中式数据库系统表现出它的不足:
  1)集中式处理,势必造成性 能瓶颈;
  2)应用程序集中在一台计算机上运行,一旦该计算机发生故障,则整个系统受到影响,可靠性 不高;
  3)集中式处理引起系统的规模和配置都不够灵活,系统的可扩充性差。在这种形势下,集中式数 据库将向分布式数据库发展。
  1.2、MySQL读写分离的架构
DSC0000.jpg

  前端:
  N个Application Server
  后端:

  Master >  1.3、如何实现读写分离
  通常来说有两种方式实现读写分离:
  1.3.1、应用程序层实现
DSC0001.jpg

  1)应用程序层实现指的是在应用程序内部及连接器中实现读写分离。
  例如:
  com.mysql.jdbc.ReplicationDriver
  mysqlnd_ms
  2)优点:
  程序内部实现读写分离,安装即可使用
  减少部署难度
  访问压力在一定级别以下,性能很好。
  3)缺点:
  架构一旦调整,代码要跟着变,不够灵活。
  难以实现高级应用,如自动分库、分表。
  无法适用于更大型的应用场景。
  1.3.2、中间层实现
DSC0002.jpg

  1)中间层实现指的是外部中间件程序实现读写分离,例如:
  mysql-proxy
  amoeba
  Atlas(Qihoo360)
  Cobar(Alibaba)
  TDDL(Taobao)
  2)优点:
  架构设计上更加灵活。
  可在程序上实现一些高级控制,如透明化水平拆分、Failover、流量控制。
  依靠一些技术手段提高MySQL性能,如连接池。
  3)缺点:
  1)需要有一定开发实力和运维团队的支持。
  1.4、Amoeba实现读写分离
  1.4.1、优点
  1)这个软件致力于MySQL的分布式数据库前端代理层,它主要在应用层访问MySQL的 时候充当SQL路由功能,专注于分布式数据库代理层(Database Proxy)开发。
  2)座落与 Client、DB Server(s)之间,对客户端透明。
  3)具有负载均衡、高可用性、SQL 过滤、读写分离、可路由相关的到目标数据库、可并发请求多台数据库合并结果。
  4)通过Amoeba你能够完成多数据源的高可用、负载均衡、数据切片的功能,目前Amoeba已在很多 企业的生产线上面使用。
  5)Amoeba目前不支持事务
  1.4.2、缺点
  1)目前还不支持事务
  2)暂时不支持存储过程(近期会支持)
  3)不适合从amoeba导数据的场景或者对大数据量查询的query并不合适(比如一次请求返回10w以上甚至更多数据的场合)
  4)暂时不支持分库分表,amoeba目前只做到分数据库实例,每个被切分的节点需要保持库表结构一致
  1.5、应用概述
  1)MySQL Replication读写分离是很多企业经常使用的技术。
  2)读写分离涉及到高负载环境下的MySQL架构设计。
  3)读写分离发展过程:简单读写分离->水平拆分读写分离->业务逻辑分离。
  4)读写分离常见框架:
  M-S
  M-S-Muti Slave
  M-M-Muti Slave
  Muti Master-Muti Master-MutiSlave
  5)复杂的架构设计往往与高可用技术整合使用。
  2、实验部分
  2.1、实验基础
  2.1.1、实验环境
  以下实验需要“mysql replication(主从复制)(一)MS模式”的实验为基础,如果你没有MS环境,请参阅以下链接。
  http://cmdschool.blog.51cto.com/2420395/1696474
  2.1.2、实验环境信息
  1)MySQL-node(Amoeba实现的数据库分发节点)
  ipaddress=10.168.0.110
  hostname=sql-a
  2)MySQL Master(数据库节点)
  ipaddress=10.168.0.103
  hostname=sql-m
  3)MySQL Slave(数据库节点)
  ipaddress=10.168.0.104
  hostname=sql-s
  2.1.3、yum的安装
  In MysQL-node
yum -y install mysql  2.2、下载源
  amoeba下载:
  In MySQL-node:
cd ~  
wget http://download.oracle.com/otn-pub/java/jdk/7u79-b15/jdk-7u79-linux-x64.tar.gz?AuthParam=1445836360_be02266de879eb81f370c5e6620e727c
  
wget http://sourceforge.net/projects/amoeba/files/Amoeba%20for%20mysql/2.2.x/amoeba-mysql-binary-2.2.0.tar.gz/download
  以下是官方发布源的地址,请按照自己实际选择:
  http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html
  http://sourceforge.net/projects/amoeba/files/
  2.3、实验步骤
  1)三台服务器均安装MySQL(MySQL-node可指装client)
  2)MySQL-node上安装Amoeba
  3)配置Amoeba
  4)MySQL Master&Slave均需授权MySQL-node可以访问
  5)MySQL Master&Slave上创建测试库与测试表
  6)测试读写分离
  2.3.1、安装Amoeba
  Amoeba基于JAVA开发。因此,安装Amoeba还需要同时安装JDK
  In MySQL-node
tar zxvf jdk-7u79-linux-x64.tar.gz -C /usr/local  
cd /usr/local
  
mv jdk1.7.0_79/ jdk
  
echo 'export JAVA_HOME=/usr/local/jdk' >> ~/.bashrc
  
. ~/.bashrc
  
echo $JAVA_HOME
  
mkdir -pv /usr/local/amoeba
  
tar zxvf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba
  
cd /usr/local/amoeba/conf
  
ls
  2.3.2、Amoeba配置文件
  Amoeba的配置文件位于程序目录下的conf子目录。通过配置.xml文件,影响Amoeba运行
  1)amoeba.xml           Amoeba主配置文件
  2)dbServers.xml           数据库节点配置文件
  3)functionMap.xml           函数配置文件
  4)ruleFunctionMap.xml         规则函数配置文件
  5)rule.xml               规则配置文件
  6)access_list.conf             访问控制
  2.3.3、amoeba.xml
  
8066
  

  
127.0.0.1
  

  
   
  
        
  
        128
  
        64
  
   
  

  

  
   
  
        
  
        amofu
  
        amofp
  
   
  

  

  

  
    ...
  

  

  

  
    Master
  
    Master
  
    Slave
  

  2.3.4、dbServers.xml
  

  
   
  
        
  
        3306
  
        cmdschool
  
        amou
  
        amop
  
   
  

  

  

  
   
  
        
  
        10.168.0.103
  
   
  

  

  

  
   
  
        
  
        10.168.0.104
  
   
  

  

  

  
   
  
        
  
        1
  
        
  
        Master,Slave
  
   
  

  2.3.5、授权Amoeba访问MySQL
  所有前端应用程序都通过Amoeba访问真实数据库。因此,每个数据库都需要创建用户并授权Amoeba访问。
  In Master
mysql> create database cmdschool;  
mysql> create table t1(id varchar(255));
  In Master & Slave
mysql> grant all on cmdschool.* to amou@10.168.0.110 identified by'amop';  
mysql> flush privileges;
  MySQL-node
mysql -h10.168.0.103 -uamou -pamop  2.3.6、运行或停止Amoeba
cd /usr/src/amoeba/bin  
./amoeba start&
  
./amoeba stop
  错误提示:

  The stack>  Error: Could not create the Java Virtual Machine.
  Error: A fatal exception has occurred. Program will exit.
  解决方法:
  vim ./amoeba
  默认值:
DEFAULT_OPTS="-server -Xms256m -Xmx256m -Xss128k"  变更为:
DEFAULT_OPTS="-server -Xms256m -Xmx256m -Xss256k"  重启服务:
./amoeba stop  
./amoeba start&
  2.3.7、开启防火墙
  vim编辑/etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8066 -j ACCEPT  重启防火墙
/etc/init.d/iptables restart  2.3.8、测试Amoeba
  In Slave
mysql> stop slave;  In MySQL-node
mysql -h10.168.0.110 -uamofu -pamofp -P 8066  
use cmdschool
  
show tables;
  
insert into t1 values ("1"),("2"),("3");
  
select * from t1;
  In Slave
mysql> start slave;  In MySQL-node
select * from t1;  参考文献:
  Amoeba使用指南
  http://docs.hexnova.com/amoeba/
  在Master/Slave结构下的读写分离
  http://docs.hexnova.com/amoeba/rw-splitting.html



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-607499-1-1.html 上篇帖子: mysql审计插件设置 下篇帖子: GTID及mysql-proxy实现mysql5.6读写分离
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表