如题,我知道nacos2.x需要开放8848、9848、9849三个端口,问题可能就出在这,我的配置如下,请教一下是哪里有错
# docker 启动 nacos 容器
docker run -d -p 18848:8848 -p 19848:9848 -p 19849:9849
-e MODE=cluster
-e PREFER_HOST_MODE=hostname
-e NACOS_SERVERS="192.168.10.10:18848 192.168.10.10:28848 192.168.10.10:38848"
-e SPRING_DATASOURCE_PLATFORM=mysql
-e MYSQL_SERVICE_HOST=192.168.10.10
-e MYSQL_SERVICE_PORT=13306
-e MYSQL_SERVICE_DB_NAME=nacos_config
-e MYSQL_SERVICE_USER=root
-e MYSQL_SERVICE_PASSWORD=123456
-e MYSQL_DATABASE_NUM=1
-v /home/dev/docker/nacos/init.d/custom.properties:/home/nacos/init.d/custom.properties
-v /home/dev/docker/nacos/logs:/home/nacos/logs
--restart always
--name nacos-dev1
nacos/nacos-server:2.0.3
# nginx 配置
stream {
upstream nacos-cluster{
server 192.168.10.10:19848 weight=1; #ip地址和nacos集群的一致,端口号在nacos集群的端口号基础上+1000
#server 192.168.10.10:29848 weight=2;
#server 192.168.10.10:39848 weight=3;
}
server {
listen 1080; #nginx监听端口号+1000
proxy_pass nacos-cluster;
}
}
http {
upstream nacos-cluster {
server 192.168.10.10:18848 weight=1;
#server 192.168.10.10:28848 weight=2;
#server 192.168.10.10:38848 weight=3;
}
server {
listen 80;
server_name localhost;
location /nacos {
proxy_pass http://nacos-cluster;
}
}
}
# application.yml配置
server:
port: 80
spring:
application:
name: gateway
cloud:
inetutils:
# 忽略的网卡,对于有虚拟机的机器可以避免报错
ignored-interfaces: 'VMware Virtual Ethernet Adapter for VMnet1,VMware Virtual Ethernet Adapter for VMnet8'
nacos:
discovery:
server-addr: 192.168.10.10
gateway:
discovery:
locator:
enabled: true
# 报错如下
2023-04-26 21:45:03.710 INFO 11164 --- [ main] o.s.b.web.embedded.netty.NettyWebServer : Netty started on port(s): 80
2023-04-26 21:45:03.801 ERROR 11164 --- [oundedElastic-1] c.a.c.n.d.r.NacosReactiveDiscoveryClient : get services from nacos server fail,
com.alibaba.nacos.api.exception.NacosException: Request nacos server failed:
at com.alibaba.nacos.client.naming.remote.gprc.NamingGrpcClientProxy.requestToServer(NamingGrpcClientProxy.java:279) ~[nacos-client-2.0.3.jar:na]
at com.alibaba.nacos.client.naming.remote.gprc.NamingGrpcClientProxy.getServiceList(NamingGrpcClientProxy.java:202) ~[nacos-client-2.0.3.jar:na]
at com.alibaba.nacos.client.naming.remote.NamingClientProxyDelegate.getServiceList(NamingClientProxyDelegate.java:137) ~[nacos-client-2.0.3.jar:na]
at com.alibaba.nacos.client.naming.NacosNamingService.getServicesOfServer(NacosNamingService.java:440) ~[nacos-client-2.0.3.jar:na]
at com.alibaba.nacos.client.naming.NacosNamingService.getServicesOfServer(NacosNamingService.java:428) ~[nacos-client-2.0.3.jar:na]
at com.alibaba.cloud.nacos.discovery.NacosServiceDiscovery.getServices(NacosServiceDiscovery.java:69) ~[spring-cloud-starter-alibaba-nacos-discovery-2.2.7.RELEASE.jar:2.2.7.RELEASE]
at com.alibaba.cloud.nacos.discovery.reactive.NacosReactiveDiscoveryClient.lambda$getServices$1(NacosReactiveDiscoveryClient.java:75) ~[spring-cloud-starter-alibaba-nacos-discovery-2.2.7.RELEASE.jar:2.2.7.RELEASE]
at reactor.core.publisher.FluxDefer.subscribe(FluxDefer.java:46) ~[reactor-core-3.3.17.RELEASE.jar:3.3.17.RELEASE]
at reactor.core.publisher.FluxSubscribeOn$SubscribeOnSubscriber.run(FluxSubscribeOn.java:187) ~[reactor-core-3.3.17.RELEASE.jar:3.3.17.RELEASE]
at reactor.core.scheduler.WorkerTask.call(WorkerTask.java:84) ~[reactor-core-3.3.17.RELEASE.jar:3.3.17.RELEASE]
at reactor.core.scheduler.WorkerTask.call(WorkerTask.java:37) ~[reactor-core-3.3.17.RELEASE.jar:3.3.17.RELEASE]
at java.util.concurrent.FutureTask.run(FutureTask.java:266) ~[na:1.8.0_321]
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180) ~[na:1.8.0_321]
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) ~[na:1.8.0_321]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) ~[na:1.8.0_321]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) ~[na:1.8.0_321]
at java.lang.Thread.run(Thread.java:750) ~[na:1.8.0_321]
Caused by: com.alibaba.nacos.api.exception.NacosException: Client not connected,current status:STARTING
at com.alibaba.nacos.common.remote.client.RpcClient.request(RpcClient.java:655) ~[nacos-client-2.0.3.jar:na]
at com.alibaba.nacos.common.remote.client.RpcClient.request(RpcClient.java:635) ~[nacos-client-2.0.3.jar:na]
at com.alibaba.nacos.client.naming.remote.gprc.NamingGrpcClientProxy.requestToServer(NamingGrpcClientProxy.java:269) ~[nacos-client-2.0.3.jar:na]
... 16 common frames omitted
server-addr配置加上8848端口
不知道你这个问题是否已经解决, 如果还没有解决的话:# 下载好的nacos放到/usr/local目录下
cd /usr/local
# 解压
tar -zxvf nacos-server-2.0.1.tar.gz
# 删除压缩包
rm -f nacos-server-2.0.1.tar.gz
根据参考资料和你提供的配置,推断你使用的是Nacos单机模式,而非Nacos集群模式。因此,你需要按照参考资料段落2的步骤,进行Nacos集群的搭建。
以下是基本的步骤:
$ docker network create mynet
$ docker pull nacos/nacos-server:v2.1.2
``` $ docker run -itd --name node1 --net mynet --ip 172.19.0.21 --restart=always -e PREFER_HOST_MODE=ip -e MODE=cluster -e NACOS_SERVERS="172.19.0.22:8848 172.19.0.23:8848" -e SPRING_DATASOURCE_PLATFORM=mysql -e MYSQL_SERVICE_HOST=172.19.0.11 -e MYSQL_SERVICE_PORT=3306 -e MYSQL_SERVICE_DB_NAME=nacos_config -e MYSQL_SERVICE_USER=root -e MYSQL_SERVICE_PASSWORD=root666 -e MYSQL_SLAVE_SERVICE_HOST=172.19.0.12 -e MYSQL_SLAVE_SERVICE_PORT=3306 -e MYSQL_DATABASE_NUM=2 -e JVM_XMS=256m -e JVM_XMX=512m -e JVM_XMN=256m -p 18801:8848 nacos/nacos-server:v2.1.2
$ docker run -itd --name node2 --net mynet --ip 172.19.0.22 --restart=always -e PREFER_HOST_MODE=ip -e MODE=cluster -e NACOS_SERVERS="172.19.0.21:8848 172.19.0.23:8848" -e SPRING_DATASOURCE_PLATFORM=mysql -e MYSQL_SERVICE_HOST=172.19.0.11 -e MYSQL_SERVICE_PORT=3306 -e MYSQL_SERVICE_DB_NAME=nacos_config -e MYSQL_SERVICE_USER=root -e MYSQL_SERVICE_PASSWORD=root666 -e MYSQL_SLAVE_SERVICE_HOST=172.19.0.12 -e MYSQL_SLAVE_SERVICE_PORT=3306 -e MYSQL_DATABASE_NUM=2 -e JVM_XMS=256m -e JVM_XMX=512m -e JVM_XMN=256m -p 18802:8848 nacos/nacos-server:v2.1.2
$ docker run -itd --name node3 --net mynet --ip 172.19.0.23 --restart=always -e PREFER_HOST_MODE=ip -e MODE=cluster -e NACOS_SERVERS="172.19.0.21:8848 172.19.0.22:8848" -e SPRING_DATASOURCE_PLATFORM=mysql -e MYSQL_SERVICE_HOST=172.19.0.11 -e MYSQL_SERVICE_PORT=3306 -e MYSQL_SERVICE_DB_NAME=nacos_config -e MYSQL_SERVICE_USER=root -e MYSQL_SERVICE_PASSWORD=root666 -e MYSQL_SLAVE_SERVICE_HOST=172.19.0.12 -e MYSQL_SLAVE_SERVICE_PORT=3306 -e MYSQL_DATABASE_NUM=2 -e JVM_XMS=256m -e JVM_XMX=512m -e JVM_XMN=256m -p 18803:8848 nacos/nacos-server:v2.1.2 ```
注意: Nacos 集群中的节点数量至少为 3 个。在示例中,我们选择了三个节点。
分为两种方式:
(1)在构建容器时通过修改 docker run
命令来指定,例如上述步骤中的 --net mynet
和 --ip 172.19.0.x
。
(2)将通信信息配置为环境变量传递给容器。
您可以通过以下地址访问基本的Web界面:
http://node1:8848/nacos/
完成了这些步骤后,您可以在微服务中直接使用 nginx 暴露的 8848,9848 端口进行负载均衡使用。