要在三台机器上搭建Nacos集群并连接到同一个MySQL数据库,我们需要为每台机器准备一个docker-compose.yml文件。每个文件将稍有不同,主要是服务的名称和端口映射,以确保它们可以在各自的机器上独立运行,并通过内部或外部网络互相通信。

以下是针对三台机器的docker-compose.yml文件示例,考虑到Nacos服务的默认端口已经更改为8898:

Machine 1 (IP: 10.206.0.13)

version: '3'
services:
  nacos1:
    image: nacos/nacos-server:latest
    environment:
      - MODE=cluster
      - NACOS_SERVERS=10.206.0.13:8898,10.206.0.8:8898,10.206.0.4:8898
      - SPRING_DATASOURCE_PLATFORM=mysql
      - MYSQL_SERVICE_HOST=10.206.0.7
      - MYSQL_SERVICE_DB_NAME=nacos_config
      - MYSQL_SERVICE_PORT=3396
      - MYSQL_SERVICE_USER=shtcetcmysql
      - MYSQL_SERVICE_PASSWORD=Shtcetc@2024
    ports:
      - "8898:8848"
    restart: on-failure

Machine 2 (IP: 10.206.0.8)

version: '3'
services:
  nacos2:
    image: nacos/nacos-server:latest
    environment:
      - MODE=cluster
      - NACOS_SERVERS=10.206.0.13:8898,10.206.0.8:8898,10.206.0.4:8898
      - SPRING_DATASOURCE_PLATFORM=mysql
      - MYSQL_SERVICE_HOST=10.206.0.7
      - MYSQL_SERVICE_DB_NAME=nacos_config
      - MYSQL_SERVICE_PORT=3396
      - MYSQL_SERVICE_USER=shtcetcmysql
      - MYSQL_SERVICE_PASSWORD=Shtcetc@2024
    ports:
      - "8898:8848"
    restart: on-failure

Machine 3 (IP: 10.206.0.4)

version: '3'
services:
  nacos3:
    image: nacos/nacos-server:latest
    environment:
      - MODE=cluster
      - NACOS_SERVERS=10.206.0.13:8898,10.206.0.8:8898,10.206.0.4:8898
      - SPRING_DATASOURCE_PLATFORM=mysql
      - MYSQL_SERVICE_HOST=10.206.0.7
      - MYSQL_SERVICE_DB_NAME=nacos_config
      - MYSQL_SERVICE_PORT=3396
      - MYSQL_SERVICE_USER=shtcetcmysql
      - MYSQL_SERVICE_PASSWORD=Shtcetc@2024
    ports:
      - "8898:8848"
    restart: on-failure

这些文件应该在各自的机器上部署和运行。请注意以下几点:

  • 每个服务都配置为参与到相同的Nacos集群中,通过NACOS_SERVERS环境变量列出了集群中所有实例的地址和端口。
  • 端口映射将容器内的8848端口(Nacos默认端口)映射到宿主机的8898端口上,以符合新的默认端口配置。请确保这不会与宿主机上的其他服务冲突。
  • 请根据实际部署情况调整MYSQL_SERVICE_HOST、MYSQL_SERVICE_DB_NAME、MYSQL_SERVICE_PORT、MYSQL_SERVICE_USER和MYSQL_SERVICE_PASSWORD环境变量,以确保能够成功连接到MySQL数据库。
  • restart: on-failure策略确保了在服务因为错误退出时能够自动重启。

部署前,请确认每台机器的Docker和Docker Compose都已安装且更新到最新版本,且网络配置允许这些机器相互通信。

更多推荐