数据库的高可用 及 Mycat的引入

Posted misscai

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库的高可用 及 Mycat的引入相关的知识,希望对你有一定的参考价值。

 (一)实现数据库的读写分离

  1 业务需求

     在服务中,只配置主库.如果遇到了高并发的现象,则主库有宕机的风险,用户大量的请求中,查询的数量是最多的.如何进行优化呢??

  2 解决方案: 使用代理服务器(Amoeba)

    Amoeba是一个以mysql为底层的数据存储,并对应用提供Mysql协议接口的proxy.它集中地响应用的请求,依据用户事先设置的规则,将SQL请求发送到特定的数据库上执行.基于此可以实现负载均衡,读写分离,高可用性等需求.与MySql官方的MySql Proxy相比,作者强调的是amoeba配置的方便(基于XML的配置文件),用SQLJEP语法书写规则,比基于lua的脚本的Mysql Proxy简单.

  技术分享图片

  3 双机热备

  Master:A主要的作用向从库B同步数据

  从库B:向A主库同步数据

  技术分享图片

  3.1调用流程

  正常情况下,主库负责写库操作,从库主要负责读库操作

  当主库宕机时,通过某些技术手段可以实现数据库的主从切换.这时从库即充当主库又充当从库.

  运维人员将主库修复完成后启动.因为之前已经配置了双击热备的形式.这时因为从库已经运行了一段时间,其中的数据一定比主库的多,这时从库将数据同步给主库,最终实现了数据的一致.

 


 

(二)Mycat的引入(遇到数据库瓶颈,无法继续优化sql,使用Mycat)

  1 Mycat是数据库的分库分表中间件,国内最活跃的,性能最好的开源软件数据库中间件!

  2 Mycat的特性

    ? 遵守Mysql原生协议,跨语言,跨平台,跨数据库的通用中间件代理

    ? 基于心跳的自动故障切换,支持读写分离,支持Mysql主从,以及galera cluster集群

    ? 支持分布式事务

  3 数据库的优化

    ?优化SQL语句---原则

      a:能用单表不用关联查询.正常的数据库设计需要满足三范式要求.

      b:使用关联时尽可能提早确定数据.否则会进行大量的笛卡尔积操作.直接影响程序执行性能.

      c:尽可能根据主键查询

    ?创建索引

      对于经常查询的数据,为其创建索引文件

      a: 普通索引  INDEX (id)

      b: 唯一索引  UNIQUE INDEX unique_id(id ASC)

      c: 全文索引   FULLTEXT INDEX fulltext_name(name)

      d: 单列索引  INDEX single_name(name(20))       //索引长度为20

      e: 多列索引  INDEX multi(id,name(20))

      f: 空间索引   SPATIAL INDEX sp(space)

    ? 添加缓存

      为经常查询的数据,将数据添加到缓存中,提高查询效率

    ? 定期转储数据

      采用历史表策略 将旧的数据保存到历史表中.当前表中只维护现在使用的数据

    ? 分库分表

      因为数据库瓶颈问题,无法以现在的优化策略,优化数据库,这时需要将数据库进行分库分表操作.也就是将一个数据库动态的拆分为多个数据库.

   4 数据库的垂直拆和水平拆

            根据不同的数据库,将有关联关系的数据表拆分到一个数据库中,将没有关联关系的数据表拆分到不同的数据库中.(根据业务拆分)

   技术分享图片

       将数据库中的表数据拆分到多个数据库中得表中

  技术分享图片

 


     

          Mycat 逻辑库,进行管理

 


以上是关于数据库的高可用 及 Mycat的引入的主要内容,如果未能解决你的问题,请参考以下文章

MyCat 1.6.7(二)高可用及权限

MyCAT+MySQL 搭建高可用企业级数据库集群——第1章 课程介绍

HAProxy+Keepalived实现Mycat高可用

7基于 HA 机制的 Mycat 高可用--mycat

HAProxy+Keepalived实现Mycat高可用

Mycat-介绍