Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Nacos 2.4.0 当前发现的问题汇总 #12387

Closed
herodotus-ecosystem opened this issue Jul 20, 2024 · 13 comments
Closed

Nacos 2.4.0 当前发现的问题汇总 #12387

herodotus-ecosystem opened this issue Jul 20, 2024 · 13 comments
Labels
kind/bug Category issues or prs related to bug.

Comments

@herodotus-ecosystem
Copy link

herodotus-ecosystem commented Jul 20, 2024

很开心看到 Nacos 发布了新版本,谢谢项目团队的付出和努力,所以第一时间进行了试用,发现几个问题,统一汇总如下。

1. 升级 Nacos 运行报错

Nacos Client 升级至 2.4.0 以后,已有工程运行出错。

个人的环境是:Spring Boot 3.3.1、Spring Cloud 2023.0.3、Spring Cloud Alibaba 2023.0.1.2。

在这个环境下使用 Nacos Client 2.3.3 + Nacos Server 2.3.2 运行正常,全部切换至 2.4.0 出错。

手动将 Nacos Client 依赖的 logback-adapter 排除才能运行。

错误信息如下:

Logging system failed to initialize using configuration from 'null'
java.lang.IllegalStateException: Could not initialize Logback Nacos logging from classpath:nacos-logback14.xml
	at com.alibaba.nacos.logger.adapter.logback14.LogbackNacosLoggingAdapter.loadConfigurationOnStart(LogbackNacosLoggingAdapter.java:120)
	at com.alibaba.nacos.logger.adapter.logback14.LogbackNacosLoggingAdapter.access$000(LogbackNacosLoggingAdapter.java:37)
	at com.alibaba.nacos.logger.adapter.logback14.LogbackNacosLoggingAdapter$NacosLoggerContextListener.onReset(LogbackNacosLoggingAdapter.java:141)
	at ch.qos.logback.classic.LoggerContext.fireOnReset(LoggerContext.java:318)
	at ch.qos.logback.classic.LoggerContext.reset(LoggerContext.java:366)
	at ch.qos.logback.classic.LoggerContext.stop(LoggerContext.java:343)
	at org.springframework.boot.logging.logback.LogbackLoggingSystem.stopAndReset(LogbackLoggingSystem.java:300)
	at org.springframework.boot.logging.logback.LogbackLoggingSystem.loadDefaults(LogbackLoggingSystem.java:226)
	at org.springframework.boot.logging.AbstractLoggingSystem.initializeWithConventions(AbstractLoggingSystem.java:84)
	at org.springframework.boot.logging.AbstractLoggingSystem.initialize(AbstractLoggingSystem.java:61)
	at org.springframework.boot.logging.logback.LogbackLoggingSystem.initialize(LogbackLoggingSystem.java:193)
	at org.springframework.boot.context.logging.LoggingApplicationListener.initializeSystem(LoggingApplicationListener.java:332)
	at org.springframework.boot.context.logging.LoggingApplicationListener.initialize(LoggingApplicationListener.java:298)
	at org.springframework.boot.context.logging.LoggingApplicationListener.onApplicationEnvironmentPreparedEvent(LoggingApplicationListener.java:246)
	at org.springframework.boot.context.logging.LoggingApplicationListener.onApplicationEvent(LoggingApplicationListener.java:223)
	at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:185)
	at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:178)
	at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:156)
	at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:138)
	at org.springframework.boot.context.event.EventPublishingRunListener.multicastInitialEvent(EventPublishingRunListener.java:136)
	at org.springframework.boot.context.event.EventPublishingRunListener.environmentPrepared(EventPublishingRunListener.java:81)
	at org.springframework.boot.SpringApplicationRunListeners.lambda$environmentPrepared$2(SpringApplicationRunListeners.java:64)
	at java.base/java.lang.Iterable.forEach(Iterable.java:75)
	at org.springframework.boot.SpringApplicationRunListeners.doWithListeners(SpringApplicationRunListeners.java:118)
	at org.springframework.boot.SpringApplicationRunListeners.doWithListeners(SpringApplicationRunListeners.java:112)
	at org.springframework.boot.SpringApplicationRunListeners.environmentPrepared(SpringApplicationRunListeners.java:63)
	at org.springframework.boot.SpringApplication.prepareEnvironment(SpringApplication.java:370)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:330)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1363)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1352)
	at cn.herodotus.cloud.upms.UpmsApplication.main(UpmsApplication.java:39)
Caused by: java.lang.IllegalStateException: [*][variable] already has an associated action supplier
	at ch.qos.logback.core.joran.spi.SimpleRuleStore.addRule(SimpleRuleStore.java:89)
	at ch.qos.logback.core.joran.JoranConfiguratorBase.addElementSelectorAndActionAssociations(JoranConfiguratorBase.java:56)
	at ch.qos.logback.classic.joran.JoranConfigurator.addElementSelectorAndActionAssociations(JoranConfigurator.java:52)
	at com.alibaba.nacos.logger.adapter.logback14.NacosLogbackConfiguratorAdapterV2.addElementSelectorAndActionAssociations(NacosLogbackConfiguratorAdapterV2.java:62)
	at ch.qos.logback.core.joran.GenericXMLConfigurator.buildSaxEventInterpreter(GenericXMLConfigurator.java:140)
	at ch.qos.logback.core.joran.GenericXMLConfigurator.buildModelFromSaxEventList(GenericXMLConfigurator.java:197)
	at ch.qos.logback.core.joran.GenericXMLConfigurator.doConfigure(GenericXMLConfigurator.java:172)
	at ch.qos.logback.core.joran.GenericXMLConfigurator.doConfigure(GenericXMLConfigurator.java:123)
	at com.alibaba.nacos.logger.adapter.logback14.NacosLogbackConfiguratorAdapterV2.configure(NacosLogbackConfiguratorAdapterV2.java:79)
	at com.alibaba.nacos.logger.adapter.logback14.LogbackNacosLoggingAdapter.loadConfigurationOnStart(LogbackNacosLoggingAdapter.java:118)
	... 30 more
Exception in thread "SpringApplicationShutdownHook" java.lang.IllegalStateException: Could not initialize Logback Nacos logging from classpath:nacos-logback14.xml
	at com.alibaba.nacos.logger.adapter.logback14.LogbackNacosLoggingAdapter.loadConfigurationOnStart(LogbackNacosLoggingAdapter.java:120)
	at com.alibaba.nacos.logger.adapter.logback14.LogbackNacosLoggingAdapter.access$000(LogbackNacosLoggingAdapter.java:37)
	at com.alibaba.nacos.logger.adapter.logback14.LogbackNacosLoggingAdapter$NacosLoggerContextListener.onReset(LogbackNacosLoggingAdapter.java:141)
	at ch.qos.logback.classic.LoggerContext.fireOnReset(LoggerContext.java:318)
	at ch.qos.logback.classic.LoggerContext.reset(LoggerContext.java:366)
	at ch.qos.logback.classic.LoggerContext.stop(LoggerContext.java:343)
	at org.springframework.boot.logging.logback.LogbackLoggingSystem.lambda$getShutdownHandler$2(LogbackLoggingSystem.java:391)
	at java.base/java.lang.Iterable.forEach(Iterable.java:75)
	at org.springframework.boot.SpringApplicationShutdownHook.run(SpringApplicationShutdownHook.java:116)
	at java.base/java.lang.Thread.run(Thread.java:1583)
Caused by: java.lang.IllegalStateException: [*][variable] already has an associated action supplier
	at ch.qos.logback.core.joran.spi.SimpleRuleStore.addRule(SimpleRuleStore.java:89)
	at ch.qos.logback.core.joran.JoranConfiguratorBase.addElementSelectorAndActionAssociations(JoranConfiguratorBase.java:56)
	at ch.qos.logback.classic.joran.JoranConfigurator.addElementSelectorAndActionAssociations(JoranConfigurator.java:52)
	at com.alibaba.nacos.logger.adapter.logback14.NacosLogbackConfiguratorAdapterV2.addElementSelectorAndActionAssociations(NacosLogbackConfiguratorAdapterV2.java:62)
	at ch.qos.logback.core.joran.GenericXMLConfigurator.buildSaxEventInterpreter(GenericXMLConfigurator.java:140)
	at ch.qos.logback.core.joran.GenericXMLConfigurator.buildModelFromSaxEventList(GenericXMLConfigurator.java:197)
	at ch.qos.logback.core.joran.GenericXMLConfigurator.doConfigure(GenericXMLConfigurator.java:172)
	at ch.qos.logback.core.joran.GenericXMLConfigurator.doConfigure(GenericXMLConfigurator.java:123)
	at com.alibaba.nacos.logger.adapter.logback14.NacosLogbackConfiguratorAdapterV2.configure(NacosLogbackConfiguratorAdapterV2.java:79)
	at com.alibaba.nacos.logger.adapter.logback14.LogbackNacosLoggingAdapter.loadConfigurationOnStart(LogbackNacosLoggingAdapter.java:118)
	... 9 more

2. 表结构变更后适配不完整

Nacos 2.4.0 表结构有了变化:1. 部分字段 Text 变成 varchar(1024);2. user、role 等相关表增加了 id 字段。

前者没啥问题,后者因为增加了字段 id。粗略看了一下代码,发现 nacos-default-auth-login 模块中 user 和 role 的代码中并没有增加 id 等内容。

因此,使用 postgresql datasource plugin,新增用户就会抛出 SQL 执行错误。如果不修改 user 和 role 两张表,不增加 id 字段,那么Nacos 还是使用正常的

只是粗略看了一下,问题是否在此,不是很确定。

3. 开启认证后,无法登录,会自动增加用。

全新下载一个 nacos.zip。先不开启认证,增加一个新的用户。然后再开启认证,用这个用户无法登录。而且,每次点登录,都会在数据库新建一个用户信息。

image

image

4. 前端用户相关界面消失

全新安装的 Nacos 前端界面中,有权限控制菜单,包括新建用户、角色和权限等操作界面。开启认证后,再关闭认证,打开界面,用户相关操作就消失不见了。

image

herodotus-ecosystem referenced this issue in dromara/dante-cloud Jul 20, 2024
- 主要更新
  - [升级] Spring Boot 版本升级至 3.3.2
  - [升级] Spring Cloud Alibaba 版本升级至 2023.0.1.2
  - [升级] Nacos 版本升级至 2.4.0
  - [升级] Debezium 相关组件版本升级至 2.7
  - [新增] 新增基于 Aws SDK V2 版本的、响应式对象存储适配支持
- 其它更新
  - [发布] 基于 Postgresql 的、重新打包的 Nacos Server 2.4.0 已上传。
  - [重构] 大幅调整 OSS 工程各模块定位、实现机制以及代码,重新定义统一调用定义及实现。
  - [重构] 重构和调整 OSS 各模块自动配置机制,自动适配阻塞式和响应式环境。
  - [重构] 重构 OSS 代码,修正包名、模块名不规范,与工程 groupId 不一致问题。
  - [重构] 恢复 Sentinel Dashboard 控制台懒加载配置
  - [修复] 修复升级至 Nacos 2.4.0 运行抛出 `java.lang.IllegalStateException: Could not initialize Logback Nacos logging from classpath:nacos-logback14.xml` 问题。fix: #IAECYY
  - [修复] 修复升级至 Nacos 2.4.0 运行抛出 `[*][variable] already has an associated action supplierl` 问题。fix: #IAECZ5
  - [修复] Sentinel 适配新版 sentinel-spring-webmvc-v6x-adapter
  - [升级] liberica 基础镜像版本升级至 21.0.4-9
  - [升级] minio docker 镜像版本升级至 RELEASE.2024-07-16T23-46-41Z
- 依赖升级
  - [升级] aws-java-sdk-s3 版本升级至 1.12.762
  - [升级] software.amazon.awssdk 版本升级至 2.26.21
  - [升级] software.amazon.awssdk.crt 版本升级至 0.30.0
  - [升级] redisson 版本升级至 3.33.0
  - [升级] fastjson2 版升级至 2.0.52
  - [升级] weixin-java 版本升级至 4.6.3.B
  - [升级] alipay-sdk-java 版本升级至 4.39.134.ALL
- 注意事项
  - Nacos 2.4.0 版本做了很多的改进和提升。但是当前版本还存在较多问题,已知问题已提交至:<https://github.com/alibaba/nacos/issues/12387>。所以,还请谨慎使用。
@KomachiSion KomachiSion added the kind/bug Category issues or prs related to bug. label Jul 22, 2024
@KomachiSion
Copy link
Collaborator

问题1, 3 无法复现,可以提供可复现的demo吗?

问题4是符合预期的, 只要关闭鉴权,页面上就不可见用户管理, 这是从2.3.0就如此的逻辑,社区中有对应的公告。

问题2可能是需要排查的问题。

@KomachiSion
Copy link
Collaborator

关于问题1, 我查了下报错的信息, 信息对应的问题是配置文件中有重复的配置,导致解析配置文件失败,

https://github.com/nacos-group/logback-adapter/blob/master/src/main/resources/nacos-logback14.xml 来看,官方提供的配置文件应该没有重复的配置, 您可以看下自己的logback配置里是不是有重复定义的appender、logger以及properties等,移除掉试一下。 或者提供一个可以复现的demo。

问题3,请问您是如何创建的nacos用户?

@KomachiSion
Copy link
Collaborator

问题2 确实有问题, 引入自#12206, 可能需要先回滚。

@herodotus-ecosystem
Copy link
Author

感谢您的回复。

问题三:刚刚我又用干净的环境重新尝试了一下,就没有出现了。可能是我本地环境有点乱导致的,有2.3.2,还有自定义插件环境。
问题一:我正在试着整个可以重现的最小环境,看看能不能重现。也有可能是我当前的工程依赖的东西多,具体哪个东西影响还要排查一下。

@KomachiSion
Copy link
Collaborator

关于问题2 ,其实我发现虽然他会报错,但是SQL是执行了的。似乎使用上暂时没有影响。

@HMYDK
Copy link
Contributor

HMYDK commented Jul 22, 2024

关于问题2 ,其实我发现虽然他会报错,但是SQL是执行了的。似乎使用上暂时没有影响。

是否是db插件对应的sql没有更新导致的?https://github.com/nacos-group/nacos-plugin/blob/develop/nacos-datasource-plugin-ext/nacos-postgresql-datasource-plugin-ext/src/main/resources/schema/nacos-pg.sql

@HMYDK
Copy link
Contributor

HMYDK commented Jul 22, 2024

按照我的理解,只是增加mysql主键(自增)。没有修改代码(因为自增所以不需要)。
理论上不会影响别的db插件。

@herodotus-ecosystem
Copy link
Author

按照我的理解,只是增加mysql主键(自增)。没有修改代码(因为自增所以不需要)。 理论上不会影响别的db插件。

如果不修改db插件的代码,同时也不修改数据库(即不增加user 和 role 的id,相当于还是用 2.4.0 以前的数据库脚本),确实可以运行。但是如果不修改 db 插件的代码,但是数据库改成 2.4.0 的(即 user、role 增加了 ID),还是可以运行起来,但是涉及用户的操作就都会抛错。包括:在nacos 界面中管理用户,如果开启了鉴权,服务无法连接到server,会报403错误。

@KomachiSion
Copy link
Collaborator

我刚试了下mysql数据库, 虽然有报错, 但是添加用户是成功的, 页面上能够看到新用户,所以我理解对于mysql数据库应该影响可控, 其他数据库及其插件需要看一下影响。

我觉得还是先回滚吧。下次修改的时候看下是否连同SQL一起修改。

@herodotus-ecosystem
Copy link
Author

关于问题2 ,其实我发现虽然他会报错,但是SQL是执行了的。似乎使用上暂时没有影响。

是否是db插件对应的sql没有更新导致的?https://github.com/nacos-group/nacos-plugin/blob/develop/nacos-datasource-plugin-ext/nacos-postgresql-datasource-plugin-ext/src/main/resources/schema/nacos-pg.sql

这个脚本是老的,nacos 2.4.0 脚本有变化:1. 部分字段 Text 变成 varchar(1024);2. user、role 等相关表增加了 id 字段。
2.4.0 以前 user表的主键是 username,2.4.0 user 表的主键变成了 id。

所以,如果数据库改成 2.4.0 增加了 ID,但是db插件没改,才会出现 问题三的情况。 因为 2.4.0 数据库脚本中,去掉了默认用户,如果开启鉴权第一次登录会自动帮着创建用。

@herodotus-ecosystem
Copy link
Author

herodotus-ecosystem commented Jul 22, 2024

问题1重现,见 https://github.com/herodotus-ecosystem/nacos-reproduce @KomachiSion

目测,是 Bootstrap 模式会加载日志两次。logback-adapter 包除了日志配置文件 nacos-logback14.xml 外,还有代码会动态往 logback 中加内容,所以启动报错。

image

@KomachiSion
Copy link
Collaborator

问题1重现,见 https://github.com/herodotus-ecosystem/nacos-reproduce @KomachiSion

目测,是 Bootstrap 模式会加载日志两次。logback-adapter 包除了日志配置文件 nacos-logback14.xml 外,还有代码会动态往 logback 中加内容,所以启动报错。

image

应该是有重复的问题, 帮忙提个issue到https://github.com/nacos-group/logback-adapter/ 晚点看下怎么修复。

@KomachiSion
Copy link
Collaborator

问题1,2 已通过https://github.com/alibaba/nacos/pull/12396, nacos-group/logback-adapter#8

前者可以升级一下server版本能解决(2.4.0.1), 后者通过重新制定logback-adapter版本为1.1.1解决。

KomachiSion added a commit to KomachiSion/nacos that referenced this issue Sep 3, 2024
KomachiSion added a commit that referenced this issue Sep 3, 2024
* For #12387, upgrade logback adapter to 1.1.3

* For #12586, upgrade spring version to 5.3.38.

* Use npm audit fix to fix no conflict ui depend component security problem.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
kind/bug Category issues or prs related to bug.
Projects
None yet
Development

No branches or pull requests

3 participants