• MyCat2搭建读写分离


    实现MySQL数据库的读写分离之前需要使数据库服务器之间可以主从复制,主从复制可以看这个帖子——MySQL实现主从复制

    1、下载安装mycat2

    # 创建存放mycat2的文件夹
    mkdir -p /usr/local/mycat2
    
    # 打开
    cd /usr/local/mycat2
    
    # 解压tar包壳
    wget http://dl.mycat.org.cn/2.0/install-template/mycat2-install-template-1.21.zip
    
    # 下载 Mycat 2 所需依赖 jar
    wget http://dl.mycat.org.cn/2.0/1.21-release/mycat2-1.21-release-jar-with-dependencies.jar
    
    # 解压tar包壳
    unzip mycat2-install-template-1.21.zip
    
    cd mycat
    
    # 复制 Mycat 2 所需依赖 jar 到 mycat 的 lib 文件夹
    cp ../mycat2-1.21-release-jar-with-dependencies.jar lib/
    
    # 修改tar包壳bin/ 目录下所有文件的权限
    chmod 777 mycat/bin/*
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    2、创建mycat数据库

    在主节点(主库)创建mycat数据库,供mycat内部使用,Mycat 在启动时,会自动在原型库下创建其运行时所需的数据表。

    CREATE DATABASE IF NOT EXISTS `mycat`;
    
    • 1

    3、配置 Mycat 原型库的数据源(datasource)信息

    cd /usr/local/mycat2/mycat/conf/datasources
    // 编辑mycat数据库数据源信息
    vi prototypeDs.datasource.json
    
    • 1
    • 2
    • 3

    配置文件

    {
        // 数据库类型
        "dbType":"mysql",
        "idleTimeout":60000,
        "initSqls":[],
        "initSqlsGetConnection":true,
        // 数据库读写类型:READ、WRITE、READ_WRITE。Mycat 对数据库需要是可读可写的
        "instanceType":"READ_WRITE",
        "maxCon":1000,
        "maxConnectTimeout":3000,
        "maxRetryCount":5,
        "minCon":1,
        // 数据源名称,这里不要修改
        "name":"prototypeDs",
        // 数据库密码
        "password":"123456",
        "type":"JDBC",
        // 数据库连接
        "url":"jdbc:mysql://192.168.60.251:3306/mycat?useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=UTF-8",
        // 数据库用户
        "user":"root",
        "weight":0
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    3、添加 master_slave 数据库的数据源信息,一主一从

    //复制一份主数据库数据源信息
    cp prototypeDs.datasource.json master01.datasource.json
    //复制一份从数据库数据源信息
    cp prototypeDs.datasource.json slave01.datasource.json
    // 编辑主数据库数据源信息
    vi master01.datasource.json
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    主库配置文件

    {
        "dbType":"mysql",
        "idleTimeout":60000,
        "initSqls":[],
        "initSqlsGetConnection":true,
        // 数据库读写类型。在数据库集群时,Mycat 对主节点都是可读可写的
        "instanceType":"READ_WRITE",
        "maxCon":1000,
        "maxConnectTimeout":3000,
        "maxRetryCount":5,
        "minCon":1,
        // 数据源名称。在后面配置数据库集群时会用到
        "name":"master01",
        // 数据库密码
        "password":"123456",
        "type":"JDBC",
        // 主节点数据库连接
        "url":"jdbc:mysql://192.168.60.251:3306/arpro_colony?useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=UTF-8",
        // 数据库用户
        "user":"root",
        "weight":0
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    从库配置文件

    //编辑从数据库数据源信息
    vi slave01.datasource.json
    
    • 1
    • 2
    {
        "dbType":"mysql",
        "idleTimeout":60000,
        "initSqls":[],
        "initSqlsGetConnection":true,
        // READ数据库只读写类型。在数据库集群时,Mycat 对从节点都是只读的
        "instanceType":"READ",
        "maxCon":1000,
        "maxConnectTimeout":3000,
        "maxRetryCount":5,
        "minCon":1,
        // 数据源名称。在后面配置数据库集群时会用到
        "name":"slave01",
        // 数据库密码
        "password":"123456",
        "type":"JDBC",
        // 从节点数据库连接
         "url":"jdbc:mysql://192.168.60.252:3306/arpro_colony?useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=UTF-8",
        // 数据库用户
        "user":"root",
        "weight":0
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    4、配置 master_slave 数据源的集群(cluster)信息

    cd /usr/local/mycat2/mycat/conf/clusters
    
    • 1

    注意:这里不要删除 prototype.cluster.json,否则启动 Mycat 时会报错(是啥就是啥,不要动它就行了)

    //复制一份主从配置数据库数据源信息
    cp prototype.cluster.json master-slave.cluster.json
    vi master-slave.cluster.json
    
    • 1
    • 2
    • 3

    主从配置文件

    {
        // 集群类型:SINGLE_NODE(单节点)、MASTER_SLAVE(普通主从)、GARELA_CLUSTER(garela cluster/PXC集群)等
        "clusterType":"MASTER_SLAVE",
        "heartbeat":{
            "heartbeatTimeout":1000,
            "maxRetry":3,
            "minSwitchTimeInterval":300,
            "slaveThreshold":0
        },
        "masters":[
            // 主节点数据源名称
            "master01"
        ],
        "replicas":[
            // 从节点数据源名称
            "slave01"
        ],
        "maxCon":200,
        // 集群名称。在后面配置物理库(schema)时会用到
        "name":"master-slave",
        "readBalanceType":"BALANCE_ALL",
        // NOT_SWITCH(不进行主从切换)、SWITCH(进行主从切换)
        "switchType":"NOT_SWITCH"
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    5、配置物理库(schema)和 Mycat 中数据源/数据源集群的关系

    cd /usr/local/mycat2/mycat/conf/schemas
    vi master_slave.schema.json
    
    • 1
    • 2
    {
        // 物理库
        "schemaName": "papis_cloud",
        // 指向集群,或者数据源
        "targetName": "master-slave",
        // 这里可以配置数据表相关的信息,在物理表已存在或需要启动时自动创建物理表时配置此项
        "normalTables": {}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    6、修改 Mycat 登录用户信息

    cd /usr/local/mycat2/mycat/conf/users
    vi root.user.json
    
    • 1
    • 2

    mycat的登录信息

    {
        "dialect":"mysql",
        // ip 为 null,允许任意 ip 登录
        "ip":null,
        //登录密码
        "password":"123456",
        "transactionType":"xa",
        //登录账户
        "username":"root"
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    7、Mycat 服务端口等信息根据情况修改,此处不修改

    cd /usr/local/mycat2/mycat/conf
    vi server.json
    
    • 1
    • 2

    mycat的默认信息

    {
        "loadBalance":{
            "defaultLoadBalance":"BalanceRandom",
            "loadBalances":[]
        },
        "mode":"local",
        "properties":{},
        "server":{
            "bufferPool":{
    
            },
            "idleTimer":{
                "initialDelay":3,
                "period":60000,
                "timeUnit":"SECONDS"
            },
            "ip":"0.0.0.0",
            "mycatId":1,
            "port":8066,
            "reactorNumber":8,
            "tempDirectory":null,
            "timeWorkerPool":{
                "corePoolSize":0,
                "keepAliveTime":1,
                "maxPendingLimit":65535,
                "maxPoolSize":2,
                "taskTimeout":5,
                "timeUnit":"MINUTES"
            },
            "workerPool":{
                "corePoolSize":1,
                "keepAliveTime":1,
                "maxPendingLimit":65535,
                "maxPoolSize":1024,
                "taskTimeout":5,
                "timeUnit":"MINUTES"
            }
        }
    }
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41

    8、安装jdk8,并配置环境变量

    (1)、查看Java信息以及相关的Java文件

    //查看JDK信息,输入:
    java -version
    
    //检测jdk的安装包,输入:
    rpm -qa | grep java 
    
    • 1
    • 2
    • 3
    • 4
    • 5

    (2)、接着删除相关Java文件,并检查是否删除完即可

    //删除
    rpm -e --nodeps 包名
    
    //检查是否删除完
    rpm -qa | grep java
    
    • 1
    • 2
    • 3
    • 4
    • 5

    (3)、安装jdk1.8

    yum install java
    
    • 1

    (4)、查询安装好的jdk版本

    java -version
    
    • 1

    9、启动 Mycat

    ./bin/mycat start
    
    • 1

    (1)、mycat的相关命令

    # 查看状态
    ./bin/mycat status
    # 启动
    ./bin/mycat start
    # 停止
    ./bin/mycat stop
    # 暂停
    ./bin/mycat pause
    # 重启
    ./bin/mycat restart
    # 前台运行
    ./bin/mycat console
    # 查看日志文件
    tail -f /usr/local/mycat2/mycat/logs/wrapper.log
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    10、测试读写分离

    主节点新增一条数据,使用select查询
    从节点新增一条数据,再次使用select查询
    主节点新增的数据会同步到从节点,从节点新增的数据不会同步到主节点,所以主节点新增的数据在从节点可以查到,从节点新增的数据在主节点查不到

  • 相关阅读:
    【云原生】快出数量级的性能是怎样炼成的?就提升了亿点点
    Linux防火墙之SNAT与DNAT
    Sleuth+Zipkin链路追踪
    AOSP源码中Android.mk文件中的反斜杠符号(\)的作用和使用
    机器学习实战(1)——概览
    【Matplotlib】学术论文黑白柱状图绘制
    运动耳机什么牌子的好,推荐几款排行靠前的耳机
    Kafka3.0.0版本——消费者(消费者组初始化流程图解)
    计算机缺失pasmutility.dll怎么办,三步解决pasmutility.dll缺失
    Scss
  • 原文地址:https://blog.csdn.net/weixin_44684272/article/details/125916297