docker搭建mysql集群(docker mycat 集群)

# 简介随着分布式架构的普及,数据库的高可用性和扩展性变得尤为重要。MySQL 是目前使用最广泛的开源关系型数据库之一,而 Docker 的出现极大简化了应用的部署和管理。本文将详细介绍如何利用 Docker 搭建 MySQL 集群,包括主从复制、多主同步等常见场景,并提供详细的步骤和配置说明。---## 目录 1. [准备工作](#准备) 2. [搭建主从复制集群](#主从复制) 3. [搭建多主同步集群](#多主同步) 4. [集群管理与监控](#集群管理) 5. [总结](#总结)---## 准备工作在开始之前,请确保您的环境已安装以下工具:- Docker:用于容器化运行 MySQL。 - Docker Compose:用于简化多容器的编排。 - MySQL 客户端工具(如 `mysql` 命令行工具):用于测试集群功能。### 安装 Docker 和 Docker Compose```bash # 安装 Docker sudo apt update sudo apt install docker.io# 安装 Docker Compose sudo curl -L "https://github.com/docker/compose/releases/download/v2.17.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose ```---## 搭建主从复制集群主从复制是 MySQL 集群中最常见的架构,主节点负责写操作,从节点负责读操作,从而实现负载均衡和数据冗余。### 步骤 1: 创建 Docker Compose 文件创建一个 `docker-compose.yml` 文件,定义两个 MySQL 实例。```yaml version: '3.8'services:master:image: mysql:8.0container_name: mysql_masterenvironment:MYSQL_ROOT_PASSWORD: root_passwordvolumes:- ./data/master:/var/lib/mysqlports:- "3306:3306"command: --default-authentication-plugin=mysql_native_passwordslave:image: mysql:8.0container_name: mysql_slaveenvironment:MYSQL_ROOT_PASSWORD: root_passwordvolumes:- ./data/slave:/var/lib/mysqldepends_on:- mastercommand: --default-authentication-plugin=mysql_native_password ```### 步骤 2: 初始化主节点进入主节点容器并初始化数据库:```bash docker exec -it mysql_master bash mysql -u root -pCREATE DATABASE testdb; GRANT REPLICATION SLAVE ON

.

TO 'replica_user'@'%' IDENTIFIED BY 'replica_password'; FLUSH PRIVILEGES; ```### 步骤 3: 初始化从节点在从节点中设置主节点信息:```bash docker exec -it mysql_slave bash mysql -u root -pCHANGE MASTER TOMASTER_HOST='master',MASTER_USER='replica_user',MASTER_PASSWORD='replica_password',MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=0;START SLAVE; ```### 测试主从复制在主节点中插入一条记录,检查从节点是否同步:```sql USE testdb; INSERT INTO users (name) VALUES ('Alice'); ```---## 搭建多主同步集群多主同步允许多个节点同时处理写操作,适合高并发场景。### 步骤 1: 修改 Docker Compose 文件为每个节点添加唯一的 `server_id` 并启用 GTID(全局事务 ID)。```yaml version: '3.8'services:node1:image: mysql:8.0container_name: mysql_node1environment:MYSQL_ROOT_PASSWORD: root_passwordMYSQL_ALLOW_EMPTY_PASSWORD: "yes"MYSQL_DATABASE: testdbMYSQL_MASTER_HOST: node2MYSQL_MASTER_PORT: 3306MYSQL_MASTER_USER: adminMYSQL_MASTER_PASSWORD: passwordvolumes:- ./data/node1:/var/lib/mysqlports:- "3307:3306"node2:image: mysql:8.0container_name: mysql_node2environment:MYSQL_ROOT_PASSWORD: root_passwordMYSQL_ALLOW_EMPTY_PASSWORD: "yes"MYSQL_DATABASE: testdbMYSQL_MASTER_HOST: node1MYSQL_MASTER_PORT: 3306MYSQL_MASTER_USER: adminMYSQL_MASTER_PASSWORD: passwordvolumes:- ./data/node2:/var/lib/mysqlports:- "3308:3306" ```### 步骤 2: 启动集群```bash docker-compose up -d ```### 步骤 3: 配置多主同步在每个节点中启用 GTID 并设置互为主从关系。```sql SET GLOBAL gtid_enable = ON; SET GLOBAL enforce_gtid_consistency = ON; ```---## 集群管理与监控为了更好地管理和监控集群,可以使用以下工具:-

Prometheus & Grafana

:监控 MySQL 性能指标。 -

MaxScale

:提供负载均衡和故障转移功能。 -

HeidiSQL

:图形化管理工具。### 示例:使用 Prometheus 监控```bash docker run -d --name prometheus \-p 9090:9090 \prom/prometheus ```---## 总结通过 Docker 搭建 MySQL 集群可以显著降低部署复杂度,无论是主从复制还是多主同步,都能满足不同的业务需求。希望本文提供的步骤和示例对您有所帮助!

简介随着分布式架构的普及,数据库的高可用性和扩展性变得尤为重要。MySQL 是目前使用最广泛的开源关系型数据库之一,而 Docker 的出现极大简化了应用的部署和管理。本文将详细介绍如何利用 Docker 搭建 MySQL 集群,包括主从复制、多主同步等常见场景,并提供详细的步骤和配置说明。---

目录 1. [准备工作](

准备) 2. [搭建主从复制集群](

主从复制) 3. [搭建多主同步集群](

多主同步) 4. [集群管理与监控](

集群管理) 5. [总结](

总结)---

准备工作在开始之前,请确保您的环境已安装以下工具:- Docker:用于容器化运行 MySQL。 - Docker Compose:用于简化多容器的编排。 - MySQL 客户端工具(如 `mysql` 命令行工具):用于测试集群功能。

安装 Docker 和 Docker Compose```bash

安装 Docker sudo apt update sudo apt install docker.io

安装 Docker Compose sudo curl -L "https://github.com/docker/compose/releases/download/v2.17.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose ```---

搭建主从复制集群主从复制是 MySQL 集群中最常见的架构,主节点负责写操作,从节点负责读操作,从而实现负载均衡和数据冗余。

步骤 1: 创建 Docker Compose 文件创建一个 `docker-compose.yml` 文件,定义两个 MySQL 实例。```yaml version: '3.8'services:master:image: mysql:8.0container_name: mysql_masterenvironment:MYSQL_ROOT_PASSWORD: root_passwordvolumes:- ./data/master:/var/lib/mysqlports:- "3306:3306"command: --default-authentication-plugin=mysql_native_passwordslave:image: mysql:8.0container_name: mysql_slaveenvironment:MYSQL_ROOT_PASSWORD: root_passwordvolumes:- ./data/slave:/var/lib/mysqldepends_on:- mastercommand: --default-authentication-plugin=mysql_native_password ```

步骤 2: 初始化主节点进入主节点容器并初始化数据库:```bash docker exec -it mysql_master bash mysql -u root -pCREATE DATABASE testdb; GRANT REPLICATION SLAVE ON *.* TO 'replica_user'@'%' IDENTIFIED BY 'replica_password'; FLUSH PRIVILEGES; ```

步骤 3: 初始化从节点在从节点中设置主节点信息:```bash docker exec -it mysql_slave bash mysql -u root -pCHANGE MASTER TOMASTER_HOST='master',MASTER_USER='replica_user',MASTER_PASSWORD='replica_password',MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=0;START SLAVE; ```

测试主从复制在主节点中插入一条记录,检查从节点是否同步:```sql USE testdb; INSERT INTO users (name) VALUES ('Alice'); ```---

搭建多主同步集群多主同步允许多个节点同时处理写操作,适合高并发场景。

步骤 1: 修改 Docker Compose 文件为每个节点添加唯一的 `server_id` 并启用 GTID(全局事务 ID)。```yaml version: '3.8'services:node1:image: mysql:8.0container_name: mysql_node1environment:MYSQL_ROOT_PASSWORD: root_passwordMYSQL_ALLOW_EMPTY_PASSWORD: "yes"MYSQL_DATABASE: testdbMYSQL_MASTER_HOST: node2MYSQL_MASTER_PORT: 3306MYSQL_MASTER_USER: adminMYSQL_MASTER_PASSWORD: passwordvolumes:- ./data/node1:/var/lib/mysqlports:- "3307:3306"node2:image: mysql:8.0container_name: mysql_node2environment:MYSQL_ROOT_PASSWORD: root_passwordMYSQL_ALLOW_EMPTY_PASSWORD: "yes"MYSQL_DATABASE: testdbMYSQL_MASTER_HOST: node1MYSQL_MASTER_PORT: 3306MYSQL_MASTER_USER: adminMYSQL_MASTER_PASSWORD: passwordvolumes:- ./data/node2:/var/lib/mysqlports:- "3308:3306" ```

步骤 2: 启动集群```bash docker-compose up -d ```

步骤 3: 配置多主同步在每个节点中启用 GTID 并设置互为主从关系。```sql SET GLOBAL gtid_enable = ON; SET GLOBAL enforce_gtid_consistency = ON; ```---

集群管理与监控为了更好地管理和监控集群,可以使用以下工具:- **Prometheus & Grafana**:监控 MySQL 性能指标。 - **MaxScale**:提供负载均衡和故障转移功能。 - **HeidiSQL**:图形化管理工具。

示例:使用 Prometheus 监控```bash docker run -d --name prometheus \-p 9090:9090 \prom/prometheus ```---

总结通过 Docker 搭建 MySQL 集群可以显著降低部署复杂度,无论是主从复制还是多主同步,都能满足不同的业务需求。希望本文提供的步骤和示例对您有所帮助!

Powered By Z-BlogPHP 1.7.2

备案号:蜀ICP备2023005218号