生产环境下的终极指南:在生产环境部署 Nacos 集群和高可用 MySQL 使用 Docker

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 生产环境下的终极指南:在生产环境部署 Nacos 集群和高可用 MySQL 使用 Docker

🌷🍁 博主猫头虎 带您 Go to New World.✨🍁

🦄 博客首页——猫头虎的博客🎐

🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺

🌊 《IDEA开发秘籍专栏》学会IDEA常用操作,工作效率翻倍~💐

🌊 《100天精通Golang(基础入门篇)》学会Golang语言,畅玩云原生,走遍大小厂~💐

🪁🍁 希望本文能够给您带来一定的帮助🌸文章粗浅,敬请批评指正!🍁🐥





在生产环境部署 Nacos 集群和高可用 MySQL 使用 Docker 🐳

前言

在本教程中,我们将详细介绍如何使用 Docker 和 docker-compose 在生产环境中部署 Nacos 集群和高可用 MySQL。

摘要

本教程详细指导了如何在生产环境中使用 Docker 和 docker-compose 部署 Nacos 集群和高可用 MySQL。覆盖了网络创建、安全性、服务启动、监控、日志和备份等关键步骤,确保系统的稳定性和可用性。

引言

随着微服务架构的普及,服务注册与发现成为了现代应用不可或缺的一部分。Nacos,作为一个动态服务发现、配置和服务管理平台,为开发者提供了一种简单的方式来实现这些功能。然而,如何在生产环境中稳定、安全地部署 Nacos 集群和其相关的数据库是一个需要深入考虑的问题。本教程旨在为你提供一个明确、全面的解决方案。

导语

部署微服务的关键组件,如 Nacos,往往涉及到多个层面的挑战,从网络配置、容器编排到数据的安全性和持久化都需要仔细考虑。但是,有了正确的指南和最佳实践,这一切都可以变得简单。接下来,我们将一步一步指导你完成这一过程,确保你的 Nacos 集群和高可用 MySQL 数据库能够稳定、高效地运行。 🚀

准备工作

  1. 一台或多台服务器,已安装 Docker 和 Docker Compose 🖥️.
  2. 三个 Nacos 实例的配置文件 cluster.conf 📁.

在生产环境部署 Nacos 集群和高可用 MySQL,你需要考虑以下因素:

  1. 持久化存储:确保数据不会因为容器的停止或失败而丢失 💾.
  2. 网络安全:确保通信是安全的,防止未经授权的访问 🔐.
  3. 监控与日志:持续监控服务状态并记录日志以方便排错 📊.
  4. 高可用性:确保服务即使出现故障也可以继续运行 🔄.
  5. 备份与恢复:定期备份数据,以防不时之需 🔄.

步骤

1. 创建 Docker 网络

我们首先创建一个 Docker 网络,以确保 Nacos 和 MySQL 之间的通信:

docker network create nacos-net

2. 配置高可用 MySQL

为了确保 MySQL 的高可用性,我们将使用 MySQL Group Replication。首先,我们需要创建一些配置文件和初始化脚本来设置 MySQL Group Replication。

2.1 创建配置文件

在你的工作目录中创建一个名为 mysql-conf 的文件夹,并在该文件夹中创建三个配置文件,分别为 my.cnf.1my.cnf.2my.cnf.3。这些文件将为每个 MySQL 实例提供必要的配置。

# 文件: my.cnf.1
[mysqld]
server-id=1
auto-increment-increment=3
auto-increment-offset=1
# 文件: my.cnf.2
[mysqld]
server-id=2
auto-increment-increment=3
auto-increment-offset=2
# 文件: my.cnf.3
[mysqld]
server-id=3
auto-increment-increment=3
auto-increment-offset=3
2.2 创建初始化脚本

创建一个名为 init.sql 的文件来初始化 Group Replication。

SET @@GLOBAL.group_replication_bootstrap_group=1;
CREATE USER 'repl'@'%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
CHANGE MASTER TO MASTER_USER='repl', MASTER_PASSWORD='password' FOR CHANNEL 'group_replication_recovery';
INSTALL PLUGIN group_replication SONAME 'group_replication.so';
START GROUP_REPLICATION;
SET @@GLOBAL.group_replication_bootstrap_group=0;

3. docker-compose 文件

docker-compose.yml 文件

version: '3.7'
services:
  mysql1:
    image: mysql:5.7
    container_name: mysql1
    environment:
      MYSQL_ROOT_PASSWORD: my-secret-pw
    command: --defaults-file=/etc/mysql/my.cnf --server-id=1 --log-bin='mysql-bin-1.log'
    volumes:
      - ./mysql-conf/my.cnf.1:/etc/mysql/my.cnf
      - mysql-data1:/var/lib/mysql
      - ./init.sql:/docker-entrypoint-initdb.d/init.sql
    networks:
      - nacos-net
  mysql2:
    image: mysql:5.7
    container_name: mysql2
    environment:
      MYSQL_ROOT_PASSWORD: my-secret-pw
    command: --defaults-file=/etc/mysql/my.cnf --server-id=2 --log-bin='mysql-bin-2.log'
    volumes:
      - ./mysql-conf/my.cnf.2:/etc/mysql/my.cnf
      - mysql-data2:/var/lib/mysql
    networks:
      - nacos-net
  mysql3:
    image: mysql:5.7
    container_name: mysql3
    environment:
      MYSQL_ROOT_PASSWORD: my-secret-pw
    command: --defaults-file=/etc/mysql/my.cnf --server-id=3 --log-bin='mysql-bin-3.log'
    volumes:
      - ./mysql-conf/my.cnf.3:/etc/mysql/my.cnf
      - mysql-data3:/var/lib/mysql
    networks:
      - nacos-net
  nacos1:
    image: nacos/nacos-server
    container_name: nacos-server1
    environment:
      MODE: cluster
      SPRING_DATASOURCE_PLATFORM: mysql
      MYSQL_SERVICE_HOST: mysql-proxy
      MYSQL_SERVICE_DB_NAME: nacos
      MYSQL_SERVICE_PORT: 3306
      MYSQL_SERVICE_USER: root
      MYSQL_SERVICE_PASSWORD: my-secret-pw
    volumes:
      - /path/to/cluster.conf:/home/nacos/conf/cluster.conf
      - nacos-logs1:/home/nacos/logs
    networks:
      - nacos-net
    ports:
      - "8848:8848"
    depends_on:
      - mysql1
      - mysql2
      - mysql3
  nacos2:
    image: nacos/nacos-server
    container_name: nacos-server2
    environment:
      MODE: cluster
      SPRING_DATASOURCE_PLATFORM: mysql
      MYSQL_SERVICE_HOST: mysql-proxy
      MYSQL_SERVICE_DB_NAME: nacos
      MYSQL_SERVICE_PORT: 3306
      MYSQL_SERVICE_USER: root
      MYSQL_SERVICE_PASSWORD: my-secret-pw
    volumes:
      - /path/to/cluster.conf:/home/nacos/conf/cluster.conf
      - nacos-logs2:/home/nacos/logs
    networks:
      - nacos-net
    ports:
      - "8849:8848"
    depends_on:
      - mysql1
      - mysql2
      - mysql3
  nacos3:
    image: nacos/nacos-server
    container_name: nacos-server3
    environment:
      MODE: cluster
      SPRING_DATASOURCE_PLATFORM: mysql
      MYSQL_SERVICE_HOST: mysql-proxy
      MYSQL_SERVICE_DB_NAME: nacos
      MYSQL_SERVICE_PORT: 3306
      MYSQL_SERVICE_USER: root
      MYSQL_SERVICE_PASSWORD: my-secret-pw
    volumes:
      - /path/to/cluster.conf:/home/nacos/conf/cluster.conf
      - nacos-logs3:/home/nacos/logs
    networks:
      - nacos-net
    ports:
      - "8850:8848"
    depends_on:
      - mysql1
      - mysql2
      - mysql3
volumes:
  mysql-data1:
  mysql-data2:
  mysql-data3:
  nacos-logs1:
  nacos-logs2:
  nacos-logs3:
networks:
  nacos-net:

注意事项:

  1. 更改 /path/to/cluster.conf 为实际的路径。
  2. MySQL 密码和其他敏感数据最好不要直接写入配置文件。可以考虑使用 Docker Secrets 或环境变量来管理这些信息。
  3. 这个配置中,三个 Nacos 服务分别映射到主机的 8848、8849 和 8850 端口。在实际生产环境中,你可能需要其他的端口配置或者使用负载均衡器分发流量。
  4. restart: always 确保容器在失败或主机重启后自动重启。
  5. 这里只使用了单一 MySQL 实例。在生产环境中,考虑使用 MySQL 高可用集群或主从复制来增加数据的稳定性和可用性。
  6. 根据具体需求和资源,可以考虑调整容器的内存和 CPU 限制。

在上述 docker-compose.yml 文件目录下运行 docker-compose up -d 来启动服务。

3. 安全考量

  1. 安全性
  • 使用防火墙或安全组规则,仅允许从特定 IP 或 IP 范围访问 Nacos 和 MySQL。
  • 使用 Docker Secrets 或其他秘密管理工具来安全地处理敏感信息,如数据库密码。
  1. 监控和日志
  • 集成例如 Prometheus 和 Grafana 来监控服务的状态。
  • 使用 ELK Stack (Elasticsearch, Logstash, Kibana) 或其他日志管理工具来集中、查询和分析日志。
  1. 备份和恢复
  • 对 MySQL 数据库进行定期备份,可以使用像 mysqldump 这样的工具,或使用 Docker 卷的备份方法。
  • 考虑使用备份工具如 restic 或其他备份方案。
  1. 高可用性
  • 使用类似 Kubernetes 这样的容器编排工具,确保当某个实例失败时可以自动重启。
  • 在不同的物理服务器或区域上部署 Nacos 节点,以减少由于单点故障导致的整个服务中断的风险。
  1. 启动服务
    在包含 docker-compose.yml 文件的目录中运行以下命令:
docker-compose up -d

注意:确保你更改了 /path/to/cluster.conf 为实际的路径。

生产环境中的数据是非常宝贵的,因此确保所有通信都是安全的非常重要。

  • 使用防火墙或安全组规则,仅允许从特定 IP 或 IP 范围访问 Nacos 和 MySQL。
  • 将 MySQL 和其他敏感数据的密码从配置文件中移出,使用 Docker Secrets 或环境变量来管理。

4. 启动服务

在包含 docker-compose.yml 文件的目录中,运行以下命令启动服务:

docker-compose up -d

5. 监控和日志

为了确保服务运行正常,你需要一套强大的监控和日志系统:

  • 可以集成 Prometheus 和 Grafana 来监控服务状态。
  • 使用 ELK Stack (Elasticsearch, Logstash, Kibana) 或其他日志管理工具,来集中、查询和分析日志。

6. 备份策略

定期备份是非常重要的,确保你对 MySQL 数据库进行定期备份,并考虑使用备份工具如 restic 或其他备份方案。

总结

通过使用 MySQL Group Replication 和 Docker,我们能够为 Nacos 集群提供一个高可用的 MySQL 数据库。这样,即使一个或两个 MySQL 节点失败,Nacos 集群仍能继续运行。确保在部署之前进行了充分的测试,以确保系统的稳定性和可用性。希望本教程能帮助你快速、安全地部署你的服务!


这样,我们就为 MySQL 配置了高可用解决方案,并相应地更新了 Nacos 的配置。在实际操作中,可能还需要根据实际情况和需求做进一步的调整和优化。

原创声明

======= ·

  • 原创作者: 猫头虎

作者wx: [ libin9iOak ]

  • 今日已学习

本文为原创文章,版权归作者所有。未经许可,禁止转载、复制或引用。

作者保证信息真实可靠,但不对准确性和完整性承担责任

未经许可,禁止商业用途。

如有疑问或建议,请联系作者。

感谢您的支持与尊重。

点击下方名片,加入IT技术核心学习团队。一起探索科技的未来,共同成长。


相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
9天前
|
SQL Java 关系型数据库
MySQL原理简介—3.生产环境的部署压测
本文介绍了Java系统和数据库在高并发场景下的压测要点: 1. 普通系统在4核8G机器上每秒能处理几百个请求 2. 高并发下数据库建议使用8核16G或更高配置的机器 3. 数据库部署后需进行基准压测,以评估其最大承载能力 4. QPS和TPS的区别及重要性 5. 压测时需关注IOPS、吞吐量、延迟 6. 除了QPS和TPS,还需监控CPU、内存、磁盘IO、网络带宽 7. 影响每秒可处理并发请求数的因素包括线程数、CPU、内存、磁盘IO和网络带宽 8. Sysbench是数据库压测工具,可构造测试数据并模拟高并发场景 9. 在增加线程数量的同时,必须观察机器的性能,确保各硬件负载在合理范围
113 72
|
19天前
|
存储 关系型数据库 MySQL
美团面试:MySQL为什么 不用 Docker部署?
45岁老架构师尼恩在读者交流群中分享了关于“MySQL为什么不推荐使用Docker部署”的深入分析。通过系统化的梳理,尼恩帮助读者理解为何大型MySQL数据库通常不使用Docker部署,主要涉及性能、管理复杂度和稳定性等方面的考量。文章详细解释了有状态容器的特点、Docker的资源隔离问题以及磁盘IO性能损耗,并提供了小型MySQL使用Docker的最佳实践。此外,尼恩还介绍了Share Nothing架构的优势及其应用场景,强调了配置管理和数据持久化的挑战。最后,尼恩建议读者参考《尼恩Java面试宝典PDF》以提升技术能力,更好地应对面试中的难题。
|
1月前
|
SQL 关系型数据库 MySQL
docker-compose部署mysql8
使用docker-compose容器化部署mysql8
|
2月前
|
NoSQL Java 关系型数据库
Liunx部署java项目Tomcat、Redis、Mysql教程
本文详细介绍了如何在 Linux 服务器上安装和配置 Tomcat、MySQL 和 Redis,并部署 Java 项目。通过这些步骤,您可以搭建一个高效稳定的 Java 应用运行环境。希望本文能为您在实际操作中提供有价值的参考。
181 26
|
2月前
|
存储 网络协议 Nacos
高效搭建Nacos:实现微服务的服务注册与配置中心
Nacos(Dynamic Naming and Configuration Service)是阿里巴巴开源的一款动态服务发现、配置管理和服务管理平台。它旨在帮助开发者更轻松地构建、部署和管理分布式系统,特别是在微服务架构中。
446 81
高效搭建Nacos:实现微服务的服务注册与配置中心
|
2月前
|
JSON Java Nacos
SpringCloud 应用 Nacos 配置中心注解
在 Spring Cloud 应用中可以非常低成本地集成 Nacos 实现配置动态刷新,在应用程序代码中通过 Spring 官方的注解 @Value 和 @ConfigurationProperties,引用 Spring enviroment 上下文中的属性值,这种用法的最大优点是无代码层面侵入性,但也存在诸多限制,为了解决问题,提升应用接入 Nacos 配置中心的易用性,Spring Cloud Alibaba 发布一套全新的 Nacos 配置中心的注解。
302 16
|
3月前
|
监控 Java 测试技术
Nacos 配置中心变更利器:自定义标签灰度
本文是对 MSE Nacos 应用自定义标签灰度的功能介绍,欢迎大家升级版本进行试用。
475 18
|
3月前
|
负载均衡 应用服务中间件 Nacos
Nacos配置中心
Nacos配置中心
202 1
Nacos配置中心
|
3月前
|
Java 网络安全 Nacos
Nacos作为流行的微服务注册与配置中心,其稳定性与易用性广受好评
Nacos作为流行的微服务注册与配置中心,其稳定性与易用性广受好评。然而,“客户端不发送心跳检测”是使用中常见的问题之一。本文详细探讨了该问题的原因及解决方法,包括检查客户端配置、网络连接、日志、版本兼容性、心跳检测策略、服务实例注册状态、重启应用及环境变量等步骤,旨在帮助开发者快速定位并解决问题,确保服务正常运行。
69 5
|
3月前
|
网络安全 Nacos 开发者
Nacos作为流行的微服务注册与配置中心,“节点提示暂时不可用”是常见的问题之一
Nacos作为流行的微服务注册与配置中心,其稳定性和易用性备受青睐。然而,“节点提示暂时不可用”是常见的问题之一。本文将探讨该问题的原因及解决方案,帮助开发者快速定位并解决问题,确保服务的正常运行。通过检查服务实例状态、网络连接、Nacos配置、调整健康检查策略等步骤,可以有效解决这一问题。
54 4