美文网首页
读写分离mycat一主一从(一)

读写分离mycat一主一从(一)

作者: 凌康ACG | 来源:发表于2019-12-07 14:43 被阅读0次

    公司的一个项目生产环境采用读写分离,一主多从模式。参考的网上很多数据库中间件,决定选择用mycat搭建一主一从一主多从主从容灾切换 这些基本模式,先从一主一从入手。家里一台电脑有限,决定使用ubuntu16+docker compose来搭建多镜像。
    首先创建一个虚拟机:

    image.png
    开启用xshell连接上,docker、compose版本如下
    image.png

    一、docker compose搭建两个mysql

    创建文件夹/usr/local/docker/mysql,分别创建masterslave1两个文件夹,在master、slave1里创建文件my.ini数据库初始化

    master/my.ini如下:
    [mysqld]
    # server-id是唯一值,主从复制的关键
    server-id=1
    # 设置3306端口,主节点
    port=3306
    ## 开启二进制日志功能,让从节点同步
    log-bin=mysql-master-bin
    ## relay_log配置中继日志
    relay_log=slave1-relay-bin
    default-storage-engine=INNODB
    character-set-server=utf8
    [client]
    default-character-set=utf8
    [mysql]
    default-character-set=utf8
    
    slave1/my.ini如下:
    [mysqld]
    [mysqld]
    # server-id是唯一值,主从复制的关键
    server-id=2
    # 设置3307端口,从节点
    port=3307
    default-storage-engine=INNODB
    character-set-server=utf8
    [client]
    default-character-set=utf8
    [mysql]
    default-character-set=utf8
    

    /usr/local/docker/mysql下创建docker-compose.yml内容如下:
    说明:当前最新的数据库2019年12月7日 mysql8.0.18,主节点端口3306,从节点3307,密码都是123456

    version: '3.1'
    services:
      master:
        image: mysql:8.0.18
        restart: always
        environment:
          MYSQL_ROOT_PASSWORD: 123456
        command:
          --default-authentication-plugin=mysql_native_password
          --character-set-server=utf8mb4
          --collation-server=utf8mb4_general_ci
          --explicit_defaults_for_timestamp=true
          --lower_case_table_names=1
        ports:
          - 3306:3306
        volumes:
          - ./master/data:/var/lib/mysql
          - ./master/my.cnf:/etc/my.cnf
    
      slave1:
        image: mysql:8.0.18
        restart: always
        environment:
          MYSQL_ROOT_PASSWORD: 123456
        command:
          --default-authentication-plugin=mysql_native_password
          --character-set-server=utf8mb4
          --collation-server=utf8mb4_general_ci
          --explicit_defaults_for_timestamp=true
          --lower_case_table_names=1
        ports:
          - 3307:3307
        volumes:
          - ./slave1/data:/var/lib/mysql
          - ./slave1/my.cnf:/etc/my.cnf
    
    image.png

    运行docker-compose.yml:

    docker-compose up
    

    然后我们windows主机用navicat11连接虚拟机的数据库master和slave1


    image.png
    image.png

    二、配置主从同步

    检查状态

    首先查询数据库的id: show variables like 'server_id';

    master.png
    slave1.png
    也可以查看当前数据库开放的端口:show global variables like 'port';
    port.png
    设置同步
    1、master主节点

    在master:3306中创建一个用户lingkang密码lingkang_top,用于从节点链接主节点时使用:

    #192.168.75.129是VMWare的地址,使用 % 允许任何ip连接
    CREATE USER 'lingkang'@'%' IDENTIFIED 
    WITH mysql_native_password BY 'lingkang_top';
    GRANT REPLICATION SLAVE ON *.* TO 'lingkang'@'%'; 
    #由于我使用Navicat执行sql,需要改下加密规则,否则Navicat链接lingkang这个用户失败!
    ALTER USER 'lingkang'@'%' IDENTIFIED BY 'lingkang_top' PASSWORD EXPIRE NEVER;
    # 刷新授权信息
    flush privileges;
    # 获取主节点当前binary log文件名和位置(position)
    SHOW MASTER STATUS;
    
    master.png
    几下:mysql-master-bin.0000016366
    2、slave1从节点
    reset slave; #先复位从节点
    CHANGE MASTER TO 
    MASTER_HOST='192.168.75.129', #此处为vmware主机的地址
    MASTER_USER='lingkang',
    master_port=3306, #主节点端口
    MASTER_PASSWORD='lingkang_top',
    MASTER_LOG_FILE='mysql-master-bin.000001', # 主节点的
    MASTER_LOG_POS=6366;   # 主节点的
    # 开启主从同步
    start slave;
    # 查看主从同步状态
    show slave status;
    
    slave1.png
    slave1.png

    在master创建一个数据库试试:然后刷新从库可以看到了,说明主从同步成功!


    master.png

    三、搭建Mycat

    搭建Mycat根据官网就能完成搭建 http://www.mycat.io/
    首先下载到Linux上的/usr/local/mycat,我们使用当前2019年12月7日最新release1.6.7.3

    mkdir /usr/local/mycat
    cd /usr/local/mycat
    //下载最新release
    wget http://dl.mycat.io/1.6.7.3/20190828135747/Mycat-server-1.6.7.3-release-20190828135747-linux.tar.gz
    //解压
    tar -zxvf Mycat-server-1.6.7.3-release-20190828135747-linux.tar.gz
    //删除,我这里暂时不删除,后面还要搭建一主多从、多主从从
    rm -rf Mycat-server-1.6.7.3-release-20190828135747-linux.tar.gz
    cd mycat
    cd conf
    vi server.xml
    

    修改下最下面的userroot两个用户的数据库lingkangDB、密码666666

            <user name="root" defaultAccount="true">
                    <property name="password">666666</property>
                    <property name="schemas">lingkangDB</property>
            </user>
            <user name="user">
                    <property name="password">666666</property>
                    <property name="schemas">lingkangDB</property>
                    <property name="readOnly">true</property>
            </user>
    
    image.png
    编辑schema.xml(关键)

    vi schema.xml

    <?xml version="1.0"?>
    <!DOCTYPE mycat:schema SYSTEM "schema.dtd">
    <mycat:schema xmlns:mycat="http://io.mycat/">
    
            <!-- 这里对应 server.xml 的lingkangDB -->
            <schema name="lingkangDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="myNode">
            </schema>
        <!--数据节点, 我们在数据库中先创建一个名为lingkang的数据库-->
        <dataNode name="myNode" dataHost="mycat-node-host" database="lingkang" />
    
        <dataHost name="mycat-node-host" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
    
            <heartbeat>select user()</heartbeat>
    
            <writeHost host="master" url="192.168.75.129:3306" user="root" password="123456">
                 <readHost host="slave1" url="192.168.75.129:3307" user="root" password="123456">
                 </readHost>
            </writeHost>
        </dataHost>
    
    </mycat:schema>
    

    启动mycat

    我们知道mycat用java写的,需要jdk环境,我们需要安装jdk,由于篇幅,在另一篇文章中介绍jdk的安装:https://www.jianshu.com/p/da1fb70123e1

    启动前先去master数据库创建lingkang这个数据库,然后运行mycat默认管理端口9066,连接端口8066

    cd ..
    cd bin
    chmod +x *
    //运行
    ./mycat console
    
    image.png

    启动成功!使用Navicat访问mycat:管理端口是9066,连接是8066


    image.png

    最后项目连接mycat即可,一主多从:多配置几个slave即可。
    关于测压:
    电脑2核4线程的cpu测不动,留着以后有机会再测压。
    关于遇到的坑:
    MySQL8设置下密码加密方式才能正常使用navicat了解。

    相关文章

      网友评论

          本文标题:读写分离mycat一主一从(一)

          本文链接:https://www.haomeiwen.com/subject/dzhugctx.html