zoukankan      html  css  js  c++  java
  • 基于mycat实现读写分离

     Mycat 概述

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

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

    作为当前炙手可热的MySQL中间件,MyCAT实现MySQL主从集群的读写分离自是应有之义,其配置也相当简单。

    在这里,我用三个实例组成MySQL主从集群,来验证MyCAT的读写分离功能,其实,一主一从就可以满足,之所以用三个,是为了验证MyCAT的分片功能。

    集群组成如下:

    角色             主机名                      主机IP

    master         server1              192.168.200.112

    slave            server2              192.168.200.113

    slave            server3              192.168.200.114

    在 server1 上安装 jdk 和 mycat

    安装Java环境(mycat基于java)
    yum install java-1.8.0-openjdk.x86_64
    下载mycat
    wget http://dl.mycat.io/1.6.5/Mycat-server-1.6.5-release-20180122220033-linux.tar.gz
    解压
    tar xf Mycat-server-1.6.5-release-20180122220033-linux.tar.gz -C /usr/local/
    创建专门运行mycat账号
    useradd -M -s /sbin/nologin mycat
    将文件权限赋给mycat账号
    chown -R mycat:mycat mycat

    切换目录

    cd /usr/local/mycat/bin/

    启动mycat

    ./mycat start
    配置环境变量并添加 

    vim /etc/profile

    export JAVA_HOME=/usr/local/java

    export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib

    export PATH=$PATH:$JAVA_HOME/lib:$JAVA_HOME/jre/bin:$HOME/bin

    export MYCAT_HOME=/usr/local/mycat

    export PATH=$PATH:$MYCAT_HOME/bin

    使配置文件立即生效

    source /etc/profile

    进入mycat的配置文件目录

    cd /usr/local/mycat/conf/
    vi schema.xml

    <?xml version="1.0"?>
    <!DOCTYPE mycat:schema SYSTEM "schema.dtd">
    <mycat:schema xmlns:mycat="http://org.opencloudb/">
    <!-- 定义MyCat的逻辑库 -->
    <schema name="pcx_schema" checkSQLschema="false" sqlMaxLimit="100" dataNode="pcxNode"></schema>
    <!-- 定义MyCat的数据节点 -->
    <dataNode name="pcxNode" dataHost="dtHost" database="pcx" />
    <!-- 定义数据主机dtHost,连接到MySQL读写分离集群 ,schema中的每一个dataHost中的host属性值必须唯一-->
    <!-- dataHost实际上配置就是后台的数据库集群,一个datahost代表一个数据库集群 -->
    <!-- balance="1",全部的readHost与stand by writeHost参与select语句的负载均衡-->
    <!-- writeType="0",所有写操作发送到配置的第一个writeHost,这里就是我们的hostmaster,第一个挂了切到还生存的第二个writeHost-->
    <dataHost name="dtHost" maxCon="500" minCon="20" balance="1"
    writeType="0" dbType="mysql" dbDriver="native" switchType="2" slaveThreshold="100">
    <!--心跳检测 -->
    <heartbeat>show slave status</heartbeat>
    <!--配置后台数据库的IP地址和端口号,还有账号密码 -->
    <writeHost host="hostMaster" url="192.168.1.6:3306" user="root" password="root" />
    <writeHost host="hostSlave" url="192.168.1.7:3306" user="root" password="root" />
    </dataHost>
    </mycat:schema>

    vi server.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <!-- - - Licensed under the Apache License, Version 2.0 (the "License");
    - you may not use this file except in compliance with the License. - You
    may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0
    - - Unless required by applicable law or agreed to in writing, software -
    distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT
    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the
    License for the specific language governing permissions and - limitations
    under the License. -->
    <!DOCTYPE mycat:server SYSTEM "server.dtd">
    <mycat:server xmlns:mycat="http://org.opencloudb/">
    <system>
    <!-- 这里配置的都是一些系统属性,可以自己查看mycat文档 -->
    <property name="defaultSqlParser">druidparser</property>
    <property name="charset">utf8mb4</property>
    </system>
    <!-- 用户1,对应的MyCat逻辑库连接到的数据节点对应的主机为主从复制集群 -->
    <user name="user1">
    <property name="password">root</property>
    <property name="schemas">pcx_schema</property>
    </user>
    <!-- 用户2,只读权限-->
    <user name="user2">
    <property name="password">root</property>
    <property name="schemas">pcx_schema</property>
    <property name="readOnly">true</property>
    </user>
    </mycat:server>

    重启

    cd /usr/local/mycat/bin/

    ./mycat restart

    测试同步:

    1.在主库创建一张表,插入记录。

    2.在从库查询验证是否正确,经验证配置正确。



  • 相关阅读:
    清除浮动(float)的影响
    再说模拟测试
    关于vue移动端 ios 的兼容问题(二)
    微信小程序 开发 坑(3)
    记录开发微信小程序的坑(3)
    记录开发微信小程序的坑(2)
    记录微信小程序开发遇到的坑
    记录git常用命令
    配置vue项目stylus变量遇见的问题
    如何在vue项目打包去掉console
  • 原文地址:https://www.cnblogs.com/2567xl/p/11681176.html
Copyright © 2011-2022 走看看