DOCKER部署mycat2+mysql8实现读写分离 | 您所在的位置:网站首页 › 冷月白狐的密码 › DOCKER部署mycat2+mysql8实现读写分离 |
DOCKER部署mycat2+mysql8实现读写分离
DOCKER 部署MYSQL主从复制mysql主节点部署etc/my.cnf 修改创建同步用户并授予权限重启容器进入容器root用户登录mysql查看主节点状态(或者直接在myql客户端操作也可以)主从节点ssl通讯
mysql从节点部署主从节点SSL通讯etc/my.cnf 修改重启从节点容器进入容器测试主从节点的ssl通讯是否正常退出同步用户登录后重新使用root用户登录从节点mysql设置主节点信息查询从节点状态在主节点 新创建数据库或者其他操作验证主从复制成功
DOCKER 部署MYCAT创建mycat用户创建mycat容器配置主从集群信息实现读写分离创建逻辑库修改逻辑库添加从库数据源更新集群信息
验证创建表在新建的表中写入数据故意修改从节点数据造成主从数据不一致在mycat节点连续多次查询数据发现可以查询到不同的结果验证成功
参考文章
DOCKER 部署MYSQL主从复制
mysql主节点部署
docker run -d -p 6606:3306 -e MYSQL_ROOT_PASSWORD=root --name mysql-master mysql
etc/my.cnf 修改
[mysqld]中加入以下内容 log_bin server-id=1 创建同步用户并授予权限 create user 'mysqlSync'@'%' identified by '!@#123' require ssl; grant replication slave on *.* to 'mysqlSync'@'%' ; flush privileges; 重启容器 docker restart mysql-master 进入容器root用户登录mysql查看主节点状态(或者直接在myql客户端操作也可以) docker exec -it mysql-master /bin/bash mysql -uroot -p输入密码登录成功后查询主节点状态 show master status ;记下 file 和 Position 的值 从节点要用到 主从节点ssl通讯将主节点/var/lib/mysql中的 ca.pem ,client-cert.pem ,client-key.pem 保存出来稍后拷贝到从节点容器中 mysql从节点部署 docker run -d -p 6607:3306 -p 33061:33060 -e MYSQL_ROOT_PASSWORD=root --name mysql-slave mysql 主从节点SSL通讯将之前从主节点保存出来的 ca.pem ,client-cert.pem ,client-key.pem 拷贝到从节点容器中,路径自定义,这里我选择/home/ca/master_ca/ etc/my.cnf 修改[mysqld]中加入以下内容 relay_log=relay-bin relay_log_index=slave-relay-bin server-id=2 # 注意server-id 要唯一 # Ca ssl-ca=/home/ca/master_ca/ca.pem ssl-cert=/home/ca/master_ca/client-cert.pem ssl-key=/home/ca/master_ca/client-key.pem 重启从节点容器 docker restart mysql-slave 进入容器 docker exec -it mysql-slave /bin/bash 测试主从节点的ssl通讯是否正常 mysql --ssl-ca=/home/ca/master_ca/ca.pem --ssl-cert=/home/ca/master_ca/client-cert.pem --ssl-key=/home/ca/master_ca/client-key.pem -umysqlSync -p -h 主节点ip ;输入密码后登录成功表示正常 退出同步用户登录后重新使用root用户登录从节点mysql设置主节点信息退出同步用户登录 重新使用root用户登录从节点mysql 设置主节点信息 -- 设置主节点信息 CHANGE REPLICATION SOURCE TO SOURCE_HOST='主节点ip',SOURCE_USER='mysqlSync',SOURCE_PASSWORD='!@#123',SOURCE_LOG_FILE='之前记在主节点查询到的file值',SOURCE_LOG_POS=之前在主节点查询到的Position的值,SOURCE_SSL=1,SOURCE_SSL_CA='/home/master_ca/ca.pem',SOURCE_SSL_CERT='/home/master_ca/client-cert.pem',SOURCE_SSL_KEY='/home/master_ca/client-key.pem'; -- 开启数据同步 start replica; 查询从节点状态 show slave status \G; 在主节点 新创建数据库或者其他操作验证主从复制成功在主节点执行 CREATE DATABASE nacos;查看主节点 查看从节点 至此 docker搭建mysql主从复制成功 DOCKER 部署MYCAT 创建mycat用户在mysql主节点执行sql CREATE USER 'mycat'@'%' IDENTIFIED BY '!@#123'; -- 必須要複的權限 mysql8才有的 GRANT XA_RECOVER_ADMIN ON *.* TO 'root'@'%'; -- - 視情況賦值權限 GRANT ALL PRIVILEGES ON *.* TO 'mycat'@'%' ; flush privileges; 创建mycat容器 docker run -d -p 8066:8066 -e ENV DATA_SOURCE_PASSWORD=root -e ENV DATA_SOURCE_URL=jdbc:mysql://宿主机ip:6606/mysql?useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=UTF-8 --name mycat2 zhangyx1619/mycat2:mysql-1.2.1镜像mycat2zhangyx1619/mycat2:mysql-1.2.1 拥有以下环境变量需要根据实际情况进行设置 ENV DATA_SOURCE_URL 主数据源链接ENV DATA_SOURCE_USER 主数据源登录用户ENV DATA_SOURCE_PASSWORD 主数据源登录密码ENV MYCAT_ROOT_PASSWORD mycat 的root用户密码使用sqLyog链接 mycat 配置主从集群信息实现读写分离 创建逻辑库 -- 创建逻辑库 CREATE DATABASE nacos;此时查看 /usr/local/mycat/conf/schemas/ 发现mycat自动创建了配置文件nacos.schema.json 查看nacos.schema.json内容 customTables放置的是mycat默认的表的配置globalTables放置的是全局表的配置shardingTables放置分片表的配置normalTables放置普通表的配置 修改逻辑库 -- 修改逻辑库 指定nacos逻辑库默认的targetName, mycat会自动加载nacos下已经有的物理表或者视图作为单表. /*+ mycat:createSchema{ "customTables":{}, "globalTables":{}, "normalTables":{}, "schemaName":"nacos", "shardingTables":{}, "targetName":"prototype" } */;此时再次查看/usr/local/mycat/conf/schemas/nacos.schema.json发现已经自动加载单表boradtable在normalTables中了 此时的运行架构 添加从库数据源 /*+ mycat:createDataSource{ "name":"reader01", "url":"jdbc:mysql://宿主机ip:6607/?useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=UTF-8", "user":"root", "password":"root" } */; -- 查询数据源 /*+ mycat:showDataSources{} */; 更新集群信息 /*! mycat:createCluster{"name":"prototype","masters":["prototypeDs"],"replicas":["reader01"]} */; -- 查询集群信息 /*+ mycat:showClusters{} */;此时的运行架构 验证 创建表 在新建的表中写入数据 insert into nacos.mycat_test values('123',@@hostname);此时 主数据状态 从节点数据 故意修改从节点数据造成主从数据不一致 -- 在从节点mysql执行此sql UPDATE nacos.mycat_test SET NAME=@@hostname WHERE id='123'此时从节点数据 此时主节点数据 在mycat节点连续多次查询数据发现可以查询到不同的结果验证成功发现可以查询到不同的结果,说明查询sql确实分别分发到了主节点和从节点执行了,至此读写分离实现成功 参考文章https://blog.csdn.net/w329636271/article/details/119729831 |
CopyRight 2018-2019 实验室设备网 版权所有 |