zoukankan      html  css  js  c++  java
  • .netcore微服务-Mycat

     

    一、前言

    1.1  分布式数据库

    随着IT行业的迅猛发展,行业应用系统的数据规模呈现爆炸式增长,对数据库的数据处理能力要求越来越高,分布式数据库正是因此应运而生。

    分布式数据库特点包括:

    透明性:用户不必关心后台数据库的具体实现

    扩展性:能够根据系统压力情况进行扩展

    可靠性:如果其中一台服务器宕机,备用服务器能够自动切换继续提供服务

    高性能:

    1.2  Mycat介绍

    Mycat(http://www.mycat.io/)是一个支持mysql、sql server等数据库集群化部署的中间件。它由Amoeba和cobar发展而来。

     

    二、负载均衡

    三、测试环境

    服务器

    Mycat

    Mysql-master

    Mysql-slave

    Mysql-master-standby

    Mysql-master-standby

    IP

    127.0.0.1

    10.3.30.161

    10.3.30.238

    120.77.80.215

    10.3.6.84

    Port

    8066/9066

    3306

    3306

    3306

    3306

    Account

    root 123456

    test

    123456

    test

    123456

    test

    123456

    test

    123456

    四、测试脚本

    CREATE TABLE `employee` ( 

      `ID` int(11) NOT NULL, 

      `NAME` varchar(100) default NULL, 

      `SHARDING_ID` int(11) NOT NULL, 

      PRIMARY KEY  (`ID`) 

    )

    INSERT INTO employee(ID,NAME,SHARDING_ID) VALUES ('6', 'amos', '10000');

    五、软件安装

    首先安装mycat-server、mycat-eye、zookeeper和navicat for mysql

    六、服务启动

    6.1  启动mycat

    6.1.1安装java环境

    1、  安装jdk

    2、  配置环境变量

    JAVA_HOME=C:Program FilesJavajdk1.8.0_131

    CLASSPATH=.;%JAVA_HOME%libdt.jar;%JAVA_HOME%lib ools.jar;

    Path =%JAVA_HOME%in;%JAVA_HOME%jrein;

    6.1.2启动mycat服务

    在windows8操作系统上启动mycat服务,命令如下

    cmd 

    cd /d D:EC-OFCJavaMycatMycat-server-1.6mycatin

    startup_nowrap.bat

    6.1.3连接mycat

    6.1.3.1navicat连接

    使用navicat连接mycat,默认端口为8066,密码123456

    6.1.3.2DOS链接

    cmd

    cd /d C:Program FilesMySQLMySQL Server 5.7in

    mysql -uroot -p123456 -P8066

    注意:如果需要使用如show @@datasource命令时,需要连接9066端口而不是8066

    6.2  启动zookeeper

    D:EC-OFC开发工具zookeeper-3.4.10inzkServer.bat

    6.3  启动mycat-eye

    D:EC-OFCJavaMycatmycat-webstart.bat

    七、写集群

    7.1  拓扑图

    7.2  配置文件

    <?xml version="1.0"?>
    <!DOCTYPEmycat:schemaSYSTEM"schema.dtd">
    <mycat:schema xmlns:mycat="http://io.mycat/">

        <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100">
            <table name="employee" primaryKey="ID" dataNode="dn1,dn2"/>
        </schema>
        <dataNode name="dn1" dataHost="host1" database="db1"/>
        <dataNode name="dn2" dataHost="host2" database="db1"/>
        <dataHost name="host1" maxCon="1000" minCon="10" balance="1"
                 
    writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
            <heartbeat>select user()</heartbeat>
            <writeHost host="hostM1" url="120.77.80.215:3306" user="test" password="123456">
            </writeHost>
        </dataHost>
        <dataHost name="host2" maxCon="1000" minCon="10" balance="1"
                 
    writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
            <heartbeat>select user()</heartbeat>
            <writeHost host="hostM2" url="10.3.30.238:3306" user="test" password="123456">
            </writeHost>
        </dataHost>
    </mycat:schema>

    八、主从配置

    8.1  业务要求

    Master挂掉时,Slave还能提供读服务。

    8.2  配置步骤

    注意每台mysql服务器的server-id必须唯一

    第一步:

    在10.3.30.161中创建一个10.3.30.238主机中可以登录的MySQL用户

    用户:mysql238

    密码:123456

    mysql>GRANT REPLICATION SLAVE ON *.* TO ‘mysql238’@’10.3.30.238’ IDENTIFIED BY ‘123456’;

    mysql>FLUSH PRIVILEGES;

    第二步:

    需要先在C:ProgramDataMySQLMySQL Server 5.7my.ini文件中添加log-bin=mysql-bin

    查看10.3.30.161MySQL服务器二进制文件名与位置

    mysql>SHOW MASTER STATUS;

    第三步:

     告知二进制文件名与位置

      在10.3.30.238中执行:

     mysql>CHANGE MASTER TO

    MASTER_HOST='10.3.30.161',

    MASTER_USER='mysql238',

    MASTER_PASSWORD='123456',

    MASTER_LOG_FILE='mybin.000001',

    MASTER_LOG_POS=154;

     

    完成主从复制配置

    8.3  验证配置

    在10.3.30.238中

    mysql> START SLAVE;   #开启复制

    mysql>SHOW SLAVE STATUSG   #查看主从复制是否配置成功

    当看到Slave_IO_Running: YES、Slave_SQL_Running: YES才表明状态正常

    8.4  配置文件

    switchType='-1'意味着当主挂掉的时候,不进行自动切换,即hostS1并不会被提升为主,仍只提供读的功能。这就避免了将数据写进slave的可能性,单纯的MySQL主从集群并不允许将数据写进slave中,除非配置的是双master。

    <mycat:schema xmlns:mycat="http://io.mycat/">
        <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100">
            <table name="employee" primaryKey="ID" dataNode="dn1"/>
        </schema>
        <dataNode name="dn1" dataHost="host1" database="db1"/>
        <dataHost name="host1" maxCon="1000" minCon="10" balance="1"
                 
    writeType="0" dbType="mysql" dbDriver="native" switchType="-1" slaveThreshold="100">
            <heartbeat>select user()</heartbeat>
            <writeHost host="hostM1" url="10.3.30.161:3306" user="test" password="123456">
                <readHost host="hostR1" url="120.77.80.215:3306" user="test" password="123456"/>
            </writeHost>
            <writeHost host="hostS1" url="10.3.30.238:3306" user="test" password="123456">
            </writeHost>
        </dataHost>
    </mycat:schema>

     

    九、Haproxy配置

    9.1  拓扑图

    9.2  配置文件

    此处为haproxy配置文件

    #

    global
      maxconn 1500
      nbproc  1
      daemon

    defaults
            mode tcp
            retries 3
            option  abortonclose
            maxconn 32000
            timeout connect 300000ms
            timeout client  300000ms
            timeout server  300000ms
            log 127.0.0.1   local0 err

    listen admin_stats
            bind :48800
            stats uri /admin-status
            stats auth admin:admin
            mode http
            option httplog
    listen mycat_servers
            bind :3307 ## 绑定端口
            mode tcp
            option tcplog
            #balance source
            server server238 10.3.30.238:8066 check port 8066 weight 1 check
            server server84 10.3.6.84:8066 check port 8066 weight 1 check
    mysql客户端或者应用程序可以通过如上配置的127.0.0.1:3307端口链接haproxy实现链接mycat集群的目的。

    十、注意事项

       1、主主复制配置文件中auto_increment_increment和auto_increment_offset只能保证主键不重复,却不能保证主键有序。

       2、当配置完成Slave_IO_Running、Slave_SQL_Running不全为YES时,show slave statusG信息中有错误提示,可根据错误提示进行更正。

       3、Slave_IO_Running、Slave_SQL_Running不全为YES时,大多数问题都是数据不统一导致。

       常见出错点:

       1、两台数据库都存在db数据库,而第一台MySQL db中有tab1,第二台MySQL db中没有tab1,那肯定不能成功。

       2、已经获取了数据的二进制日志名和位置,又进行了数据操作,导致POS发生变更。在配置CHANGE MASTER时还是用到之前的POS。

       3、stop slave后,数据变更,再start slave。出错。

         终极更正法:重新执行一遍CHANGE MASTER就好了。

  • 相关阅读:
    移植Fatfs文件系统到工程中
    利用官方的ucosiii包中测试板的工程移植到属于自己的开发板(stmf103ZE)上
    华为Liteos移植到stm32F03ZE
    如何使用postman模拟https的post和get请求
    ubuntu 16 搭建只能上传不可下载删除ftp服务
    使用STM32F103ZET霸道主板实现LCD显示屏显示
    资源任务调度算法实现(大数据云计算作业来的)
    STM32F10xx(高容量)WiFi模块的初始化和使用
    使用STM32F103ZET霸道主板实现SD卡的读写(非文件系统)
    单片机期末实训---- 密码锁和交通灯
  • 原文地址:https://www.cnblogs.com/xuyongsong/p/11220789.html
Copyright © 2011-2022 走看看