docker compose部署nacos[单配置文件]

344 阅读2分钟

端口

端口与主端口的偏移量描述
88480主端口,客户端、控制台及OpenAPI所使用的HTTP端口
98481000客户端gRPC请求服务端端口,用于客户端向服务端发起连接和请求
98491001服务端gRPC请求服务端端口,用于服务间同步等
7848-1000Jraft请求服务端端口,用于处理服务端间的Raft相关请求

方式一:部署单节点

MODE=standalone

docker-compose-nacos-cluster.yml内容:

services:
  mes-nacos:
    container_name: mes-nacos
    image: nacos/nacos-server
    environment:
      - TZ=Asia/Shanghai
      - MODE=standalone
      - SPRING_DATASOURCE_PLATFORM=mysql
      - MYSQL_SERVICE_HOST=192.168.1.10  #修改成实际的数据库ip
      - MYSQL_SERVICE_DB_NAME=nacos  #修改成实际的dbname
      - MYSQL_SERVICE_PORT=3306          #修改成对应的端口
      - MYSQL_SERVICE_USER=root     #修改成对应的用户名
      - MYSQL_SERVICE_PASSWORD=12345678     #修改成对应的密码
      - MYSQL_SERVICE_DB_PARAM=characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC
    restart: always
    #network_mode: host
    volumes:
      - ./nacos/logs:/home/nacos/logs
      - ./nacos/data:/home/nacos/data
      #- ./nacos/conf/application.properties:/home/nacos/conf/application.properties
    extra_hosts:
      - "host.docker.internal:host-gateway"
    ports:
      - "8848:8848"
      - "9848:9848"

部署命令: sudo docker compose -f docker-compose-nacos-cluster.yml up -d

方式二:部署集群(bridge模式)[失败]

主要区别:

MODE=cluster

NACOS_SERVERS=node1:8848 node2:8848 node3:8848

docker-compose-nacos-cluster.yml内容:

services:
  mes-nacos:
    container_name: mes-nacos
    image: nacos/nacos-server
    environment:
      - TZ=Asia/Shanghai
      - MODE=cluster
      - NACOS_SERVERS=192.168.1.11:8848 192.168.1.12:8848 192.168.1.13:8848
      - SPRING_DATASOURCE_PLATFORM=mysql
      - MYSQL_SERVICE_HOST=172.100.1.14  #修改成实际的数据库ip
      - MYSQL_SERVICE_DB_NAME=nacos  #修改成实际的dbname
      - MYSQL_SERVICE_PORT=3306          #修改成对应的端口
      - MYSQL_SERVICE_USER=root     #修改成对应的用户名
      - MYSQL_SERVICE_PASSWORD=12345678     #修改成对应的密码
      - MYSQL_SERVICE_DB_PARAM=characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC
    restart: always
    #network_mode: host
    volumes:
      - ./nacos/logs:/home/nacos/logs
      - ./nacos/data:/home/nacos/data
      #- ./nacos/conf/application.properties:/home/nacos/conf/application.properties
    extra_hosts:
      - "host.docker.internal:host-gateway"
    ports:
      - "8848:8848"
      - "9848:9848"
      - "9849:9849"  # 官方例子由于为单机模式,未设置
      - "7848:7848"  # 官方例子由于为单机模式,未设置

每台执行相同的部署命令

注:配置信息也可以放在外面,通过下面引入:

    env_file:
      - .env-cluster

测试结果:管理界面中显示为UP,但raft日志显示错误,选择leader失败。

$ docker exec nacos-cluster tail -f logs/protocol-raft.log:

java.lang.IllegalStateException: Fail to get leader of group naming_service_metadata, Fail to find node 192.168.1.19:7848 in group naming_service_metadata, Fail to find node 192.168.1.11:7848 in group naming_service_metadata, Fail to find node 192.168.1.18:7848 in group naming_service_metadata, Unknown leader

logs/alipay-jraft.log:

2024-06-12 09:54:06,765 WARN Node <naming_service_metadata/172.30.0.2:7848> PreVote to 192.168.1.18:7848 error: Status[ENOENT<1012>: Peer id not found: 192.168.1.18:7848, group: naming_service_metadata].

其它尝试:

添加extra_hosts,如"nacos1:x.x.x.x"等,hostname,采用hostname,均失败

方式三:部署集群(host模式)[成功]

docker-compose-nacos-cluster.yml内容:

services:
  mes-nacos:
    container_name: nacos-cluster
    image: nacos/nacos-server:latest
    environment:
      - TZ=Asia/Shanghai
      - MODE=cluster
      - PREFER_HOST_MODE=ip
      - NACOS_SERVERS=192.168.1.11:8848 192.168.1.12:8848 192.168.1.13:8848
      - SPRING_DATASOURCE_PLATFORM=mysql
      - MYSQL_SERVICE_HOST=192.168.1.14  #修改成实际的数据库ip
      - MYSQL_SERVICE_DB_NAME=nacos  #修改成实际的dbname
      - MYSQL_SERVICE_PORT=3306          #修改成对应的端口
      - MYSQL_SERVICE_USER=root     #修改成对应的用户名
      - MYSQL_SERVICE_PASSWORD=12345678     #修改成对应的密码
      - MYSQL_SERVICE_DB_PARAM=characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai
      #- NACOS_AUTH_USER_AGENT_AUTH_WHITE_ENABLE=true
      #- NACOS_AUTH_IDENTITY_KEY=serverIdentity
      #- NACOS_AUTH_IDENTITY_VALUE=security
      #- NACOS_AUTH_TOKEN=SecretKey012345678901234567890123456789012345678901234567890123456789
      #- NACOS_SERVER_IP=127.0.0.1
      
    privileged: true
    restart: always
    network_mode: host
    volumes:
      - ./nacos/logs:/home/nacos/logs
      - ./nacos/data:/home/nacos/data
      #- ./nacos/conf/application.properties:/home/nacos/conf/application.properties
    extra_hosts:
      - "host.docker.internal:host-gateway"
    #ports:
    #  - "8848:8848"
    #  - "9848:9848"
    #  - "9849:9849"
    #  - "7848:7848"
    

主要区别:

  • network_mode: host
  • ports不需要配置

节点元数据

查看管理界面中节点列表:Nacos

{
    "lastRefreshTime": 1718175737111,
    "raftMetaData": {
        "metaDataMap": {
            "naming_instance_metadata": {
                "leader": "192.168.1.11:7848",
                "raftGroupMember": [
                    "192.168.1.12:7848",
                    "192.168.1.11:7848",
                    "192.168.1.13:7848"
                ],
                "term": 1
            },
            "naming_persistent_service": {
                "leader": "192.168.1.11:7848",
                "raftGroupMember": [
                    "192.168.1.12:7848",
                    "192.168.1.11:7848",
                    "192.168.1.13:7848"
                ],
                "term": 1
            },
            "naming_persistent_service_v2": {
                "leader": "192.168.1.11:7848",
                "raftGroupMember": [
                    "192.168.1.12:7848",
                    "192.168.1.11:7848",
                    "192.168.1.13:7848"
                ],
                "term": 1
            },
            "naming_service_metadata": {
                "leader": "192.168.1.11:7848",
                "raftGroupMember": [
                    "192.168.1.12:7848",
                    "192.168.1.11:7848",
                    "192.168.1.13:7848"
                ],
                "term": 1
            }
        }
    },
    "raftPort": "7848",
    "readyToUpgrade": true,
    "version": "2.3.2"
}

检查状态

$ tail -f -n 500 nacos/logs/protocol-raft.log

2024-06-14 15:51:38,034 INFO This Raft event changes : RaftEvent{groupId='naming_instance_metadata', leader='192.168.1.11:7848', term=10, raftClusterInfo=[192.168.1.12:7848, 192.168.1.13:7848, 192.168.1.11:7848]}

2024-06-14 15:51:38,034 INFO This Raft event changes : RaftEvent{groupId='naming_persistent_service_v2', leader='192.168.1.11:7848', term=10, raftClusterInfo=[192.168.1.12:7848, 192.168.1.13:7848, 192.168.1.11:7848]}

登录 http://:8848/nacos 查看节点列表,有三个节点