文章目录

一、概述

二、安装相关组件

三、下载最新的Tendis源码

四、编译源码

五、启动Tendis

六、使用Docker镜像部署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
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐