一、部署
编译安装nacos失败提示缺少龙芯架构安装包
docker启动nacos失败,龙芯官方镜像仓库中镜像在openEuler中都无法启动
采用从docker容器中拷贝nacos 然后在宿主机启动,nacos版本为2.2.3
安装docker
yum -y install docker
使用cat启动nacos
docker run -itd --name=test --entrypoint="cat" cr.loongnix.cn/nacos/nacos-server:2.2.3
拷贝nacos
[root@cn-loongarch64-195-11 rocksdb-7.8.3]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8faf078954b0 cr.loongnix.cn/nacos/nacos-server:2.2.3 "cat" 2 seconds ago Up 1 second 8848/tcp test
[root@cn-loongarch64-195-11 rocksdb-7.8.3]# docker inspect test|grep Merge
"MergedDir": "/var/lib/docker/overlay2/8f0959fff851a7f74af9157fa8cf072c7a1b6ae367fc3223a43f665e42e04771/merged",
[root@cn-loongarch64-195-11 rocksdb-7.8.3]# cp /var/lib/docker/overlay2/8f0959fff851a7f74af9157fa8cf072c7a1b6ae367fc3223a43f665e42e04771/merged/home/nacos /data/servers/
启动nacos 报错如下 提示无法找到librocksdbjni2790874277509933911.so
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'clientOperationServiceProxy' defined in URL [jar:file:/data/servers/nacos/target/nacos-server.jar!/BOOT-INF/lib/nacos-naming-2.2.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:/data/servers/nacos/target/nacos-server.jar!/BOOT-INF/lib/nacos-naming-2.2.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: /tmp/librocksdbjni2790874277509933911.so: /tmp/librocksdbjni2790874277509933911.so: failed to map segment from shared object
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:800)
at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:229)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1372)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1222)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1391)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311)
at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:887)
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:791)
... 27 common frames omitted
编译安装rocksdb
选择和nacos版本发布时间对应的rocksdb
https://github.com/facebook/rocksdb/releases/tag/v7.8.3
tar -xf rocksdb-7.8.3.tar
cd /data/servers/rocksdb-7.8.3
修改CMakeLists.txt 参考文档:https://blog.csdn.net/peihexian/article/details/125631949
数字为行号
第一处配置
在下面这个配置下新增两行
原配置
47 if(POLICY CMP0042)
48 cmake_policy(SET CMP0042 NEW)
49 endif()
新配置
if(POLICY CMP0042)
cmake_policy(SET CMP0042 NEW)
endif()
set(CMAKE_VERBOSE_MAKEFILE ON)
set(CMAKE_BUILD_TYPE,"Release")
第二处配置
这里的
69 option(WITH_SNAPPY "build with SNAPPY" OFF)
70 option(WITH_LZ4 "build with lz4" OFF)
71 option(WITH_ZLIB "build with zlib" OFF)
72 option(WITH_ZSTD "build with zstd" OFF)
全部改为ON
option(WITH_SNAPPY "build with SNAPPY" ON)
option(WITH_LZ4 "build with lz4" ON)
option(WITH_ZLIB "build with zlib" ON)
option(WITH_ZSTD "build with zstd" ON)
第三处配置
280 else()
281 if(CMAKE_SYSTEM_PROCESSOR MATCHES "^s390x" AND NOT HAS_S390X_MARCH_NATIVE)
282 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=z196")
283 elseif(NOT CMAKE_SYSTEM_PROCESSOR MATCHES "^(powerpc|ppc)64" AND NOT HAS_ARMV8_CRC)
284 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=native")
285 endif()
286 endif()
287 endif()
修改了native 并新增了一行
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=loongarch64 -Os -Wall -s")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Os -Wall -s")
修改为
else()
if(CMAKE_SYSTEM_PROCESSOR MATCHES "^s390x" AND NOT HAS_S390X_MARCH_NATIVE)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=z196")
elseif(NOT CMAKE_SYSTEM_PROCESSOR MATCHES "^(powerpc|ppc)64" AND NOT HAS_ARMV8_CRC)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=loongarch64 -Os -Wall -s")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Os -Wall -s")
endif()
endif()
endif()
第四处配置文件为vim /data/servers/rocksdb-7.8.3/utilities/transactions/lock/range/range_tree/lib/portability/toku_time.h原配置#elif defined(__riscv) && __riscv_xlen == 32
uint32_t cycles_lo, cycles_hi0, cycles_hi1;
// Implemented in assembly because Clang insisted on branching.
asm volatile(
"rdcycleh %0\n"
"rdcycle %1\n"
"rdcycleh %2\n"
"sub %0, %0, %2\n"
"seqz %0, %0\n"
"sub %0, zero, %0\n"
"and %1, %1, %0\n"
: "=r"(cycles_hi0), "=r"(cycles_lo), "=r"(cycles_hi1));
return (static_cast<uint64_t>(cycles_hi1) << 32) | cycles_lo;
elif defined(__riscv) && __riscv_xlen == 64
uint64_t cycles;
asm volatile("rdcycle %0" : "=r"(cycles));
return cycles;
else
error No timer implementation for this platform
endif
}
新增配置#elif defined(loongarch)
struct timeval tv;
gettimeofday(&tv,NULL);
return tv.tv_sec*(uint64_t)1000000+tv.tv_usec;
完整如下
elif defined(__riscv) && __riscv_xlen == 32
uint32_t cycles_lo, cycles_hi0, cycles_hi1;
// Implemented in assembly because Clang insisted on branching.
asm volatile(
"rdcycleh %0\n"
"rdcycle %1\n"
"rdcycleh %2\n"
"sub %0, %0, %2\n"
"seqz %0, %0\n"
"sub %0, zero, %0\n"
"and %1, %1, %0\n"
: "=r"(cycles_hi0), "=r"(cycles_lo), "=r"(cycles_hi1));
return (static_cast<uint64_t>(cycles_hi1) << 32) | cycles_lo;
elif defined(__riscv) && __riscv_xlen == 64
uint64_t cycles;
asm volatile("rdcycle %0" : "=r"(cycles));
return cycles;
elif defined(loongarch)
struct timeval tv;
gettimeofday(&tv,NULL);
return tv.tv_sec*(uint64_t)1000000+tv.tv_usec;
else
error No timer implementation for this platform
endif
}
下载对应依赖 开始安装
yum -y install snappy-devel zstd-devel gflags-devel lz4-devel
编译安装rocksdb
cd /data/servers/rocksdb-7.8.3
mkdir build && cd build
cmake ..
make -j$(nproc)
make install
编译安装jni
cd /data/servers/rocksdb-7.8.3
PORTABLE=1 DEBUG_LEVEL=0 make -j8 rocksdbjava DISABLE_WARNING_AS_ERROR=1
安装完成之后
mkdir /data/servers/nacos/lib
cp /data/servers/rocksdb-7.8.3/java/target/librocksdbjni-linux64.so /data/servers/nacos/lib/librocksdbjni-linux64.so
启动服务
修改naocs启动脚本
/data/servers/nacos/bin/startup.sh
添加
!/bin/bash
export LD_LIBRARY_PATH=/data/servers/nacos/lib
启动nacos
cd /data/servers/nacos/nacos
[root@cn-loongarch64-195-11 bin]# cd bin/
[root@cn-loongarch64-195-11 bin]# ls
shutdown.cmd shutdown.sh startup.cmd startup.sh
[root@cn-loongarch64-195-11 bin]# ./startup.sh -m standalone
二、测试
浏览器访问ip+8848端口。
