zoukankan      html  css  js  c++  java
  • Mycat配置主从数据-集群搭建

    1、读写分离mycat

    a、 读写分离
      读--》读操作服务器只负责读
      写--》写操作服务器只负责写
    b、分表分库
      (微服务)垂直拆分:系统(订单,用户)
      mycat研究对象-》水平拆分:订单(订单1/订单2)
      haproxy:搭建多个mycat集群
    集群:防止单点故障
      当一个机器宕机了以后,另一个机器会启作用,进行数据传输和备份。

    2、原理图

     3、安装mycat

      a. 解压文件

    tar -zxvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz 

      b. 移动到软件目录

     mv mycat/ /usr/ 

      c. 进入/usr/mycat/conf中配置三个文件

    Server.xml

      这里是root用户密码的设置,同时逻辑分库表的名字

        <user name="root">
            <property name="password">root</property>
            <property name="schemas">mydb</property>        
        </user>

    schema.xml 

    <?xml version="1.0"?>
    <!DOCTYPE mycat:schema SYSTEM "schema.dtd">
    <mycat:schema xmlns:mycat="http://io.mycat/">
    
        <schema name="mydb" checkSQLschema="false" sqlMaxLimit="100">
            <!-- 分表 name是分表  dataNode拆分后的切片的位置  rule拆分规则 -->
            <table name="student" dataNode="dn1,dn2" rule="myrule" />
            
        </schema>    
        <!--datahost设置读写分离的地址  database拆分后为mydb01和02-->
        <dataNode name="dn1" dataHost="localhost1" database="mydb01" />
        <dataNode name="dn2" dataHost="localhost1" database="mydb02" />
        <dataHost name="localhost1" maxCon="1000" minCon="10" balance="3"
                  writeType="0" dbType="mysql" dbDriver="native" switchType="2"  slaveThreshold="100">
                  <!--发送心跳确是否出故障-->
            <heartbeat>show slave status</heartbeat> <!--select user()-->
            <writeHost host="hostM1" url="192.168.209.135:3306" user="root"
                       password="root">
                <readHost host="hostS2" url="192.168.209.137:3306" user="root" password="root" />
            </writeHost>
            
        </dataHost>
    </mycat:schema>

    部分参数解析

      balance:读请求的负载均衡 

    0:不开启读写分离,所有读操作都发送到writehost中

    1:全部的readhost和stand by writehost都参与读操作的负载均衡

    2:读请求随机发送给readhost或writehost

    3:读请求随机发送给writehost中的readhost

      writeType:写请求的负载均衡

    0:写请求先发送给schema.xml中的第一个writehost。

    当第一个writehost挂掉后给第二个,切换 记录会被记录在conf/dnindex.properties

    1:写请求随机发送到所有的writehost中

      switchType:是否允许读操作在readhost和writehost中自动切换(解决延迟问题,当从readhost中读 取数据出现网络延迟时,自动从writehost中读取)

    -1:不允许

    1:允许

    2:根据主从同步的状态,自动选择是否切换 心跳设置必须为show slave status

    rule.xml

    这是是算法的区分
        <tableRule name="mod-long">
            <rule>
                <columns>id</columns>
                <algorithm>mod-long</algorithm>
            </rule>
        </tableRule>
    
    下面的算法的实现

    <function name="mod-long" class="io.mycat.route.function.PartitionByMod">
    <!-- how many data nodes -->
    <property name="count">3</property>
    </function>

    在主从底层数据库中进行数据参加

    create database mydb01; 
    create table student(id int(4),name varchar(10));
    create database mydb02;
    create table student(id int(4),name varchar(10));

    启动mycat

    开启     bin/mycat start 
    关闭     bin/mycat stop 
    查看状态    bin/mycat status

    登录mycat

    mysql -uroot -proot -P8066 -h(mycat所在服务器ip)

     测试

    插入数据
    select * from student;
    insert student (id, name) values (88, 'nihao');

    测试思路:

      读写分离,读从主slave中读,写从master写入。

      在master中插入数据,能查询到两个库中的数据。

      在slave中插入数据,由于slave是从数据库,所以数据不会同步到master,所以从master读是读不到的,只有从slave中读才能得到数据,得到验证。

     

     

      

  • 相关阅读:
    [java]Java中父类强制转换成子类的原则
    基于 JWT + Refresh Token 的用户认证实践
    [java]idea设置及debug使用
    [java]Class类和Object类的关系
    [java]文件操作
    [java]javabean
    [java]string类型
    [java]求数据的hmac sha1的并用base64编码
    java 多线程——一个定时调度的例子
    设计模式 4 —— 迭代器和组合模式(组合)
  • 原文地址:https://www.cnblogs.com/HelloM/p/14189996.html
Copyright © 2011-2022 走看看