zoukankan      html  css  js  c++  java
  • (十五)mysql中间件MyCAT实现

    1)拓扑如下和实现目标


    写操作:都在master
    读操作:在slave1上
    当master1挂了,写操作自动切换到master2上
    当master2挂了,写操作自动切换到master1上

    2)Mycat环境安装jdk:省略

    3)下载安装MyCAT

    wget http://dl.mycat.io/1.6-RELEASE/Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
    tar xf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz -C /usr/local

    4)配置web服务器连接MyCAT的用户名,密码和数据名

    #vim /usr/local/mycat/conf/server.xml    这是web服务器连接mycat的用户名和密码,以及schemas文件对应的名字
            <user name="root">
                    <property name="password">123456</property>
                    <property name="schemas">testdb</property>
            </user>
    注释以下内容
    <!--
            <user name="user">
                    <property name="password">user</property>
                    <property name="schemas">TESTDB</property>
                    <property name="readOnly">true</property>
            </user>
    -->
    

    4)配置MyCAT连接后端数据库相关信息

    schema name = testdb 是web服务器连接Mycat看见的数据库
    database=“testdb”是真正数据库名
    我这里环境是双主一从
    :验证后端服务是否可用

    <mycat:schema xmlns:mycat="http://io.mycat/">
            <schema name="testdb" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
            </schema>
            <dataNode name="dn1" dataHost="dbpool" database="testdb" />
            <dataHost name="dbpool" maxCon="1000" minCon="10" balance="3"
              writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
                    <heartbeat>select user()</heartbeat>
                    <writeHost host="master1" url="192.168.1.31:3306" user="mycat" password="Mycat@123">
                            <readHost host="slave1" url="192.168.1.33:3306" user="mycat" password="Mycat@123" />
                    </writeHost>
                    <writeHost host="master2" url="192.168.1.32:3306" user="mycat" password="Mycat@123">
                            <readHost host="slave1" url="192.168.1.33:3306" user="mycat" password="Mycat@123" />
                    </writeHost>
            </dataHost>
    </mycat:schema>
    
    • balance属性
    balance="0", 不开启读写分离机制,所有读操作都发送到当前可用的writeHost 上。
    balance="1",全部的 readHost 与 stand by writeHost 参与 select 语句的负载均衡,简单的说,当双主双从模式(M1 ->S1 , M2->S2,并且 M1 与 M2 互为主备),正常情况下, M2,S1,S2 都参与 select 语句的负载均衡。
    balance="2",所有读操作都随机的在 writeHost、 readhost 上分发。
    balance="3", 所有读请求随机的分发到 wiriterHost 对应的 readhost 执行,writerHost 不负担读压力,注意 balance=3 只在 1.4 及其以后版本有, 1.3 没有。
    
    • write type属性
    writeType="0", 所有写操作发送到配置的第一个 writeHost,第一个挂了切到还生存的第二个writeHost,重新启动后已切换后的为准,切换记录在配置文件中:dnindex.properties .
    writeType="1",所有写操作都随机的发送到配置的 writeHost。
    writeType="2",没实现。
    
    • switch type属性
    writeType="0", 所有写操作发送到配置的第一个 writeHost,第一个挂了切到还生存的第二个writeHost,重新启动后已切换后的为准,切换记录在配置文件中:dnindex.properties .
    writeType="1",所有写操作都随机的发送到配置的 writeHost。
    writeType="2",没实现。
    

    5)在master1上给Mycat创建用户

    mysql> grant all on testdb.* to mycat@'192.168.1.%' identified by 'Mycat@123';
    mysql> flush privileges;
    

    6)启动Mycat

    • 测试mycat上使用能用master创建的账号登录到mysql
    mysql -umycat -h192.168.1.31 -pMycat@123
    
    • 启动mycat
    /usr/local/mycat/bin/mycat start
    
    • 验证
    ps -ef | grep mycat
    ss -anltup | grep 8066
    


    7)测试读写分离

    • slave开启查看日志
    mysql>show variables like 'general_log%';
    mysql>set global general_log = ON;
    
    • 在web服务器上连接MyCAT
    mysql -h192.168.1.30 -uroot -p123456 -P8066
    
    • 执行查询语句
    mysql> select * from testdb.t1;
    
    • 在slave1上查看查询日志:/var/lib/mysql/localhost.log

      说明读在从上面执行
      当slave1挂机,读会自动切换到主上面查询
      当slave1恢复,读会自动切换到从上面查询

    8)测试主主切换

    • master开启查询日志
    mysql>show variables like 'general_log%';
    mysql>set global general_log = ON;
    
    • 在web服务器上执行insert语句
    mysql> insert into testdb.t1 values(16,'16');
    

    master1上面有看到插入语句

    • 把master1停止mysql服务
    systemctl stop mysqld
    
    • 在web服务器执行insert语句
    mysql> insert into testdb.t1 values(17,'17');
    

    发现插入语句自动切换到master2上面执行

    总结:master1由停止服务到正常提供服务又自动加入到mycat监控中

  • 相关阅读:
    Ubuntu16.04编译Android6.0/cm13.0教程及相关错误解决办法
    TWRP基于omnirom 6.0.1编译教程
    教你一招:解决Win 10安装软件时提示:文件系统错误 (-1073740940)
    红米3 TWRP-3.0.2(android_6.0.1_r72分支)中文版Recovery更新于20161018
    C# Note32: 查漏补缺
    postgreSQL使用杂谈
    Granfana+PostgreSQL
    WIndows下使用Grafana+InfluxDB打造监控系统
    【译】历史上的名人如何利用不同的思维方式成就自己
    【译】Focused and Diffuse Modes(专注与发散模式)
  • 原文地址:https://www.cnblogs.com/lovelinux199075/p/8966945.html
Copyright © 2011-2022 走看看