前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Docker 最佳实战:Docker 部署单节点 MariaDB 实战指南

Docker 最佳实战:Docker 部署单节点 MariaDB 实战指南

作者头像
运维有术
发布2024-07-16 15:26:25
1450
发布2024-07-16 15:26:25
举报
文章被收录于专栏:运维有术

你好,欢迎来到运维有术

今天分享的内容是 Docker 最佳实战「2024」 系列文档中的 Docker 部署单节点 MariaDB 实战指南

本文将详细介绍如何利用 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 创建数据目录

代码语言:javascript
复制
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

代码语言:javascript
复制
[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 ,加入以下内容。

代码语言:javascript
复制
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 创建并启动服务

  • 启动服务
代码语言:javascript
复制
cd /data/containers/mariadb
docker compose up -d

2.5 验证容器状态

  • 查看容器状态
代码语言:javascript
复制
$ 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
  • 查看容器日志
代码语言:javascript
复制
# 通过日志查看容器是否有异常,结果略
docker compose logs -f

3. MariaDB 服务可用性测试

为了测试 MariaDB 服务的可用性,利用 Docker 创建一个 MariaDB 客户端容器实例,并执行几个简单的查询命令。

  • 创建 MariaDB 客户端实例
代码语言:javascript
复制
docker run -it --rm --network app-tier mariadb:10.11.8 mariadb -h 192.168.9.81 -uroot -p

说明: 该命令会连接指定的数据库并提供一个标准的 MariaDB 提示符,可以执行相关 SQL 命令。

  • 查看版本和连接信息
代码语言:javascript
复制
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
--------------
  • 验证自定义配置是否生效
代码语言:javascript
复制
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)

4. 自动化 Shell 脚本

文章中所有操作步骤,已全部编排为自动化脚本,包含以下内容(因篇幅限制,不在此文档中展示):

  • Shell 脚本部署单节点 MariaDB
  • Ansible 容器化部署单节点 MariaDB

运维有术星球会员请到专属代码仓库下载(价值内容,仅星球会员专享)。

以上,就是我今天分享的全部内容。下一期分享的内容还没想好,敬请期待开盲盒

如果你喜欢本文,请分享、收藏、点赞、评论! 请持续关注 @运维有术,及时收看更多好文!

欢迎加入 「知识星球|运维有术」 ,获取更多的 KubeSphere、Kubernetes、云原生运维、自动化运维、AI 大模型等实战技能。未来运维生涯始终有我坐在你的副驾

免责声明:

  • 笔者水平有限,尽管经过多次验证和检查,尽力确保内容的准确性,但仍可能存在疏漏之处。敬请业界专家大佬不吝指教。
  • 本文所述内容仅通过实战环境验证测试,读者可学习、借鉴,但严禁直接用于生产环境由此引发的任何问题,作者概不负责

Get 本文实战视频(请注意,文档视频异步发行,请先关注)

  • B 站|运维有术

版权声明

  • 所有内容均属于原创,感谢阅读、收藏,转载请联系授权,未经授权不得转载
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-07-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 运维有术 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 前提条件
  • 2. 部署单节点 MariaDB
    • 2.1 创建数据目录
      • 2.2 创建 MariaDB 自定义配置文件
        • 2.3 创建 Docker Compose 配置文件
          • 2.4 创建并启动服务
            • 2.5 验证容器状态
            • 3. MariaDB 服务可用性测试
            • 4. 自动化 Shell 脚本
            相关产品与服务
            容器服务
            腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档