端口
| 端口 | 与主端口的偏移量 | 描述 |
|---|---|---|
| 8848 | 0 | 主端口,客户端、控制台及OpenAPI所使用的HTTP端口 |
| 9848 | 1000 | 客户端gRPC请求服务端端口,用于客户端向服务端发起连接和请求 |
| 9849 | 1001 | 服务端gRPC请求服务端端口,用于服务间同步等 |
| 7848 | -1000 | Jraft请求服务端端口,用于处理服务端间的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 查看节点列表,有三个节点