环境
- MySQL 8
- JDK 8
- centos 7
nacos
:1.4.1
Spring cloud version
:Hoxton.SR8
Spring cloud alibaba version
:2.2.5.RELEASE
1.启动nacos连接mysql报错
com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException:
Public Key Retrieval is not allowed
传送门 ==> MySQL 8.0 Public Key Retrieval is not allowed解决方案
配置文件里mysql地址这里加上
allowPublicKeyRetrieval=true
2.nacos集群多出来一个eth0网卡的节点
我们分别在三台虚拟机里启动nacos,分别是221
、223
、225
的机器。但是这里为什么会出现一个15的机器?
为什么变成了4个,并且节点元数据点开里面的信息是混乱的,缺失的。
配置三个节点,但是分别启动后却多出来一个节点。经过
ifconfig
后查看到xxx.xxx.2.15
是eth0
的ip地址,而实际我应该用eth1
的地址,那个才是NAT转发的静态ip地址(xxx.xxx.2.221、xxx.xxx.2.223、xxx.xxx.2.225),才可以被其它机器访问。而且导致了nacos的集群中leader
和follower
关系混乱
解决方案:
-
删掉
cluster.conf
中新写入的xxx.xxx.2.15
,保持集群依旧是三个节点 -
修改
application.properties
文件每台虚拟机里的这个配置,都改成自己当前虚拟机的可外网访问的ip地址
nacos.inetutils.ip-address=你的虚拟机外网ip
-
停掉nacos并且
重启
正常的集群
产生原因:
nacos如果不指定本机的地址的话,会选择第一张网卡的ip地址
3.注意服务发现是discovery而不是config
很低级的错误,但是初学者容易忽视这块儿,可能会踩坑
之前的配置:
spring.cloud.nacos.server-addr: xxxx
注意:漏掉了discovey
而且这里填写config
的话,就是配置中心的地址了,而不是服务注册发现的地址
4.spring cloud 服务启动注册nacos日志无打印,且nacos无服务注册信息
坑!!!
按照nacos的官网案例,这三部曲
- 添加依赖
- 配置服务注册发现的地址
- 开启服务发现
@EnableDiscoveryClient
按理说配置地址对的话,至少日志会打印相关nacos的注册信息。但实际上不是
你的服务如果pom依赖仅仅依赖了spring-cloud-starter-alibaba-nacos-discovery
<dependencies>
<!-- nacos 客户端服务发现 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
</dependencies>
你会发现启动日志如下:
并没有任何注册成功或者失败的日志信息。
并且,你去查看nacos,发现服务列表是空的
这一切的根本是,你没有加入springboot的基础依赖!!!比如:web
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
加入后再观察日志
当然实际上,作为一个web服务,你的项目依赖可能并不会丢掉spring-boot-starter-web
,所以基本不会遇到这个问题。但是如果是自己新手按照文档一步步学习这个案例,那么很有可能出现这个看起来简单但实际匪夷所思的问题。
5.nacos集群的话,服务注册地址怎么写?
server:
port: 8001
spring:
application:
name: order-service
cloud:
nacos:
discovery:
server-addr: nacos1的ip:8848,nacos2的ip:8848,nacos3的ip:8848
直接用,分隔即可,和eureka一致