zoukankan      html  css  js  c++  java
  • MySQL高可用读写分离方案预研

    目前公司有需求做MySQL高可用读写分离,网上搜集了不少方案,都不尽人意,下面是我结合现有组件拼凑的实现方案,亲测已满足要求,希望各位多提建议 :)

     

    一、    网上方案整理(搜集地址不详。。。)

     1、MySQL Replication

    对于单一的MySQL同步功能,因无法实现IP地址的自动切换,而该表中所列的功能是MySQL Replication的单向同步工作方式,需要改进为双向同步,就可以实现数据的双向同步、重同步、数据库切换的功能。

    2、MySQL Replication+Heartbeat

    对于第二种方案,引入了heartbeat,所以可以实现IP地址切换,heartbeat只针对主机和网络故障的切换,无法监控数据库故障,所以需要额外的工具和配置,而且MySQL Replication的工作机制为异步通讯方式,对同步的数据的一致性可能产生影响。

    3、MySQL+Heartbeat+DRBD

    对于第三种采用了DRBD,DRBD是Distributed Replicated Block Device,是基于内核开发的一个虚拟块设备的工具,该软件可以在一个实际块设备或分区上虚拟一个块设备,并挂载到系统之上,两台主机通过配置,来同步块设备上的数据,能够实现双向实时同步的功能,但同时只能有一台主机处于活动状态,从服务器上的虚拟块设备无法挂载,从而不能启动从服务器的MySQL服务,在切换时需要从服务器控制启动顺序,按顺序切换DRBD,挂载虚拟块设备,启动MySQL,调试中该时延较长。而且DRBD基于内核,在应用调试中,多次导致服务器内核出问题而导致主机死机,所以对于服务器的高稳定需求不满足。

    4、MySQL Cluster

    集群方式一般应用在负载均衡,采用单向同步的方式,对数据的修改只在一台数据库服务器上进行,对于查询则交给其他的数据库服务器,同时无法完成IP地址的自动切换,所以没有调试

    5、MySQL+memcached

    这种方案采用共享内存的方式,使多个MySQL共享同一内存缓冲区,故不适用备份的目的。

    6、MySQL Proxy:

    对于IP地址切换的功能,也可以采用MySQL Proxy来实现,其工作原理是在MySQL Server和Client之间添加一个代理设备,通过lua脚本来处理数据请求,可以根据业务需求用lua脚本实现不同的功能,但这种方式将多添加一台MySQL Proxy服务器。

     

    二、推荐方案

    采用MySQL Replication+ MySQL Proxy+Heartbeat实现MySQL读写分离HA

     

    1、双Master都安装MySQL Proxy和Heartbeat(也可以单独安装MySQL Proxy,Heartbeat跟MySQL Proxy必须装在一起,MySQL Proxy的代理IP使用Heartbeat浮动IP);

    2、多个Slave跟Heartbeat主MasterA进行一主多从模式的数据同步,如果MasterA突然挂掉,Heartbeat自动切换到MasterB,所有的从也会切换到MasterB上(通过Heartbeat的haresources配置实现);

    3、Application通过Heartbeat浮动IP访问数据库。

     

    三、测试

    为测试方便修改rw-splitting.lua中 min_idle_connections和max_idle_connections的值为1,开启两个以上客户端连接mysql-proxy(这里的ip地址是Heartbeat浮动IP)

    mysql -h172.**.**.** –P4040 -uroot –pcoship

    use 测试数据库

    1、先插入部分数据,再登陆主从多服务器的MySQL查看数据是否同步;

    2、然后在从服务执行stop slave;在插入数据(目的是不然数据同步到从服务),再执行查询操作,查看是否是在从上面查询;

    3、直接关闭MasterA服务器,看MySQL是否可以继续使用;

     

    目前上面方案已经实现并已写成自动化安装,具体安装配置有需要的同学可以评论回复;

  • 相关阅读:
    策略梯度(Policy Gradient)
    无约束优化问题
    有约束优化问题
    计算机网络学习资料
    为什么要用等效基带信号?
    通信网实验—话务量分析
    无感数据埋点(自定义注解+aop+异步)
    排序算法
    位运算常见操作
    数据库与缓存一致性的几种实现方式
  • 原文地址:https://www.cnblogs.com/huige-you/p/4061846.html
Copyright © 2011-2022 走看看