您的位置:首页 > 运维架构 > 网站架构

mysql集群实现高可用读写分离之mycat实战_一点课堂(多岸学院)

2019-05-13 15:11 1241 查看

mysql读写分离

  1. 什么是读写分离

    读写分离,基本的原理是让主数据库处理事务性增、改、删操作(INSERT、UPDATE、DELETE),而从数据库处理SELECT查询操作。数据库复制被用来把事务性操作导致的变更同步到集群中的从数据库。

  2. 为什么要读写分离呢?

    在实际的生产环境中,对数据库的读和写都在同一个数据库服务器中,是不能满足实际需求的。无论是在安全性、高可用性,还是高并发等各个方面都是完全不能满足实际需求的。因此,通过主从复制的方式来同步数据,再通过读写分离来提升数据库的并发负载能力。

    因为数据库的“写”(写10000条数据到oracle可能要分钟)操作是比较耗时的。

    但是数据库的“读”(从oracle读10000条数据可能只要秒钟)。

    所以读写分离,解决的是,数据库的写入,影响了查询的效率。

  3. 主从复制、读写分离的基本设计

    一台主、多台从,主提供写操作,从提供读操作。

  4. MYCAT背景介绍

    在MySQL中间件出现之前,对于MySQL主从集群,如果要实现其读写分离,一般是在程序端实现,这样就带来一个问题,即数据库和程序的耦合度太高,如果我数据库的地址发生改变了,那么我程序端也要进行相应的修改,如果数据库不小心挂掉了,则同时也意味着程序的不可用,而这对很多应用来说,并不能接受。

    引入MySQL中间件能很好的对程序端和数据库进行解耦,这样,程序端只需关注数据库中间件的地址,而无需知晓底层数据库是如何提供服务。

  5. 什么是MYCAT?

      一个彻底开源的,面向企业应用开发的大数据库集群
    • 支持事务、ACID、可以替代MySQL的加强版数据库
    • 一个可以视为MySQL集群的企业级数据库,用来替代昂贵的Oracle集群
    • 一个融合内存缓存技术、NoSQL技术、HDFS大数据的新型SQL Server
    • 结合传统数据库和新型分布式数据仓库的新一代企业级数据库产品
    • 一个新颖的数据库中间件产品
  6. mycat原理图

  7. 环境信息

    操作系统:centos6.8
    主机:192.168.57.201(主)、:192.168.57.202(从)
    mycat:1.6
    下载地址:http://dl.mycat.io/1.6-RELEASE/Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
  8. 安装mycat

    #下载
    wget http://dl.mycat.io/1.6-RELEASE/Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
    #解压
    tar xzvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
    #要有jdk的环境(/etc/profile)
    JAVA_HOME=/opt/yidian/jdk1.8.0_191
    PATH=$JAVA_HOME/bin:$PATH
    CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAME_HOME/lib/tools.jar
    export JAVA_HOME
    export PATH
    export CLASSPATH
  9. mycat配置

      server.xml

      <user name="root">
      <property name="password">123456</property>
      <property name="schemas">TESTDB</property>
      
      </user>
      
      <user name="user">
      <property name="password">123456</property>
      <property name="schemas">TESTDB</property>
      <property name="readOnly">true</property>
      </user>
    • schema.xml

      <?xml version="1.0"?>
      <!DOCTYPE mycat:schema SYSTEM "schema.dtd">
      <mycat:schema xmlns:mycat="http://io.mycat/">
      
      <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="yidiankt_mycat">
      </schema>
      <dataNode name="yidiankt_mycat" dataHost="localhost1" database="yidiankt" />
      <dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"
      writeType="0" dbType
      1cca8
      ="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
      <heartbeat>select user()</heartbeat>
      <!-- can have multi write hosts -->
      <writeHost host="hostM1" url="192.168.57.201:3306" user="root"
      password="123456">
      <!-- can have multi read hosts -->
      <readHost host="hostS2" url="192.168.57.202:3306" user="root" password="123456" />
      </writeHost>
      </dataHost>
      </mycat:schema>
    • 启动mycat

      ./mycat start
      netstat -ntlp
      ps -ef | grep mycat
      
      # 登录mycat管理端口
      mysql -uroot -p123456 -h127.0.0.1 -P9066
      
      # 查看读写配置情况
      show @@datasource;
      
      # 查看心跳信息
      show  @@heartbeat;
      
      # 登录mycat数据端口
      mysql -uroot -p123456 -h127.0.0.1 -P8066
    • 测试读写分离

      更改日志的输出模式,需重启./mycat restart
      vi log4j.xml
      修改<asyncRoot level="info" includeLocation="true">
      为 <asyncRoot level="debug" includeLocation="true">
      
      #查询观察日志的变化
      tail -f wrapper.log

      视频教程:www.yidiankt.com


    关注公众号-免费获取【JAVA核心知识点】!!

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐