本文将详细介绍如何利用 Docker 容器化技术以及 Docker Compose 工具,快速部署一个高效、稳定的 单节点 MariaDB 数据库实例
实战服务器配置 (架构 1:1 复刻小规模生产环境,配置略有不同)
主机名 | IP | CPU(核) | 内存(GB) | 系统盘(GB) | 数据盘(GB) | 用途 |
---|---|---|---|---|---|---|
docker-node-1 | 192.168.9.81 | 4 | 16 | 40 | 100 | Docker 节点 1 |
docker-node-2 | 192.168.9.82 | 4 | 16 | 40 | 100 | Docker 节点 2 |
docker-node-3 | 192.168.9.83 | 4 | 16 | 40 | 100 | Docker 节点 3 |
合计 | 3 | 12 | 48 | 120 | 300 |
实战环境涉及软件版本信息
- 操作系统:openEuler 22.03 LTS SP3
- Docker:24.0.7
- MariaDB:10.11.8
1. 前提条件
主流的 MariaDB 有 10.x.x 和 11.x.x 两个版本,10 和 11 两个大版本又分了许多小版本。本文选择了 10 系列的最新版 10.11.8 ,实际使用中请根据项目需求选择具体的版本。
目前主流的 mariadb 容器化部署方案可用的镜像有以下几种:
- mariadb (DockerHub 官方出品,MariaDB Foundation 维护,下载量 1B+)
- bitnami/mariadb (Bitnami 出品,下载量 500M+)
本人选择使用 Docker 镜像的策略是:
- 优先使用 DockerHub官方
- 其次选择软件供应商官方镜像
- 自己构建镜像
因此,本文选择下载量最大、DockerHub 官方出品的镜像,构建单节点 MariaDB 服务。
2. 部署单节点 MariaDB
2.1 创建数据目录
cd /data/containers
mkdir -p mariadb/{data,config,logs}
- data: 存储容器持久化数据
- config: 配置文件目录
- logs: 服务日志目录(可选)
2.2 创建 MariaDB 自定义配置文件
MariaDB 默认使用的 my.cnf 配置文件,适配的使用场景有限,生产或开发环境需要根据需求自定义 MariaDB 配置文件。
本文随机找了一份配置文件,仅仅是为了实现自定义配置的功能,请根据自己的使用场景自定义配置文件。
创建自定义 MariaDB 配置文件,vi mariadb/config/mysqld.cnf
[mysqld]
# performance settings
lock_wait_timeout = 3600
open_files_limit = 65535
back_log = 1024
max_connections = 1024
max_connect_errors = 1000000
table_open_cache = 1024
table_definition_cache = 1024
thread_stack = 512K
sort_buffer_size = 4M
join_buffer_size = 4M
read_buffer_size = 8M
read_rnd_buffer_size = 4M
bulk_insert_buffer_size = 64M
thread_cache_size = 768
interactive_timeout = 600
wait_timeout = 600
tmp_table_size = 32M
max_heap_table_size = 32M
innodb_open_files = 1024
# TLS 配置
tls_version = TLSv1.2
2.3 创建 Docker Compose 配置文件
创建并编辑 Docker Compose 配置文件,vi mariadb/docker-compose.yml
,加入以下内容。services:
mariadb:
container_name: mariadb
hostname: mariadb
image: mariadb:10.11.8
restart: always
ulimits:
nofile:
soft: 65536
hard: 65536
environment:
- TZ=Asia/Shanghai
- MYSQL_ROOT_PASSWORD=OpsXlab!2024
volumes:
- ./data:/var/lib/mysql
- ./config:/etc/mysql/conf.d/
networks:
- app-tier
ports:
- 3306:3306
networks:
app-tier:
name: app-tier
driver: bridge
#external: true
参数说明:
- MYSQL_ROOT_PASSWORDD: 默认管理员 root 用户密码
- volumes 将自定义的 MariaDB 配置文件挂载到容器中的 /etc/mysql/conf.d/ 目录下
- ulimits 设置最大的文件打开数,用于提高 MariaDB 服务的性能
2.4 创建并启动服务
- 启动服务
cd /data/containers/mariadb
docker compose up -d
2.5 验证容器状态
- 查看容器状态
$ docker compose ps
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
mariadb mariadb:10.11.8 "docker-entrypoint.s…" mariadb 7 seconds ago Up 6 seconds 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp
- 查看容器日志
# 通过日志查看容器是否有异常,结果略
docker compose logs -f
3. MariaDB 服务可用性测试
为了测试 MariaDB 服务的可用性,利用 Docker 创建一个 MariaDB 客户端容器实例,并执行几个简单的查询命令。
- 创建 MariaDB 客户端实例
docker run -it --rm --network app-tier mariadb:10.11.8 mariadb -h 192.168.9.81 -uroot -p
说明: 该命令会连接指定的数据库并提供一个标准的 MariaDB 提示符,可以执行相关 SQL 命令。
- 查看版本和连接信息
MariaDB [(none)]> \s
--------------
mariadb Ver 15.1 Distrib 10.11.8-MariaDB, for debian-linux-gnu (x86_64) using EditLine wrapper
Connection id: 3
Current database:
Current user: root@172.20.0.1
SSL: Not in use
Current pager: stdout
Using outfile: ''
Using delimiter: ;
Server: MariaDB
Server version: 10.11.8-MariaDB-ubu2204 mariadb.org binary distribution
Protocol version: 10
Connection: 192.168.9.81 via TCP/IP
Server characterset: utf8mb4
Db characterset: utf8mb4
Client characterset: utf8mb3
Conn. characterset: utf8mb3
TCP port: 3306
Uptime: 2 min 47 sec
Threads: 1 Questions: 4 Slow queries: 0 Opens: 17 Open tables: 10 Queries per second avg: 0.023
--------------
- 验证自定义配置是否生效
MariaDB [(none)]> show variables like '%max_conn%';
+-----------------------+---------+
| Variable_name | Value |
+-----------------------+---------+
| extra_max_connections | 1 |
| max_connect_errors | 1000000 |
| max_connections | 1024 |
+-----------------------+---------+
3 rows in set (0.001 sec)