ARM架构服务器/虚拟机编译部署Tendis(国产化替换Redis)
国产化项目要求尽可能使用国产组件,尤其是已存在的项目,需要替换已有组件,比如使用Tendis替换Redis。国产化环境是基于华为OpenEuler 22.03 (LTS-SP1)操作系统 + 华为鯤鹏920 aarch64芯片。但是,无论是Tendis官网,还是DockerHub,均未提供基于ARM64编译的可执行文件/镜像。所以,需要手动编译适配国产化操作系统和国产化芯片的Tendis源码,便于
文章目录
一、概述
- 国产化项目要求尽可能使用国产组件,尤其是已存在的项目,需要替换已有组件,比如使用Tendis替换Redis。
- 本文部署环境是基于华为OpenEuler 22.03 (LTS-SP1)操作系统 + 华为鯤鹏920 aarch64芯片。
- 目前,无论是Tendis官网还是DockerHub,均未提供基于ARM64编译的可执行文件/镜像。
- 所以,需要手动编译适配国产化操作系统和国产化芯片的Tendis源码,便于后续项目引入。
注意:
编译时,为了避免文件权限问题,建议系统登录时,统一使用root账号。
二、安装相关组件
##安装组件
[root@localhost ~]# yum install -y gcc g++ cmake git autoconf libstdc*
##验证组件是否安装成功,能显示版本号即表示安装成功
[root@localhost ~]# gcc -v
[root@localhost ~]# g++ -v
[root@localhost ~]# cmake -version
三、下载最新的Tendis源码
##进入/data目录
[root@localhost ~]# cd /data
##配置git
[root@localhost data]# git config --global user.name "zhangsan";
[root@localhost data]# git config --global user.email "zhangsan@126.com";
##下载源码
[root@localhost data]# git clone -b 2.7.0-rocksdb-v8.5.3 https://github.com/Tencent/Tendis.git --recursive;
##进入源码目录
[root@localhost data]# cd Tendis
##切换到clone分支
[root@localhost Tendis]# git submodule update --init --recursive;
[root@localhost Tendis]# git stash && git checkout 2.7.0-rocksdb-v8.5.3;
四、编译源码
##创建编译目录
[root@localhost Tendis]# mkdir build
##进入编译目录
[root@localhost Tendis]# cd build
##编译
[root@localhost build]# cmake ../
[root@localhost build]# make -j16
五、启动Tendis
##进入Tendis目录
[root@localhost build]# cd /home/data/Tendis/
##修改配置文件
#1)添加bind字段绑定IP
#2)添加requirepass字段配置连接密码
[root@localhost Tendis]# vi tendisplus.conf
port 51002
bind 192.168.112.61
daemon on
loglevel notice
requirepass 123456
logdir ./home/log
dumpdir ./home/dump
dir ./home/db
pidfile ./home/tendisplus.pid
slowlog ./home/log/slowlog
rocks.blockcachemb 4096
executorThreadNum 48
##创建Tendis数据目录
[root@localhost Tendis]# mkdir -p home/db
##启动Tendis进程
[root@localhost Tendis]# build/bin/tendisplus tendisplus.conf
说明:
- 启动Tendis后,使用netstat -lntp命令可以看到端口为51002的Tendis进程
- 启动Tendis后,可以使用redis-cli命令(如:redis-cli -h 192.168.112.61 -p 51002)或Redis客户端工具(如:Navicat premium lite或Another Redis Desktop Manager)来连接
- SpringBoot 集成Tendis与集成Redis的配置一样,不需要更改,只需要更改成Tendis的端口和密码即可
六、使用Docker镜像部署Tendis
说明:
目前,Tendis官网未提供基于ARM64编译的镜像。这里我们使用非官方编译的xrds1949/tendisplus:2.4.2镜像。
##创建文件夹
[root@localhost ~]# mkdir -p /data/docker/tendis/conf
##运行Tendis容器
[root@localhost ~]# docker run --name 容器名 -p 51002:51002 \
-v /etc/localtime:/etc/localtime \
-v /data/docker/tendis/log:/data1/tendis/51002/log \
-v /data/docker/tendis/data:/data1/tendis/51002/db \
-e REDIS_PASSWORD=密码 --restart=always -d xrds1949/tendisplus:2.4.2
七、常见报错
1、报错一:
/data/Tendis/src/tendisplus/utils/base64.cpp:58:39: error: narrowing conversion of ‘-2’ from ‘int’ to ‘char’ [-Wnarrowing]
/data/Tendis/src/tendisplus/utils/base64.cpp:71:12: error: comparison is always false due to limited range of data type [-Werror=type-limits]
71 | if (ch < 0) {
| ~~~^~~
cc1plus: some warnings being treated as errors
这是由于GCC版本过高导致,需要修改编译参数。具体如下:
[root@localhost build]# vi ../CMakeLists.txt
#-Werror=type-limits改成-Wno-error=type-limits
#-Werror=parentheses改成Wno-error=parentheses
#新增如下三行
-Wno-error=class-memaccess \
-Wno-error=narrowing \
-Wno-error=format-truncation \
修改后,如下图所示:
修改完成后,在build目录下重新执行make -j16命令,之前报错的部分修改后会变成warning。
2、报错二:
c++: error: unrecognized command-line option ‘-mno-avx’
c++: error: unrecognized command-line option ‘-mno-avx2’
make[2]: *** [src/tendisplus/tools/CMakeFiles/ldb_tendis.dir/build.make:108: bin/ldb_tendis] Error 1
make[1]: *** [CMakeFiles/Makefile2:4742: src/tendisplus/tools/CMakeFiles/ldb_tendis.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
原因也是gcc的一些参数在低版本有效,但是在高版本里就无效了。
修改src/tendisplus/tools/CMakeFiles/ldb_tendis.dir/link.txt文件 (build目录下)
[root@localhost build]# vi src/tendisplus/tools/CMakeFiles/ldb_tendis.dir/link.txt
删除"-mno-avx -mno-avx2",改为"-march=native"
修改前
修改后
再次执行make -j16
3、报错三:
fatal error: error writing to /tmp/ccHqgMoi.s: No space left on device
原因:
系统 /tmp/空间不足,tmp文件夹空间不足了,不能满足编译的需求,编译的中间文件不能写入。
df -h查看发现才1M大小
解决办法 :
1.任选位置 创建一个文件夹,例如:mkdir /home/tmp
2.设置环境变量:
vi ~/.bashrc
export TMPDIR=/home/tmp
3.编辑完成后执行:
source ~/.bashrc
再次执行make -j16就可以了
八、参考链接
- Tendis官网:http://tendis.cn/
- 基于统信UOS+鯤鹏ARM64 CPU编译Tendis:https://www.jianshu.com/p/a955db13e568
- 腾讯 Tendis v2.1 分布式存储系统教程:https://www.bookstack.cn/read/tendis-2.1-zh/ae53125ea40ae410.md
- 腾讯 tendis 替代 redis linux安装使用:https://blog.csdn.net/weixin_41018853/article/details/137142954
更多推荐
所有评论(0)