基于 Docker 架构 Mysql 集群 + Mysql Router 搭建(一主多从)

Mysql 集群配置准备
在这里插入图片描述

docker容器名地址+端口
mysql_master192.168.56.120:3307
mysql_slave1192.168.56.120:3308
mysql_slave2192.168.56.120:3309
mysql_router192.168.56.120:3310

依次创建目录,用于存放节点配置文件,避免在 docker 容器中修改

mkdir -p /mydata/mysql_cluster/master

mkdir -p /mydata/mysql_cluster/slave1

mkdir -p /mydata/mysql_cluster/slave2

创建 Master 节点的 my.cnf 配置文件,并写入如下内容

vim /mydata/mysql_cluster/master/my.cnf

## 修改内容 ##
# 开启 binlog
log-bin=mysql-bin
# 实例 ID
server-id=1
# 需要同步的数据库名
binlog-do-db=vsr_basic
#不需要同步的数据库名
# binlog-ignore-db=

创建 Slave1 和 Slave2 节点的 my.cnf 配置文件,并写入如下内容

vim /mydata/mysql_cluster/slave1/my.cnf

vim /mydata/mysql_cluster/slave2/my.cnf

## 依次修改内容(slave1 和slave2 内容一致,除了 server-id ) ##
[mysqld]

server-id=2
log-bin=mysql-bin
replicate-do-db=vsr
# replicate-ignore-db=

Docker 网络环境准备
在 Docker 中创建自定义网络,因启动 Docker 容器的时候,使用默认的网络是不支持指派固定IP的

docker network create --subnet=172.18.0.0/16 mynetwork

查看自定义网络是否创建成功 (若打印出 mynetwork 说明创建成功)

docker network ls

一、构建 Master 节点
使用 docker 创建 mysql_master 容器

docker run --name mysql_master -v /mydata/mysql_cluster/master/:/etc/mysql/conf.d/ -e MYSQL_ROOT_PASSWORD=自定义数据库密码 -p 3307:3306 --net mynetwork --ip 172.18.0.2 -d mysql:5.7

测试连接
在这里插入图片描述

二、构建 Slave1 节点
使用 docker 创建 mysql_slave1 容器

docker run --name mysql_slave1 -v /mydata/mysql_cluster/slave1/:/etc/mysql/conf.d/ -e MYSQL_ROOT_PASSWORD=自定义数据库密码 -p 3308:3306 --net mynetwork --ip 172.18.0.3 -d mysql:5.7

测试连接
在这里插入图片描述

三、构建 Slave2 节点
使用 docker 创建 mysql_slave2 容器

docker run --name mysql_slave2 -v /mydata/mysql_cluster/slave2/:/etc/mysql/conf.d/ -e MYSQL_ROOT_PASSWORD=自定义数据库密码 -p 3309:3306 --net mynetwork --ip 172.18.0.4 -d mysql:5.7

测试连接
在这里插入图片描述

四、设置主从连接
依次使用数据库连接工具打开 slave1 和 slave2 对应节点的 mysql 命令行,执行如下命令

mysql> change master to master_host='192.168.56.120',master_port=3307,master_user='root',master_password='Master节点的数据库密码';

启动 slave 实现主从连接

mysql> start slave;

查看主从连接是否成功启动 (若成功,可见 I/O 线程 和 SQL 线程 状态信息为 " yes ")

mysql> show slave status;

五、测试主从复制状态

自行在 Master 节点中创建 之前在配置文件中配置的数据库,然后在从节点查看是否同步创建了相应数据库即可验证是否成功实现了主从连接;

六、Mysql Router

1. 介绍

MySQL路由器是高可用性(HA)解决方案的基础。它通过智能地将连接路由到MySQL服务器来简化应用程序开发,从而提高性能和可靠性。

MySQL路由器是InnoDB集群的一部分,是轻量级的中间件,提供应用程序和后端MySQL服务器之间的透明路由。它用于各种各样的用例,比如通过将数据库流量路由到适当的后端MySQL服务器来提供高可用性和可伸缩性。可插入的体系结构还允许开发人员扩展MySQL路由器以适应定制用例。

为了让客户机应用程序处理故障转移,它们需要了解InnoDB集群拓扑结构,并知道哪个MySQL实例是主实例。虽然应用程序可以实现这种逻辑,但MySQL Router可以为您提供并处理这种功能。

MySQL使用组复制来跨多个服务器复制数据库,同时在服务器发生故障时执行自动故障转移。当与MySQL InnoDB集群一起使用时,MySQL路由器充当代理来隐藏网络中的多个MySQL实例,并将数据请求映射到一个集群实例。只要有足够的在线副本,并且组件之间的通信是完整的,应用程序就能够联系其中的一个。MySQL路由器也可以让应用程序连接到MySQL路由器,而不是直接连接到MySQL。

2. 使用MySQL InnoDB集群部署路由器

  • 首先在自行到官网下载 Mysql Router 安装包。
  • 创建 mysql_router 容器
docker run --name mysql_router -p 3310:3310 --net mynetwork --ip 172.18.0.5 -itd centos:centos7  
  • 上传至主机中的 /opt 目录下,并使用 docker 复制命令将安装包复制到 mysql_router 容器中的 /opt 目录下
docker cp /opt/mysql-router-8.0.19-el7-x86_64.tar.gz mysql_router:/opt     
  • 进入到 mysql_router 容器的命令行中
docker exec -it mysql_router /bin/bash
  • 解压安装包
cd /opt

tar -zxvf /opt/mysql-router-8.0.19-el7-x86_64.tar.gz
  • 链接
ln -s /opt/mysql-router-8.0.19-el7-x86_64 /usr/local/mysqlrouter
  • 修改配置文件
vi ~/.bashrc

## 新增内容 ##
export MYSQL_ROUTER_HOME=/usr/local/mysqlrouter
export PATH=$PATH:$MYSQL_ROUTER_HOME/bin
  • 使配置文件生效
source ~/.bashrc
  • 验证安装(若打印出版本等相关信息,即说明安装成功)
mysqlrouter --help
  • 从示例配置中复制一份配置文件
cp /usr/local/mysqlrouter/share/doc/mysqlrouter/sample_mysqlrouter.conf /usr/local/mysqlrouter/share/doc/mysqlrouter/mysqlrouter.conf
  • 修改 mysql-router 的配置文件
vi /usr/local/mysqlrouter/share/doc/mysqlrouter/mysqlrouter.conf

## 新增内容 ##
[DEFAULT]
# 设置日志目录
logging_folder = /usr/local/mysqlrouter/logs
[logger]
# 定义日志级别
level = INFO

[routing:basic_failover]
# Router 地址
bind_address = 0.0.0.0
# Router 端口
bind_port = 3310
# 读写模式
mode = read-write
# 目标服务器
destinations = 192.168.56.120:3307,192.168.56.120:3308,192.168.56.120:3309
  • 创建日志目录
mkdir -p /usr/local/mysqlrouter/logs
  • 添加自启动脚本,避免每次从前重启都需要手动开启
vi ~/.bashrc
# 在底部新增以下命令,即可实现启动 docker 容器自启动 mysql router 进程
mysqlrouter -c /usr/local/mysqlrouter/share/doc/mysqlrouter/mysqlrouter.conf
  • 使配置文件生效
source ~/.bashrc
  • 测试连接 mysql_router
    在这里插入图片描述

至此,基于 Docker 架构 Mysql 集群 + Mysql Router 搭建完毕。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐