alibaba / nacos

an easy-to-use dynamic service discovery, configuration and service management platform for building cloud native applications.
https://nacos.io
Apache License 2.0
29.91k stars 12.77k forks source link

nacos 1.4.0 多平台兼容性疑问 #4336

Open lltx opened 3 years ago

lltx commented 3 years ago

Describe the bug

    at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:788)
    ... 105 common frames omitted
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'persistentServiceProcessor' defined in URL [jar:file:/C:/Users/Administrator/.m2/repository/com/pig4cloud/nacos/nacos-naming/1.4.0/nacos-naming-1.4.0.jar!/com/alibaba/nacos/naming/consistency/persistent/impl/PersistentServiceProcessor.class]: Bean instantiation via constructor failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.alibaba.nacos.naming.consistency.persistent.impl.PersistentServiceProcessor]: Constructor threw exception; nested exception is java.lang.UnsatisfiedLinkError: C:\Users\Administrator\AppData\Local\Temp\librocksdbjni3732491341899342270.dll: Can't find dependent libraries
    at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:313)
    at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:294)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1356)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1203)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:556)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:516)
    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:324)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:322)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
    at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1307)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1227)
    at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:884)
    at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:788)
    ... 119 common frames omitted
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.alibaba.nacos.naming.consistency.persistent.impl.PersistentServiceProcessor]: Constructor threw exception; nested exception is java.lang.UnsatisfiedLinkError: C:\Users\Administrator\AppData\Local\Temp\librocksdbjni3732491341899342270.dll: Can't find dependent libraries
    at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:217)
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:117)
    at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:309)
    ... 133 common frames omitted
Caused by: java.lang.UnsatisfiedLinkError: C:\Users\Administrator\AppData\Local\Temp\librocksdbjni3732491341899342270.dll: Can't find dependent libraries
    at java.lang.ClassLoader$NativeLibrary.load(Native Method)
    at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1934)
    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1817)
    at java.lang.Runtime.load0(Runtime.java:809)
    at java.lang.System.load(System.java:1086)
    at org.rocksdb.NativeLibraryLoader.loadLibraryFromJar(NativeLibraryLoader.java:78)
    at org.rocksdb.NativeLibraryLoader.loadLibrary(NativeLibraryLoader.java:56)
    at org.rocksdb.RocksDB.loadLibrary(RocksDB.java:64)
    at org.rocksdb.RocksDB.<clinit>(RocksDB.java:35)
    at com.alipay.sofa.jraft.storage.impl.RocksDBLogStorage.<clinit>(RocksDBLogStorage.java:75)
    at com.alipay.sofa.jraft.core.DefaultJRaftServiceFactory.createLogStorage(DefaultJRaftServiceFactory.java:50)
    at com.alipay.sofa.jraft.core.NodeImpl.initLogStorage(NodeImpl.java:545)
    at com.alipay.sofa.jraft.core.NodeImpl.init(NodeImpl.java:961)
    at com.alipay.sofa.jraft.core.NodeImpl.init(NodeImpl.java:137)
    at com.alipay.sofa.jraft.RaftServiceFactory.createAndInitRaftNode(RaftServiceFactory.java:47)
    at com.alipay.sofa.jraft.RaftGroupService.start(RaftGroupService.java:129)
    at com.alibaba.nacos.core.distributed.raft.JRaftServer.createMultiRaftGroup(JRaftServer.java:267)
    at com.alibaba.nacos.core.distributed.raft.JRaftProtocol.addLogProcessors(JRaftProtocol.java:163)
    at com.alibaba.nacos.naming.consistency.persistent.impl.PersistentServiceProcessor.init(PersistentServiceProcessor.java:149)
    at com.alibaba.nacos.naming.consistency.persistent.impl.PersistentServiceProcessor.<init>(PersistentServiceProcessor.java:143)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:204)
    ... 135 common frames omitted

Desktop (please complete the following information):

Additional context 在上述环境下 nacos 1.4 提示缺少相关依赖dll , 当然在参考 jraft、rocksdb issue 问题得到解决 Microsoft Visual C++ 2015 Redistributable"

https://github.com/facebook/rocksdb/wiki

但问题在其他操作系统 例如 此条 issue 报告:

以上问题是 100%可以复现 ,所以jraft协议取代自实现raft协议,这个对nacos 作为java 中间件的普适性冲击较大。

感觉以上兼容性报告issue,官方没有得到重视,特此提出 欢迎大伙交流哈

lltx commented 3 years ago

https://github.com/facebook/rocksdb/issues/7710

当然在 M1 上也不能正确运行

KomachiSion commented 3 years ago

We can add some description and F&Q in document.

The problem is a dependency problem.

lltx commented 3 years ago

We can add some description and F&Q in document.

The problem is a dependency problem.

可能大家都在 mac 下开发,这个问题影响不大。 但是对于大部分window用户来讲体验并不好,昨天尝试去装 vc++ 2015 好难 ,乱七八糟的依赖 。 window下还有解决方案、arm 或者 M1 就很难搞了、、、、

重构raft 技术选型有待商榷 个人看法

KomachiSion commented 3 years ago

技术选型肯定是向前看,对于旧版本系统有一定的不支持或者依赖包安装是必然的。 M1是因为刚出,系统中有一些非兼容修改很正常,等待更新即可。 window也是普适系统,肯定优先使用更新更好的依赖包来运行,也没有问题。

至于ARM 中标麒麟(龙芯)操作,很抱歉,我们实在不知道还有这么个操作系统,甚至都不知道他是基于什么系统修改的。这种系统没法兼容。

lltx commented 3 years ago

技术选型肯定是向前看,对于就版本系统有一定的不支持或者依赖包安装是必然的。 M1是因为刚出,系统中有一些非兼容修改很正常,等待更新即可。 window也是普适系统,肯定优先使用更新更好的依赖包来运行,也没有问题。

至于ARM 中标麒麟(龙芯)操作,很抱歉,我们实在不知道还有这么个操作系统,甚至都不知道他是基于什么系统修改的。这种系统没法兼容。

arm 啊

lltx commented 3 years ago

window也是普适系统,肯定优先使用更新更好的依赖包来运行,也没有问题。


为啥普适性系统 这么多报告兼容性的问题的?? 现在只有报告的少是因为 SCA 那边还是1.3.X 没有 1.4

lltx commented 3 years ago

我觉着兼容性问题 还是没有得到重视啊 兄弟

KomachiSion commented 3 years ago

那您有什么办法能够解决兼容性吗?

lltx commented 3 years ago

自研的raft 有啥问题?为啥一定要切到sofa 上去 去耦合rocksdb

chuntaojun commented 3 years ago

首先你需要了解nacos自己写的raft,严不严格,是不是标准raft 的实现,在考虑说为什么我们当初要重新对raft选型

lltx commented 3 years ago

首先你需要了解nacos自己写的raft,严不严格,是不是标准raft 的实现,在考虑说为什么我们当初要重新对raft选型

哦,没艾特你把? 严不严格和你兼容性有什么问题?eureka paxos 搞出来兼容性问题了 ?

chuntaojun commented 3 years ago

首先呢,当初nacos自己写的raft是非标准的,没有经过证明的变种Raft实现,因此需要重新实现raft,raft 优秀的实现有很多,这一块当初选型了两款,但是jraft团队的沟通成本低,可以相互演进,因此选择jraft,至于普适性的问题,rocksdb不是强耦合,只是默认的存储而已,如果你需要,你可以参与贡献实现一个具有普适性的存储,或者等待rocksdb的升级或nacos官方对于这一块raft协议log存储的处理。

KomachiSion commented 3 years ago

自研raft存在很多问题,比如不符合raft语意,性能低,数据多启动速度慢等。而且重复造轮子本身就不可取,别人已经有很好的实现了,没有必要再造一次轮子。

至于你说的所谓兼容性问题,其实是大家都不可避免的,软件更新,肯定向着更新更好更标准的方向发展。 解决方法应该考虑是否需要兼容,如果需要兼容怎么推动其兼容,如果推不动,最后再考虑是否绕开。

lltx commented 3 years ago

@KomachiSion @chuntaojun 感谢两位答疑, 此issue 目的是引起官方对兼容性问题的重视, 无论是使用jraft 还是兼容性 最终目标提高终端用户使用体验 。

再次感谢

附 vc++ 2015 下载链接 https://www.microsoft.com/zh-CN/download/details.aspx?id=48145

wgchao16 commented 3 years ago

今天在linux跟windows服务器上搭建集群也碰到了该问题,很头疼,只能在另一台linux服务器上搭建了集群

cqboyone commented 3 years ago

技术选型肯定是向前看,对于旧版本系统有一定的不支持或者依赖包安装是必然的。 M1是因为刚出,系统中有一些非兼容修改很正常,等待更新即可。 window也是普适系统,肯定优先使用更新更好的依赖包来运行,也没有问题。

至于ARM 中标麒麟(龙芯)操作,很抱歉,我们实在不知道还有这么个操作系统,甚至都不知道他是基于什么系统修改的。这种系统没法兼容。

m1处理器运行nacos报错。感觉应该是兼容问题。请问什么时候能做适配呢?

robinZhao commented 3 years ago

当前国内政府和国企国产化改造的趋势下,还是要支持下龙芯吧cpu吧

lishaojie1x1 commented 3 years ago

我在华为鲲鹏920,统信UOS上运行最新版的2.0.0-BETA,nacos启动成功了,1.4.0会报so文件找不到的错,2.0.0-BETA没有报错了,鲲鹏920也是ARM架构的,所以这个问题是修复了吗?

KomachiSion commented 3 years ago

2.0.0-BETA用的是最新的rocksd,应该是rocksdb兼容了arm架构

https://github.com/alibaba/nacos/issues/4309具体看这个pr

plusmancn commented 3 years ago

目前在使用 Apple M1,现在已经能够运行 nacos 服务,分享下一些实践经验。

M1 使用 zulu JDK 编译会碰到如下错误,依赖关系为 nacos -> jraft -> rocksdb5.x,目前最新版的 rocks6.x 系列也暂未支持 M1 架构,但已有大神在尝试编译 mac 通用版本(x86 和 aarch64 通用),最近也有进度,见:https://github.com/facebook/rocksdb/issues/7720

librocksdbjni14096835716120570872.jnilib: mach-o, but wrong architecture

虽然已经有 M1 架构的 rocksdb 民间编译版本:https://bintray.com/maryk/maven/rocksdbjni/6.17.0
但 jraft 依赖的 BloomFilter 在 rocks6.x 系列版本里发生了 Break Change,导致无法使用。

所以想要使用 zulu JDK 运行,还需要等待:

但这并不代表我们就只能干等了,还是有办法继续运行 rocksdb 的,只是要牺牲一些性能罢了:

Nacos 开发者:解决源码运行问题

直接看重点:使用 Oracle JDK 1.8 以上可以成功运行源码
优点:使用的 Rosseta 转译过的 Oracle JDK,几乎没啥兼容问题 缺点:性能回到上代 i5 ~i7 之间水平,启动时间相比 zulu JDK 延长 5 倍左右,但还可接受

Nacos 用户:解决服务运行问题

指定 JAVA_HOME 到 Oracle JDK,再运行官网下载的服务包即可,例如:

# JAVA_HOME 每台机器都不一样,请改成本机路径
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_281.jdk/Contents/Home \
&& sh startup.sh -m standalone

总结

其实,M1 的所有兼容问题,在没有 native 支持的版本出来之前,我们几乎都可以通过 rosseta 解决。 补充个大宝藏: 同时安装 x86 架构的 homebrew 和 arm 架构的 homebrew,保佑你安然渡过 M1 过渡期 TIP | The BEST way to install Homebrew (Brew) on Apple Silicon (M1)

RichZhang888 commented 3 years ago

请问目前解决了吗?或者有没有其他临时解决方案,让nacos能在mac M1环境下运行

MrNiebit commented 3 years ago

nacos 1.4.1 单机是可以运行的,但是集群不能正常运行。。

muyuto commented 3 years ago

技术选型肯定是向前看,对于旧版本系统有一定的不支持或者依赖包安装是必然的。 M1是因为刚出,系统中有一些非兼容修改很正常,等待更新即可。 window也是普适系统,肯定优先使用更新更好的依赖包来运行,也没有问题。 至于ARM 中标麒麟(龙芯)操作,很抱歉,我们实在不知道还有这么个操作系统,甚至都不知道他是基于什么系统修改的。这种系统没法兼容。

m1处理器运行nacos报错。感觉应该是兼容问题。请问什么时候能做适配呢?

有解决办法了么?我用2.0.2的依然不行,无论是源代码跑或者docker跑都是报错

muyuto commented 3 years ago

apple m1 环境下无法启动 java: openjdk version "16.0.1" 2021-04-20 OpenJDK Runtime Environment Zulu16.30+19-CA (build 16.0.1+9) OpenJDK 64-Bit Server VM Zulu16.30+19-CA (build 16.0.1+9, mixed mode)

start.log

muyuto commented 3 years ago

目前在使用 Apple M1,现在已经能够运行 nacos 服务,分享下一些实践经验。

M1 使用 zulu JDK 编译会碰到如下错误,依赖关系为 nacos -> jraft -> rocksdb5.x,目前最新版的 rocks6.x 系列也暂未支持 M1 架构,但已有大神在尝试编译 mac 通用版本(x86 和 aarch64 通用),最近也有进度,见:facebook/rocksdb#7720

librocksdbjni14096835716120570872.jnilib: mach-o, but wrong architecture

虽然已经有 M1 架构的 rocksdb 民间编译版本:https://bintray.com/maryk/maven/rocksdbjni/6.17.0 但 jraft 依赖的 BloomFilter 在 rocks6.x 系列版本里发生了 Break Change,导致无法使用。

所以想要使用 zulu JDK 运行,还需要等待:

  • rocksdb Mac 通用版本发行
  • jraft 升级依赖,修复版本兼容问题

但这并不代表我们就只能干等了,还是有办法继续运行 rocksdb 的,只是要牺牲一些性能罢了:

Nacos 开发者:解决源码运行问题

直接看重点:使用 Oracle JDK 1.8 以上可以成功运行源码 优点:使用的 Rosseta 转译过的 Oracle JDK,几乎没啥兼容问题 缺点:性能回到上代 i5 ~i7 之间水平,启动时间相比 zulu JDK 延长 5 倍左右,但还可接受

Nacos 用户:解决服务运行问题

指定 JAVA_HOME 到 Oracle JDK,再运行官网下载的服务包即可,例如:

# JAVA_HOME 每台机器都不一样,请改成本机路径
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_281.jdk/Contents/Home \
&& sh startup.sh -m standalone

总结

其实,M1 的所有兼容问题,在没有 native 支持的版本出来之前,我们几乎都可以通过 rosseta 解决。 补充个大宝藏: 同时安装 x86 架构的 homebrew 和 arm 架构的 homebrew,保佑你安然渡过 M1 过渡期 TIP | The BEST way to install Homebrew (Brew) on Apple Silicon (M1)

能弄个支持apple m1的docker镜像么?不太想用源码的方式运行,毕竟弄个开发测试环境还是docker的方式简单粗暴一些

yuanzhenjie commented 3 years ago

这个问题到现在解决了么? Mac 10.11.6 (15G22010) java version "1.8.0_271" Nacos 2.0.2 同样出现这个问题。 现在官方推荐哪个版本? org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'instanceOperatorClientImpl' defined in URL [jar:file:/Users/yuanzhenjie/Documents/nacos_2.0.2/target/nacos-server.jar!/BOOT-INF/lib/nacos-naming-2.0.2.jar!/com/alibaba/nacos/naming/core/InstanceOperatorClientImpl.class]: Unsatisfied dependency expressed through constructor parameter 1; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'clientOperationServiceProxy' defined in URL [jar:file:/Users/yuanzhenjie/Documents/nacos_2.0.2/target/nacos-server.jar!/BOOT-INF/lib/nacos-naming-2.0.2.jar!/com/alibaba/nacos/naming/core/v2/service/ClientOperationServiceProxy.class]: Unsatisfied dependency expressed through constructor parameter 1; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'persistentClientOperationServiceImpl' defined in URL [jar:file:/Users/yuanzhenjie/Documents/nacos_2.0.2/target/nacos-server.jar!/BOOT-INF/lib/nacos-naming-2.0.2.jar!/com/alibaba/nacos/naming/core/v2/service/impl/PersistentClientOperationServiceImpl.class]: Bean instantiation via constructor failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.alibaba.nacos.naming.core.v2.service.impl.PersistentClientOperationServiceImpl]: Constructor threw exception; nested exception is java.lang.UnsatisfiedLinkError: /private/var/folders/92/bsksxnkx2pg9h4_y4b9wmlxc0000gn/T/librocksdbjni4744594271744526799.jnilib: dlopen(/private/var/folders/92/bsksxnkx2pg9h4_y4b9wmlxc0000gn/T/librocksdbjni4744594271744526799.jnilib, 1): Symbol not found: __ZdlPvSt11align_val_t Referenced from: /private/var/folders/92/bsksxnkx2pg9h4_y4b9wmlxc0000gn/T/librocksdbjni4744594271744526799.jnilib Expected in: /usr/lib/libc++.1.dylib in /private/var/folders/92/bsksxnkx2pg9h4_y4b9wmlxc0000gn/T/librocksdbjni4744594271744526799.jnilib at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:769) at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:218) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1338) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1185) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:554) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:514) at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:321) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:319) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:866) at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:878) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:550) at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:141) at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:744) at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:391) at org.springframework.boot.SpringApplication.run(SpringApplication.java:312) at org.springframework.boot.SpringApplication.run(SpringApplication.java:1215) at org.springframework.boot.SpringApplication.run(SpringApplication.java:1204) at com.alibaba.nacos.Nacos.main(Nacos.java:35) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:49) at org.springframework.boot.loader.Launcher.launch(Launcher.java:108) at org.springframework.boot.loader.Launcher.launch(Launcher.java:58) at org.springframework.boot.loader.PropertiesLauncher.main(PropertiesLauncher.java:467) @

huie2018 commented 3 years ago

windows server2012 64位+英特尔E5-2690 v3+ oracle JDK1.8.161 64位都兼容不了,虽然是开源但还是忍不住想爆粗口

bugushi commented 2 years ago

m1 mac 现在还是启动失败

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'instanceOperatorClientImpl' defined in URL [jar:file:/Users/huj/Downloads/nacos/target/nacos-server.jar!/BOOT-INF/lib/nacos-naming-2.0.3.jar!/com/alibaba/nacos/naming/core/InstanceOperatorClientImpl.class]: Unsatisfied dependency expressed through constructor parameter 1; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'clientOperationServiceProxy' defined in URL [jar:file:/Users/huj/Downloads/nacos/target/nacos-server.jar!/BOOT-INF/lib/nacos-naming-2.0.3.jar!/com/alibaba/nacos/naming/core/v2/service/ClientOperationServiceProxy.class]: Unsatisfied dependency expressed through constructor parameter 1; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'persistentClientOperationServiceImpl' defined in URL [jar:file:/Users/huj/Downloads/nacos/target/nacos-server.jar!/BOOT-INF/lib/nacos-naming-2.0.3.jar!/com/alibaba/nacos/naming/core/v2/service/impl/PersistentClientOperationServiceImpl.class]: Bean instantiation via constructor failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.alibaba.nacos.naming.core.v2.service.impl.PersistentClientOperationServiceImpl]: Constructor threw exception; nested exception is java.lang.UnsatisfiedLinkError: /private/var/folders/86/6mdh4bxn6q7c2xjr1dtcddt00000gp/T/librocksdbjni8446964897998039040.jnilib: dlopen(/private/var/folders/86/6mdh4bxn6q7c2xjr1dtcddt00000gp/T/librocksdbjni8446964897998039040.jnilib, 1): no suitable image found.  Did find:
    /private/var/folders/86/6mdh4bxn6q7c2xjr1dtcddt00000gp/T/librocksdbjni8446964897998039040.jnilib: mach-o, but wrong architecture
    /private/var/folders/86/6mdh4bxn6q7c2xjr1dtcddt00000gp/T/librocksdbjni8446964897998039040.jnilib: mach-o, but wrong architecture
    at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:769)
    at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:218)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1338)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1185)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:554)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:514)
    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:321)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:319)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:866)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:878)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:550)
    at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:141)
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:744)
Keegan-y commented 2 years ago
docker pull zhusaidong/nacos-server-m1:2.0.3
docker run --name nacos-standalone -e MODE=standalone -e JVM_XMS=512m -e JVM_XMX=512m -e JVM_XMN=256m -p 8848:8848 -d zhusaidong/nacos-server-m1:2.0.3

That solved my problem.

vb637 commented 2 years ago

现在mac m1是 1.4能兼容 2.3不能兼容吗,我2.3一运行就会报错

felismargarita commented 2 years ago

好像不少人遇到了nacos在m1上的启动问题,我本人是在docker下用自己封装一步步搞定的,如果真的有人需要的话,我可以封装一个镜像给大家使用。

yoyo837 commented 2 years ago

RocksDB 6.29.4.1/7.0.3 has been released to Maven Central which should now work on M1 macs.

fudy commented 2 years ago

系统: macos 10.13.6 nacos版本: 2.1.0 现象:通过sh startup.sh -m standaone启动后,控制台(localhost:8848/nacos)打不开 报错: ==> start.out <== dyld: lazy symbol binding failed: Symbol not found: ____chkstk_darwin Referenced from: /private/var/folders/qp/3wjqwfpx68sfy1tm8wf8pxtr0000gn/T/librocksdbjni8357728138471088310.jnilib (which was built for Mac OS X 10.15) Expected in: /usr/lib/libSystem.B.dylib

dyld: Symbol not found: ____chkstk_darwin Referenced from: /private/var/folders/qp/3wjqwfpx68sfy1tm8wf8pxtr0000gn/T/librocksdbjni8357728138471088310.jnilib (which was built for Mac OS X 10.15) Expected in: /usr/lib/libSystem.B.dylib

zhouwencn commented 2 years ago

mac studio使用nacos遇到了同样的问题,使用命令好运行命令似乎是ok的,但是访问localhost:8848/nacos访问不了,查看start.out和nacos.log是启动失败了,有没有什么解决办法啊

janeshi commented 2 years ago

macpro 2015, intel i7, nacos 2.x 版本,启动报错类似,8848无法访问。切换回1.4.x版本,可启动可访问。 java1.8, java17都试过了。情况一样。

错误信息如下: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'instanceOperatorClientImpl' defined in URL [jar:file:/Volumes/Documents/outservice/server/nacos-2.1.0/target/nacos-server.jar!/BOOT-INF/lib/nacos-naming-2.1.0.jar!/com/alibaba/nacos/naming/core/InstanceOperatorClientImpl.class]: Unsatisfied dependency expressed through constructor parameter 1; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'clientOperationServiceProxy' defined in URL [jar:file:/Volumes/Documents/outservice/server/nacos-2.1.0/target/nacos-server.jar!/BOOT-INF/lib/nacos-naming-2.1.0.jar!/com/alibaba/nacos/naming/core/v2/service/ClientOperationServiceProxy.class]: Unsatisfied dependency expressed through constructor parameter 1; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'persistentClientOperationServiceImpl' defined in URL [jar:file:/Volumes/Documents/outservice/server/nacos-2.1.0/target/nacos-server.jar!/BOOT-INF/lib/nacos-naming-2.1.0.jar!/com/alibaba/nacos/naming/core/v2/service/impl/PersistentClientOperationServiceImpl.class]: Bean instantiation via constructor failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.alibaba.nacos.naming.core.v2.service.impl.PersistentClientOperationServiceImpl]: Constructor threw exception; nested exception is java.lang.UnsatisfiedLinkError: /private/var/folders/zv/7gjx57rj18l296hd4k9x9n580000gn/T/librocksdbjni7710103533220566425.jnilib: dlopen(/private/var/folders/zv/7gjx57rj18l296hd4k9x9n580000gn/T/librocksdbjni7710103533220566425.jnilib, 1): Symbol not found: ZdlPvSt11align_val_t Referenced from: /private/var/folders/zv/7gjx57rj18l296hd4k9x9n580000gn/T/librocksdbjni7710103533220566425.jnilib Expected in: /usr/lib/libc++.1.dylib in /private/var/folders/zv/7gjx57rj18l296hd4k9x9n580000gn/T/librocksdbjni7710103533220566425.jnilib at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:769) at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:218) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1338) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1185) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:554) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:514) at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:321) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:319) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:866) at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:878) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:550) at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:141) at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:744) at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:391) at org.springframework.boot.SpringApplication.run(SpringApplication.java:312) at org.springframework.boot.SpringApplication.run(SpringApplication.java:1215) at org.springframework.boot.SpringApplication.run(SpringApplication.java:1204) at com.alibaba.nacos.Nacos.main(Nacos.java:35) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:568) at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:49) at org.springframework.boot.loader.Launcher.launch(Launcher.java:108) at org.springframework.boot.loader.Launcher.launch(Launcher.java:58) at org.springframework.boot.loader.PropertiesLauncher.main(PropertiesLauncher.java:467) Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'clientOperationServiceProxy' defined in URL [jar:file:/Volumes/Documents/outservice/server/nacos-2.1.0/target/nacos-server.jar!/BOOT-INF/lib/nacos-naming-2.1.0.jar!/com/alibaba/nacos/naming/core/v2/service/ClientOperationServiceProxy.class]: Unsatisfied dependency expressed through constructor parameter 1; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'persistentClientOperationServiceImpl' defined in URL [jar:file:/Volumes/Documents/outservice/server/nacos-2.1.0/target/nacos-server.jar!/BOOT-INF/lib/nacos-naming-2.1.0.jar!/com/alibaba/nacos/naming/core/v2/service/impl/PersistentClientOperationServiceImpl.class]: Bean instantiation via constructor failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.alibaba.nacos.naming.core.v2.service.impl.PersistentClientOperationServiceImpl]: Constructor threw exception; nested exception is java.lang.UnsatisfiedLinkError: /private/var/folders/zv/7gjx57rj18l296hd4k9x9n580000gn/T/librocksdbjni7710103533220566425.jnilib: dlopen(/private/var/folders/zv/7gjx57rj18l296hd4k9x9n580000gn/T/librocksdbjni7710103533220566425.jnilib, 1): Symbol not found: ZdlPvSt11align_val_t Referenced from: /private/var/folders/zv/7gjx57rj18l296hd4k9x9n580000gn/T/librocksdbjni7710103533220566425.jnilib Expected in: /usr/lib/libc++.1.dylib in /private/var/folders/zv/7gjx57rj18l296hd4k9x9n580000gn/T/librocksdbjni7710103533220566425.jnilib

可否有解决方案?

qiyong88 commented 2 years ago

目前在使用 Apple M1,现在已经能够运行 nacos 服务,分享下一些实践经验。 M1 使用 zulu JDK 编译会碰到如下错误,依赖关系为 nacos -> jraft -> rocksdb5.x,目前最新版的 rocks6.x 系列也暂未支持 M1 架构,但已有大神在尝试编译 mac 通用版本(x86 和 aarch64 通用),最近也有进度,见:facebook/rocksdb#7720

librocksdbjni14096835716120570872.jnilib: mach-o, but wrong architecture

虽然已经有 M1 架构的 rocksdb 民间编译版本:https://bintray.com/maryk/maven/rocksdbjni/6.17.0 但 jraft 依赖的 BloomFilter 在 rocks6.x 系列版本里发生了 Break Change,导致无法使用。 所以想要使用 zulu JDK 运行,还需要等待:

  • rocksdb Mac 通用版本发行
  • jraft 升级依赖,修复版本兼容问题

但这并不代表我们就只能干等了,还是有办法继续运行 rocksdb 的,只是要牺牲一些性能罢了:

Nacos 开发者:解决源码运行问题

直接看重点:使用 Oracle JDK 1.8 以上可以成功运行源码 优点:使用的 Rosseta 转译过的 Oracle JDK,几乎没啥兼容问题 缺点:性能回到上代 i5 ~i7 之间水平,启动时间相比 zulu JDK 延长 5 倍左右,但还可接受

Nacos 用户:解决服务运行问题

指定 JAVA_HOME 到 Oracle JDK,再运行官网下载的服务包即可,例如:

# JAVA_HOME 每台机器都不一样,请改成本机路径
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_281.jdk/Contents/Home \
&& sh startup.sh -m standalone

总结

其实,M1 的所有兼容问题,在没有 native 支持的版本出来之前,我们几乎都可以通过 rosseta 解决。 补充个大宝藏: 同时安装 x86 架构的 homebrew 和 arm 架构的 homebrew,保佑你安然渡过 M1 过渡期 TIP | The BEST way to install Homebrew (Brew) on Apple Silicon (M1)

能弄个支持apple m1的docker镜像么?不太想用源码的方式运行,毕竟弄个开发测试环境还是docker的方式简单粗暴一些

请问现在nacos可以兼容M1了吗?

54853315 commented 2 years ago

同样好奇M1啥时候可以正常运作,2.1.0的bin无法运行、编译安装失败、nacos-docker启动报错。

使用的是brew安装的openjdk18。

54853315 commented 2 years ago

解决了!

看了大佬的reply里的https://hub.docker.com/r/zhusaidong/nacos-server-m1镜像描述 :

image

于是下载了最新2.1.0的nacos-docker,尝试后有效果,可以使用最新的nacos2.1.0了!

这里并不需要像上面截图那样修改FROM里的镜像为8.x版本,否则会yum报错。

直接进行docker build即可,这里主要是利用了Docker今年Relaese的 arm support。arm打包的镜像,只有arm可以运行。


步骤

git clone https://github.com/nacos-group/nacos-docker.git
cd nacos-docker/build
docker build -t my-nacos-server:centos7 .

修改/example/standalone-derby.yaml 中的镜像为image: my-nacos-server:centos7

docker-compose -f example/standalone-derby.yaml up

附上成功截图: Docker Build:

image image
22GNUs commented 1 year ago

M1多版本jdk共存也可以考虑用 sdkman

可以参考这个配置 How to install x86 and Arm JDKs on the Mac M1 (Apple Silicon) using SDKMAN

不过sdkman默认看不出来是arm还是x86,可以把兼容rosetta跟不兼容两种模式都打开,然后用diff工具看下哪个jdk支持x86

比如 8.0.332.fx-librca 这个版本自己测试下来是可以的

Huangbinghui commented 1 year ago

然而现在2023年了m1还没支持。

BR-Liu commented 1 year ago

oh my god

techwn commented 1 year ago

哈哈,M1都出来18个月了,还没有适配。难道逼我用1.4.2?

Sandaman2015 commented 1 year ago

arm这架构估计得等到我退休才能很好的适配

amendgit commented 1 year ago

我是M1,用这个跑成功了,不知道有没有帮助。

https://github.com/alibaba/nacos/issues/9286#issuecomment-1471944998

tangzhi1996 commented 1 year ago

arm这架构估计得等到我退休才能很好的适配

我也很伤心,我也遇到了

amendgit commented 1 year ago

23年4月了,macos m1上有办法绕过去吗?

yoyo837 commented 1 year ago

23年4月了,macos m1上有办法绕过去吗?

我自己在m1用nacos2可以

yoyo837 commented 9 months ago

用 1.8 361的x86版本在arm上可以跑, 391的x86_64无法安装, 只能安装arm的, 但arm又不能跑nacos.

yoyo837 commented 8 months ago

经验证 Nacos 2.2.4 已经可以直接运行在 ARM 平台的JDK下了。rocksdbjni 从 6.29.3 支持 ARM,Nacos 2.2.4 内置 rocksdbjni-7.7.3.jar。

Kevinboy2020 commented 5 months ago

当前我们在中科麒麟也遇到了同样的问题?是否解决了呢

image

我看这个close了,是重复,还是解决了,谢谢