前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何使用Docker安装Mycat中间件 | 实现主从的读写分离,搭建属于你的Mysql 集群 | 来看看这篇吧

如何使用Docker安装Mycat中间件 | 实现主从的读写分离,搭建属于你的Mysql 集群 | 来看看这篇吧

作者头像
宁在春
发布2022-10-31 15:42:16
9700
发布2022-10-31 15:42:16
举报

上一篇写了如何使用Docker搭建Mysql的主从复制,这篇文章是在已经搭建好Mysql的主从复制的基础上实现读写分离的。 直接CV也能搭建起来,莫慌。 我们一起加油!!!

在这里插入图片描述
在这里插入图片描述

只要有docker的环境就欧克了。

一、创建Mycat文件夹

代码语言:javascript
复制
mkdir /usr/local/mycat/conf -p

二、创建Docker文件夹

代码语言:javascript
复制
mkdir /usr/local/docker/mycat/ -p

然后cd到/usr/local/docker/mycat 目录下

代码语言:javascript
复制
cd /usr/local/docker/mycat
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、下载Mycat并解压

在这个目录下(/usr/local/docker/mycat)下载 Mycat

代码语言:javascript
复制
wget http://dl.mycat.org.cn/1.6.7.1/Mycat-server-1.6.7.1-release-20190627191042-linux.tar.gz
在这里插入图片描述
在这里插入图片描述

Mycat-server-1.6.7.1-release-20190627191042-linux重命名为mycat

代码语言:javascript
复制
mv Mycat-server-1.6.7.1-release-20190627191042-linux.tar.gz mycat.tar.gz
在这里插入图片描述
在这里插入图片描述

mycat.tar.gz进行解压

代码语言:javascript
复制
tar -zxvf mycat.tar.gz
在这里插入图片描述
在这里插入图片描述

此时目录结构:

在这里插入图片描述
在这里插入图片描述

为了不破坏原来的文件,我们将mycat的配置文件复制到/usr/local/mycat下。

代码语言:javascript
复制
cp -r mycat/conf/ /usr/local/mycat # 当前文件夹下mycat/conf/ 复制到 /usr/local/mycat 目录下  

可以看到已经复制成功了。

在这里插入图片描述
在这里插入图片描述

四、编写Dockerfile文件

依旧是在/usr/local/docker/mycat目录下进行操作:

代码语言:javascript
复制
vim dockerfile

dockerfile文件内容:

代码语言:javascript
复制
#基于openjdk:8 创建镜像,
#如果是基于centos或其他的,必须保证已安装了JDK,否则就需要在Dockerfile文件中也ADD进来
FROM openjdk:8

#将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar压缩包
#将mycat解压到/usr/local目录中,得到 /usr/local/mycat
ADD mycat.tar.gz /usr/local

#容器数据卷,用于数据保存和持久化工作
#将mycat的配置文件的地址暴露出映射地址,启动时直接映射宿主机的文件夹
VOLUME /usr/local/mycat
WORKDIR /usr/local/mycat

#用来在构建镜像过程中设置环境变量
ENV MYCAT_HOME=/usr/local/mycat

#暴露出MyCat的所需端口
EXPOSE 8066 9066

#以前台进程的方式启动MyCat服务
CMD ["/usr/local/mycat/bin/mycat", "console","&"]   

五、打包镜像

代码语言:javascript
复制
docker build -t mycat:1.6 . #注意最后的小数点 .   点代表dockerfile文件在执行打包命令的目录下 
在这里插入图片描述
在这里插入图片描述

六、编写Mycat配置文件

跳转到/usr/local/mycat/conf/ 目录下(就是我们之前将配置文件复制去的那个目录)

代码语言:javascript
复制
cd /usr/local/mycat/conf/ ls #展示文件
在这里插入图片描述
在这里插入图片描述

重点文件就是标红的三个

  • schema.xml、server.xml :用于读写分离,在我们这个小Demo中,只对schema.xml做了编辑。
  • rule.xml:用于分表分库配置文件。
  • 详情请查询相关官方文档。

编辑schema.xml文件:

代码语言:javascript
复制
vim schema.xml

默认文件内容:

在这里插入图片描述
在这里插入图片描述

删除不必要的,改成下面这样的即可。

代码语言:javascript
复制
<?xml version="1.0"?><!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">        
    <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">        
    </schema>
    <dataNode name="dn1" dataHost="localhost1" database="testdb" />        
    <dataHost name="localhost1" maxCon="1000" minCon="10" balance="3"                          writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">                
        <heartbeat>select user()</heartbeat>                
        <writeHost host="hostM1" url="47.113.227.254:3310" user="root"                                   password="123456">                        
            <readHost host="hostS2" url="47.113.227.254:3311" user="root" password="123456" />                </writeHost>        
    </dataHost>
</mycat:schema>

关于schema.xml做几点简单说明:

  1. dataHost下的balance属性,也是通过此属性配置读写分离的类型:
    • balance=“0”, 不开启读写分离机制,所有读操作都发送到当前可用的 writeHost 上。
    • balance=“1”,全部的 readHost 与 stand by writeHost 参与 select 语句的负载均衡,
    • balance=“2”,所有读操作都随机的在 writeHost、readhost 上分发。
    • balance=“3”,所有读请求随机的分发到 readhost 执行,writerHost 不负担读压力
  2. writeType=“0”: 所有写操作发送到配置的第一个writeHost,第一个挂了切到还生存的第二个
  3. switchType=“1”:
    • 1 默认值,自动切换。
    • -1 表示不自动切换
    • 基于 MySQL 主从同步的状态决定是否切换。

补充-命令模式下的快速删除

按下insert键后–>再按下Esc进入命令模式。

  • dd即删除光标当前所在行。
  • ndd(n表示你输入的数字)表示删除包括光标所在行开始后的n行。

七、启动镜像

代码语言:javascript
复制
docker run --name mycat -p 8066:8066 -p 9066:9066 -v /usr/local/mycat/conf/:/usr/local/mycat/conf/ -v /usr/local/mycat/logs/:/usr/local/mycat/logs/ -d mycat:1.6
代码语言:javascript
复制
docker ps -a #查看容器docker logs mycat #查看运行日志
在这里插入图片描述
在这里插入图片描述

八、连接测试

8.1、Navicat连接

可使用Navicat或者CMD命令行。

在这里插入图片描述
在这里插入图片描述

关于这里的账号和密码

是在之前提到过的server.xml配置文件中。

在这里插入图片描述
在这里插入图片描述

我的连接上是这样的,因为我已经搭建起了主从复制,里面也有表,所以是这样的。

在这里插入图片描述
在这里插入图片描述

8.2、CMD连接

代码语言:javascript
复制
mysql -uroot -p123456 -h IP地址 -P 8066
在这里插入图片描述
在这里插入图片描述

8.3、读写分离测试

我们在主机中insert一句insert into mytable values(99,@@hostname),这样就可以看出问题了。

从机在复制这条语句去执行的时候,和出现和主机不一样的数据(有混合配置可以处理,我这里没有处理,主要产生于函数),这样我们再使用mycat去读取数据,就可以看到是否实现读写分离了。

主机

在这里插入图片描述
在这里插入图片描述

从机

在这里插入图片描述
在这里插入图片描述

从机取到的数据是不一样的。

mycat读取

在这里插入图片描述
在这里插入图片描述

可以看到读取的是从机上的数据,可以说明我们确实已经实现了读写分离啦。

九、自言自语

我其实真的非常好奇,一个真正高可用的系统要用多少个服务器😂。

写出来蛮久了,但是这方面看的人少,就一直留着自己在玩。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-12-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、创建Mycat文件夹
  • 二、创建Docker文件夹
  • 三、下载Mycat并解压
  • 四、编写Dockerfile文件
  • 五、打包镜像
  • 六、编写Mycat配置文件
  • 七、启动镜像
  • 八、连接测试
    • 8.1、Navicat连接
      • 8.2、CMD连接
        • 8.3、读写分离测试
        • 九、自言自语
        相关产品与服务
        容器镜像服务
        容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档