docker+mysql集群部署
·
本指南将介绍在 CentOS 8 环境下,使用 Docker 搭建 MySQL (8.0.32)双主复制集群。双主复制意味着两个 MySQL实例都可读写并相互同步,以此提高可用性。主要内容包括:
- 环境准备:系统与软件要求。
- 网络与数据规划:创建 Docker 网络和宿主机数据目录。
- 部署与配置:启动容器并配置MySQL 双主复制。
- 验证测试:检查复制状态并进行数据同步测试。
接下来是详细的部署步骤:
1. 环境准备与前提条件
开始部署前,请确保你的CentOS 8系统已安装以下软件并满足基本要求:
- Docker: 版本 ≥ 20.10.7
- 系统资源:建议至少 4核 CPU / 8GB 内存
- 安装Docker和Docker Compose
- 如果系统尚未安装Docker,可以通过以下命令安装:
安装Docker
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install -y docker-ce docker-ce-cli containerd.io
sudo systemctl start docker
sudo systemctl enable docker
验证安装:
安装完成后,使用以下命令验证安装是否成功:
```bash
docker --version
2. 创建Docker容器数据目录
为了确保容器间能够持久化数据,需要先创建一个专用的Docker数据目录。
创建数据与配置目录:
为每个MySQL节点创建独立的数据和配置目录,防止数据丢失并便于管理。
mkdir -p /opt/docker/mysql/{master1,master2}/{data,config,log}
3. 部署MySQL容器
你可以选择使用 docker run命令或 Docker Compose来部署容器。下面是两种方式的具体配置。
使用 Docker Run 命令分别运行两个mySQL容器:
启动 Master1 容器:
docker run -p 3316:3306 \
--name mysql_master1 \
--privileged=true \
-v /opt/docker/mysql/masert1/data:/var/lib/mysql \
-v /opt/docker/mysql/masert1/conf:/etc/mysql/conf.d \
-v /opt/docker/mysql/masert1/log:/var/log \
-e MYSQL_ROOT_PASSWORD=abc123456 \
-d mysql:8.0.32 \
--server-id=101 \
--log-bin=mysql-bin \
--gtid-mode=ON \
--enforce-gtid-consistency=ON \
--lower_case_table_names=1
启动 Master2 容器:
docker run -p 3326:3306 \
--name mysql_master2 \
--privileged=true \
-v /opt/docker/mysql/masert2/data:/var/lib/mysql \
-v /opt/docker/mysql/masert2/conf:/etc/mysql/conf.d \
-v /opt/docker/mysql/masert2/log:/var/log \
-e MYSQL_ROOT_PASSWORD=abc123456 \
-d mysql:8.0.32 \
--server-id=102 \
--log-bin=mysql-bin \
--gtid-mode=ON \
--enforce-gtid-consistency=ON \
--lower_case_table_names=1
4. 配置双主复制
容器运行后,需要进入MySQL内部配置复制账户和主从关系。
在两个主节点上创建复制账户:分别进入 mysql-master1和 mysql-master2容器,创建用于复制的用户。
进入mysql-master1容器
docker exec -it mysql_master1 mysql -uroot -p
输入密码后执行SQL
CREATE USER 'repl'@'%' IDENTIFIED WITH mysql_native_password BY 'abc123456';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
FLUSH PRIVILEGES;
在 mysql-master2上执行同样的操作。
- 查看主节点状态并记录位置信息:
在每个主节点上执行以下命令,并记下 File和 Position的值(非常重要!)。
SHOW MASTER STATUS;
- 配置主从关系:
在 mysql-master2上配置,将其指向 mysql-master1(使用第一步中在master1上查到的File和Position值):
CHANGE MASTER TO
MASTER_HOST='192.168.0.2',
MASTER_USER='repl',
MASTER_PORT='3316'
MASTER_PASSWORD='abc123456',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=157;
START SLAVE;
- 在 mysql-master1上配置,将其指向mysql-master2(使用第一步中在master2上查到的File和Position值):
CHANGE MASTER TO
MASTER_HOST='192.168.0.2',
MASTER_USER='repl',
MASTER_PORT='3326'
MASTER_PASSWORD='abc123456',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=157;
START SLAVE;
5. 验证复制状态
- 在双主节点上分别执行以下命令,检查复制状态:
SHOW SLAVE STATUS\G
- 关键检查点是在输出结果中,确保以下两个字段的值均为 Yes:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
如果都是 Yes,表示复制链路正常。
进行数据同步测试:
- 在一个主节点(例如 mysql-master1)上创建表或插入数据:
CREATE TABLE test_table (id INT PRIMARY KEY, data VARCHAR(100));
INSERT INTO test_table VALUES (1, 'Hello from Master1');
- 然后在另一个主节点(mysql-master2)上查询:
SELECT * FROM test_table;
更多推荐



所有评论(0)