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

2019-12-07  本文已影响0人  凌康ACG

公司的一个项目生产环境采用读写分离,一主多从模式。参考的网上很多数据库中间件,决定选择用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了解。

上一篇下一篇

猜你喜欢

热点阅读