自学内容网 自学内容网

环境搭建——Mysql、Redis、Rocket MQ部署

前言

        在搭建分布式系统时,MySQL、Redis 和 RocketMQ 是常用的基础服务。每个服务各自的功能不同,但它们在数据存储、缓存、消息队列等方面不可或缺。如果你是初学者,别担心,本文会一步步详细教你如何在服务器上通过 Docker 部署这些服务。

为什么使用 Docker?

  1. 统一部署环境
    Docker 可以在不同的操作系统上提供一致的运行环境,避免因为环境差异导致的问题。

  2. 快速部署和管理
    使用 Docker,只需配置简单的 docker-compose.yml 文件,就能快速启动或停止服务。

  3. 轻松实现数据持久化
    借助挂载功能,你可以把重要的数据保存到服务器磁盘,即使容器被销毁,数据依然安全。

开始之前的准备

在开始部署之前,我们需要完成以下准备工作:

  1. 购买服务器
    如果还没有服务器,可以选择腾讯云、阿里云等平台购买一个服务器。服务器的推荐配置:

    • 操作系统:CentOS 7(或更高版本)
    • CPU和内存:根据项目需求选择,一般 2 核 4GB 足够。
  2. 设置登录方式:密钥登录
    密钥登录比密码登录更加安全且便捷,以下是具体操作:

    • 在本地生成公钥和私钥,私钥会保存在你的电脑上。
    • 在云服务商的管理页面,上传公钥到服务器。
    • 使用工具(如 Xshell)通过私钥登录服务器。
  3. 安装 Docker 和 Docker Compose
    确保服务器上已经安装了 Docker 和 Docker Compose。它们是部署服务容器的核心工具。如果还没安装,可以参考之前的教程。

第一部分:部署前的准备工作

        在正式部署 MySQL、Redis 和 RocketMQ 之前,我们需要完成一些准备工作,以确保后续操作顺利进行。以下是详细步骤和原因说明。

1. 购买服务器

操作步骤:

  1. 打开云服务提供商(例如腾讯云、阿里云)官网。
  2. 注册或登录你的账号。
  3. 按需选择服务器配置,例如:
    • 操作系统:推荐 CentOS 7 或更高版本。
    • 配置:2 核 4GB 内存即可满足初学者的需求,存储大小视项目需求选择。
  4. 支付完成后,记录服务器的 公网 IP 地址,稍后需要用到。

为什么需要服务器?
本地电脑虽然也能运行 Docker,但外部设备无法直接访问。而服务器提供公网 IP,能让其他设备通过网络访问我们的服务。

2. 配置密钥登录(推荐)

为了安全起见,我们使用 密钥对 登录服务器,而不是传统的用户名和密码方式。

操作步骤:

  1. 在本地生成密钥对:

    • 打开命令行工具(Windows 用户可使用 Git Bash 或 PowerShell)。
    • 输入以下命令生成密钥对:
      ssh-keygen -t rsa -b 2048 -C "your_email@example.com"
      
    • 按提示选择保存路径,默认会保存在 ~/.ssh/id_rsa
    • 密钥对生成后,会得到两个文件:
      • id_rsa:这是私钥,请保存在本地,不能泄露。
      • id_rsa.pub:这是公钥,用于上传到服务器。
  2. 将公钥上传到云服务商:

    • 在云服务商管理控制台找到密钥管理安全组设置
    • id_rsa.pub 文件内容复制并上传。
    • 保存设置。
  3. 使用密钥登录服务器:

    • 打开 Xshell 或类似的远程连接工具。
    • 新建会话,输入服务器的公网 IP。
    • 登录方式选择“密钥”,导入生成的私钥 id_rsa
    • 点击连接,成功后即可进入服务器。

为什么使用密钥登录?
密钥登录比用户名密码更安全,因为即使别人知道你的用户名,也无法登录服务器,没有私钥就没法通过验证。

3. 安装 Docker 和 Docker Compose

我们使用 Docker 来运行服务容器,Docker Compose 用于批量管理多个容器。

操作步骤:

  1. 安装 Docker:

    • 运行以下命令安装 Docker:
      yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
      yum install -y docker-ce
      
    • 启动 Docker 服务并设置开机自启:
      service docker start
      chkconfig docker on
      
  2. 测试 Docker 是否安装成功:

    • 执行以下命令,查看 Docker 版本信息:
      docker version
      
    • 如果显示 Docker 的客户端和服务端信息,则说明安装成功。
  3. 安装 Docker Compose:

    • 下载 Docker Compose 二进制文件:
      curl -L "https://github.com/docker/compose/releases/download/2.12.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
      
    • 为文件赋予可执行权限:
      chmod +x /usr/local/bin/docker-compose
      
    • 测试安装是否成功:
      docker-compose --version
      
    • 如果显示版本信息,说明安装完成。

为什么需要安装 Docker 和 Docker Compose?
Docker 提供了轻量级虚拟化,用来运行独立的服务容器,而 Docker Compose 则能更方便地管理和编排多个容器。

4. 配置国内镜像加速

由于网络原因,直接使用官方镜像下载可能会很慢。我们通过配置国内镜像加速来提升速度。

操作步骤:

  1. 编辑 Docker 配置文件:
    vi /etc/docker/daemon.json
    
  2. 添加以下内容:
    {
        "registry-mirrors": ["https://mirror.ccs.tencentyun.com"],
        "live-restore": true
    }
    
  3. 重启 Docker 服务使配置生效:
    systemctl daemon-reload
    service docker restart
    
  4. 验证镜像加速是否生效:
    docker info
    
    检查输出中是否有 "Registry Mirrors" 一项,包含腾讯云的加速地址。

为什么要配置镜像加速?
国内网络环境可能导致从国外服务器下载镜像非常慢,配置国内镜像后速度会更快。

第二部分:MySQL 部署

        MySQL 是一个常用的关系型数据库管理系统,用于存储和管理项目中的核心数据。接下来,我们一步步在服务器上部署 MySQL,并确保可以通过客户端工具进行连接测试。

1. 创建挂载目录

在 Docker 中运行 MySQL 时,数据存储默认在容器内部。为了避免容器删除后数据丢失,我们需要将数据文件挂载到服务器的本地目录。

操作步骤:

  1. 登录到服务器。
  2. 创建一个用于存储 MySQL 数据的目录:
    mkdir -p /data/mysql/data
    mkdir -p /data/mysql/conf
    mkdir -p /data/mysql/logs
    
    • /data/mysql/data:存储数据库的数据文件。
    • /data/mysql/conf:存放 MySQL 的配置文件。
    • /data/mysql/logs:存储 MySQL 的日志文件。

为什么要创建这些目录?
挂载本地目录可以保证 MySQL 数据持久化,即使容器被删除,数据也不会丢失。

2. 创建 Docker Compose 配置文件

我们通过 Docker Compose 来管理 MySQL 容器。首先,我们需要编写 docker-compose.yml 文件。

操作步骤:

  1. /data/mysql 目录下创建 docker-compose.yml 文件:
    vi /data/mysql/docker-compose.yml
    
  2. 在文件中填写以下内容:
    version: '3.8'
    services:
      mysql:
        image: mysql:8.0
        container_name: mysql
        ports:
          - "3306:3306"  # 将服务器的3306端口映射到容器的3306端口
        environment:
          MYSQL_ROOT_PASSWORD: root  # 设置MySQL的root用户密码
        volumes:
          - /data/mysql/data:/var/lib/mysql  # 挂载数据目录
          - /data/mysql/conf:/etc/mysql/conf.d  # 挂载配置目录
          - /data/mysql/logs:/var/log/mysql  # 挂载日志目录
        restart: always
    
    • image:指定使用的 MySQL 镜像版本。
    • ports:将容器的端口映射到服务器。
    • environment:设置环境变量,例如数据库的 root 用户密码。
    • volumes:挂载本地目录到容器内部的路径。

为什么需要 docker-compose.yml 文件?
这个文件定义了 MySQL 容器的运行配置,便于后续通过 Docker Compose 管理和维护。

3. 启动 MySQL 容器

完成配置文件后,我们可以启动 MySQL 服务。

操作步骤:

  1. 进入 /data/mysql 目录:

    cd /data/mysql
    
  2. 使用 Docker Compose 启动 MySQL 容器:

    docker-compose up -d
    
    • -d 参数表示以后台模式运行容器。
  3. 查看运行状态:

    docker ps
    

    如果看到 mysql 容器正在运行,说明 MySQL 启动成功。

为什么需要使用 docker-compose up 命令?
这个命令根据 docker-compose.yml 文件的配置,启动 MySQL 容器并保持后台运行。

4. 配置防火墙规则

为了使本地客户端可以连接到 MySQL,需要在云服务器控制台中配置防火墙规则,允许 3306 端口访问。

操作步骤:

  1. 登录云服务商控制台,找到 安全组 设置。
  2. 添加一条规则,允许 3306 端口的 TCP 流量访问。
  3. 保存设置。

为什么要配置防火墙规则?
防火墙默认禁止外部访问服务器的端口。通过添加规则,我们允许本地电脑通过网络连接到 MySQL。

5. 测试 MySQL 连接

我们使用数据库管理工具(如 Navicat Premium)来测试连接。

操作步骤:

  1. 打开 Navicat,新建一个连接:
    • 类型:MySQL
    • 主机:服务器公网 IP
    • 端口:3306
    • 用户名:root
    • 密码:root(与 docker-compose.yml 中的配置一致)
  2. 点击“测试连接”,如果显示连接成功,说明配置无误。
  3. 连接成功后,右键连接,新建一个数据库(例如 test_db),以确保 MySQL 可以正常使用。

为什么要测试连接?
通过客户端工具测试连接,可以确认 MySQL 是否正常运行,并验证网络连接是否配置正确。

第三部分:Redis 部署

        Redis 是一个高性能的键值对存储数据库,常用作缓存、消息队列或者会话存储。我们将逐步部署 Redis 并进行连接测试。

1. 创建挂载目录

和 MySQL 一样,Redis 运行时的数据默认存储在容器内部。为了保证数据持久化,我们需要创建挂载目录。

操作步骤:

  1. 登录到服务器。
  2. 创建用于 Redis 的数据和配置目录:
    mkdir -p /data/redis/data
    mkdir -p /data/redis/conf
    
    • /data/redis/data:存储 Redis 的数据文件。
    • /data/redis/conf:存放 Redis 的配置文件。

为什么要创建挂载目录?
挂载本地目录可以避免容器删除后丢失数据,方便迁移或备份。

2. 创建 Redis 配置文件

Redis 启动时需要一个配置文件,我们手动创建并配置。

操作步骤:

  1. /data/redis/conf 目录下创建配置文件:
    vi /data/redis/conf/redis.conf
    
  2. 添加以下配置内容:
    bind 0.0.0.0       # 允许所有 IP 访问 Redis
    protected-mode no  # 关闭保护模式,允许外部访问
    port 6379          # Redis 默认端口
    dir /data/redis/data # 数据存储目录
    appendonly yes     # 启用 AOF 持久化机制
    
    • bind:设置允许访问 Redis 的 IP 地址。
    • protected-mode:关闭保护模式以便外部设备访问。
    • appendonly:开启持久化,保证数据在服务重启后不会丢失。

为什么需要 Redis 配置文件?
Redis 配置文件定义了服务的运行参数,如端口、存储路径等,确保服务运行符合需求。

3. 创建 Docker Compose 配置文件

接下来,我们编写 docker-compose.yml 文件,定义 Redis 容器的运行环境。

操作步骤:

  1. /data/redis 目录下创建 docker-compose.yml 文件:
    vi /data/redis/docker-compose.yml
    
  2. 添加以下内容:
    version: '3.8'
    services:
      redis:
        image: redis:6.2
        container_name: redis
        ports:
          - "6379:6379"  # 将 Redis 容器的6379端口映射到服务器
        volumes:
          - /data/redis/data:/data  # 挂载数据目录
          - /data/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf  # 挂载配置文件
        command: ["redis-server", "/usr/local/etc/redis/redis.conf"]
        restart: always
    
    • image:指定 Redis 的镜像版本。
    • volumes:挂载本地目录到容器内部路径。
    • command:指定 Redis 启动时加载配置文件。

为什么需要 docker-compose.yml 文件?
它定义了 Redis 容器的运行环境和挂载目录,方便管理和维护。

4. 启动 Redis 容器

完成配置后,我们启动 Redis 服务。

操作步骤:

  1. 进入 /data/redis 目录:

    cd /data/redis
    
  2. 启动 Redis 容器:

    docker-compose up -d
    
    • -d 参数让容器在后台运行。
  3. 查看 Redis 容器状态:

    docker ps
    

    如果看到 redis 容器正在运行,说明启动成功。

为什么需要 docker-compose up 命令?
它根据 docker-compose.yml 文件配置启动 Redis 容器,并使其运行在后台。

5. 配置防火墙规则

为了让外部客户端能够连接 Redis,需要开放服务器的 6379 端口。

操作步骤:

  1. 登录云服务商控制台,找到 安全组
  2. 添加一条规则,允许 6379 端口的 TCP 流量访问。
  3. 保存设置。

为什么需要配置防火墙?
默认情况下,云服务器的端口是关闭的。通过配置防火墙规则,我们允许外部设备访问 Redis。

6. 测试 Redis 连接

我们使用客户端工具(如 Another Redis Desktop Manager)测试 Redis 的连接。

操作步骤:

  1. 打开客户端工具,新建一个 Redis 连接:
    • 地址:服务器公网 IP
    • 端口:6379
    • 密码:无(默认不设置密码)
  2. 点击“测试连接”,如果显示成功,说明 Redis 已正确运行。
  3. 在客户端中,尝试执行以下命令测试读写功能:
    set test_key "Hello Redis"
    get test_key
    
    如果返回值为 "Hello Redis",说明 Redis 功能正常。

为什么要测试 Redis 连接?
通过测试连接和执行命令,可以验证 Redis 是否部署成功,并确保网络配置无误。

第五部分:总结

1. 部署完成的验证

        在完成 MySQL、Redis 和 RocketMQ 的部署后,确保每个服务都能正常运行是至关重要的。以下是验证步骤:

  • MySQL:通过 Navicat Premium 或其他数据库客户端连接到 MySQL 服务,测试能否正常建立连接并进行操作,如创建数据库、插入数据等。
  • Redis:使用 Another Redis 或直接通过命令行工具进行连接测试,确保能执行 SETGET 操作。也可以通过浏览器访问指定端口来验证服务是否正常。
  • RocketMQ:通过 RocketMQ Console 或客户端工具连接到 RocketMQ 服务,测试消息发布和消费功能是否正常,确保消息队列能够正常工作。

同时,防火墙配置要确保外部访问能够顺利连接服务:

  • 在腾讯云等云平台上,需要为 MySQL、Redis 和 RocketMQ 所需的端口设置正确的安全组规则,允许外部 IP 进行访问。

挂载目录配置的合理性也是一个关键:

  • 确保容器挂载目录的配置正确,并且具有足够的权限来确保数据的持久化。这不仅有助于保证服务的稳定性,也能在需要迁移时简化操作。

2. 经验分享与问题处理

在部署过程中,可能会遇到一些常见问题,以下是一些问题及其解决方法:

  • 端口冲突:如果在启动容器时遇到端口冲突,确保没有其他服务占用了相同端口。可以通过更改 Docker Compose 配置文件中的端口映射来解决。

    解决方法:修改 docker-compose.yml 文件中的端口映射(例如,修改 MySQL 的端口为其他未占用的端口)。

  • 权限不足:如果出现容器无法访问挂载目录的情况,可能是由于权限不足导致的。确保目录的读写权限已正确设置。

    解决方法:执行 chmod -R 777 /data/rocketmq 等命令来赋予相应的权限,确保容器能够访问目录。

  • 容器无法启动:容器启动失败通常是由于配置错误或资源不足引起的。可以通过查看容器日志来排查问题。

    解决方法:使用 docker logs <container_name> 查看容器日志,分析错误信息,并根据错误提示调整配置文件或资源设置。

通过日志分析和容器状态检查,可以快速定位问题的根本原因并进行修复。

3. 总结

通过本次教程,我们完成了 MySQL、Redis 和 RocketMQ 的部署,并确保它们能在 Docker 环境中稳定运行。部署完成后,确保:

  • 服务能够正常连接和操作。
  • 防火墙和挂载目录设置合理,确保数据的持久化和服务的外部可访问性。

        在实际部署过程中,可能会遇到一些常见问题,如端口冲突、权限不足等,通过日志分析和容器状态检查,我们能够有效定位并解决这些问题,确保服务能够平稳运行。


原文地址:https://blog.csdn.net/m0_53926113/article/details/145123442

免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!