前言
在学习过程中,上一篇文章了解了ES如何安装和使用,那么接下来我们就得用起来,最简单的方式就是用现有的开源项目去实战以下,那么pg生态的zombodb就是一个非常合适的实战用例,接下来我们来介绍一下他的安装使用方式。
依然是linux系统
在前言后面
我们在安装zombodb时需要了解一些基础的知识,zombodb是pgrx框架设计主要相关负责人进行设计开发的,因此其使用rust语言编写,目前,zombodb扩展了pg使用elasticsearch中的内容,我们在这篇文章中,使用zombodb的版本为3000.1.25,其支持的pg版本为11.x-15.x。zombodb依赖的环境项较多主要为:
- RUST编译链
- PG数据库(包括-server包)
- PG工具链
- cargo-pgrx框架
- 64位intel框架
环境配置
在我们编译安装前,可以先在系统中检查一下是否存在相关的环境配置:
lsb_release -a
gcc --version
clang --version
ldd --version
cargo --version
通过以上命令,我们可以查看当前的系统版本,,gcc版本,clang版本以及rust框架的相关信息。
GCC配置:
我们在安装过程中可能会遇到gcc版本较低的问题,一般是由于系统携带的gcc版本低,那么我们就需要对应的审计gcc版本,这里提供一个离线安装的方式吧,因为联网安装应该是没什么难度的,那么我们首先先下载gcc离线安装包gcc-8.5.0.tar.gz
那么我们执行命令解压gcc安装包并进入解压后的目录
tar -zxvf gcc-8.5.0.tar.gz
cd gcc-8.5.0
由于不同的版本gcc所需要的依赖库不同,因此我们需要具体进入gcc的源码文件夹内进行查看:
vi contrib/download_prerequisites
例如:在gcc-8.5.0的依赖包中有以下内容:
- gmp='gmp-6.1.0.tar.bz2'
- mpfr='mpfr-3.1.4.tar.bz2'
- mpc='mpc-1.0.3.tar.gz'
- isl='isl-0.18.tar.bz2'
我们需要手动下载上述依赖包至gcc的源码目录文件夹下,并需要在gcc的源码文件夹下执行:
./contrib/download_prerequisites 命令来check依赖项
之后我们就直接进入到gcc的源码文件夹下,创建一个build文件并进入该文件夹内:
../configure --prefix=/opt/gcc-8.5.0 --enable-languages=c,c++ --disable-multilib
在上述命令中,我们指定了gcc的安装位置,制定了gcc的支持语言以及不生成交叉编译器;
之后就会生成makefile,我们直接执行make &&make install 进行安装,由于我们安装的位置是opt目录因此会替换原有的gcc,在安装完成后,我们使用一下的命令来检查动态库:
Strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX
如果gcc的动态连接库依然是旧版本的,那么我们就先将生成好的最新的动态库赋值到usr/lib64目录下,并利用 ln -s 软连接的方式来替换动态连接库,在完成这些后同样需要将新版本的gcc的bin目录放在$PATH下:
1 添加bin目录
export $PATH=/opt/gcc-8.5.0/bin:$PATH
2 修改系统的gcc的软连接
rm -rf gcc
rm -rf cc
/*上面是删除原有的软连接,具体需要自己去寻找软连接的名称*/
ln -s /opt/gcc-8.5.0/bin/gcc gcc
ln -s /opt/gcc-8.5.0/bin/cc cc
在配置完成gcc后,我们需要继续配置cmake来对项目进行构建:
CMAKE配置:
可以去cmake的官方网站(CMake - Upgrade Your Software Build System)去查找版本,这里使用3.28.0来做实验:
使用cmake仓库进行安装:
直接执行:
sudo apt install cmake
使用二进制版本:
1 去官网下载cmake-3.28.0-linux-x86_64.tar.gz
2 然后执行解压:
tar -zxvf cmake-3.28.0-linux-x86_64.tar.gz
cd cmake-3.28.0-linux-x86_64/bin
3 添加软连接:
sudo ln -s make-3.28.0-linux-x86_64/bin/cmake
手动源码编译版:
同样的需要去官方网站下载对应的版本之后执行解压并进入解压目录:
配置:
./bootstrap --prefix=/path/
自行配置安装路径
make -j && make install
添加别名:
vi ~/.bash_aliases
alias cmake=/usr/local/username/cmake/bin/cmake
:wq
source ~/.bash_aliases
检查cmake版本:
cmake --version
完成cmake的配置后就需要进一步配置clang,主要是llvm的一些编译工具链:
CLANG配置:
clang是llvm下的编译链工具的一部分,因此我们直接安装llvm就可以;
配置llvm:
那么clang配置转变为llvm配置了,就需要了解llvm的前置需要条件是哪些,主要依赖make与cmake;
make安装:
sudo apt install make
cmake的安装已经在上面描述过了,那么这里就不在讲了,这里实战安装的llvm版本为llvm-project-11.0.0,可以直接去官网(https://github.com/llvm/llvm-project)下载仓库或者去(Download LLVM releases)直接下载llvm-project-11.0.0.tar.xz。
编译安装llvm
给安装目录先创建一个build文件夹,一般的项目构建都不允许在源码目录下进行安装
mkdir build
cd build
开启bpftrac(可选):llvm-config --has-rtti
使用cmake开始构建项目:
cmake -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_RTTI=ON -DLLVM_ENABLE_PROJECTS="clang;libcxx;libcxxabi" -G "Unix Makefile" ../llvm
在build目录下生成makefile后执行make(上面这部分时间较长)
make
make install
安装完成后检查clang: clang --verison
RUST配置:
接下来就是我们的重头戏,在上面我们花费了大量精力去安装前置条件,那么我们后续就需要安装主体框架rust,由于zombodb的要求,因此我们需要安装rust版本需要 >=1.64(实战使用1.73版本)
安装的前置要求:
Glibc>=2.17,根据我们上面的gcc升级以后,最高可达到2.35版本;
gcc>=7.0
官网安装:
官网安装版本,我使用的是ubuntu,所以直接使用apt-install即可
sudo apt-get update -y
sudo apt install -y curl wget vim build-essential
curl -proto '=https' --tlsv1.2 -sSf http://sh.rustup.rs | sh
手动编译安装:
可能有小伙伴不能直接使用外部配置rust,那么我在这里也提供了手动安装的方式:
- 那么首先依然是需要先去rust官网(Rust 程序设计语言 (rust-lang.org))去下载对应的版本
-
依然是老三样: mkdir rust cd rust tar -zxvf rust-1.73.0-x86_64-unknown-linux-gun.tar.gz cd rust-1.73.0-x86_64-unknown-linux-gun 先查看一下他的安装指南 ./install.sh --help 之后继续 mkdir ~/rustlang ./install.sh --destdir=~/rustlang 在安装完成后,还需要处理一下环境变量: export PATH=/绝对路径/rustlang/usr/local/bin:$PATH 完成后,查看一下rust有没有安装成功,cargo是rust框架的一部分,因此也需要同样查看: cargo --verison rustc --version
需要注意的是,因为第二种方式是对rust的源码编译安装方式,那么就不具备rustup指令;
-
tips:如果在安装过程中遇到了有关openssl依赖的问题:failed to run custom build command for 'openssl-xxxxx'这样的问题可以通过安装libssl-dev或openssl-devel来处理;
这里提供了不同系统需要的命令供参考
1.
apt install pkg-config
2.
yum install pkg-config
3.
pkg install pkg-config
4.
apk add pkg-config
配置PG:
那么在完成上述这些内容后,zombodb “芝士” 强大pg的一个插件而已,那么我们同样需要准备pg的环境,由于pg的使用率过于广泛,这里就不在叙述了,主要使用的是server端的内容,依赖pg内核的一些内容,pg_config这类型的工具来获取pg的一些路径,安装的话有二进制安装包或者仓库安装,都很便捷方便。
cargo-pgrx配置:
cargo-pgrx框架的版本是由zombodb指定的,因此如果要安装的话,最好去zombodb的官网下寻找一下,这里的话使用cargo-pgrx 0.9.8,这个是实战版本所要求的。
前置环境要求:
gcc >=7.0
clang >=5.0
这里依然介绍的是手动配置方法:
在外面配置号rust后,将pgrx开源社区的代码下载下来,并在源码目录下执行
cargo vendor 或者 cargo vendor --respect-source-config
这条命令可以将pgrx框架的依赖项提前下载下来,这样我们在后续的安装过程中就不需要再配置cargo-pgrx的框架依赖项了;在执行上述命令时,rust会提示要修改config文件,我们进入代码目录的.cargo文件夹下或者直接执行:
vi .cargo/config
在config文件中新增以下语句:
[source.crates-io]
replace-with = "vendored-sources"
[source.vendored-sources]
directory = "vendor"
之后我们直接在pgrx的目录下直接执行:
因为我们已经下载了所以的依赖项了所以直接执行--offline即可
cargo install --path . --offline
在安装完成后查看pgrx的版本
cargo pgrx --version
在所有的配置完成后,终于到了最后一步了,那就是编译安装zombodb
zombodb配置:
那么同样的配置zombodb的前置条件是和cargo-pgrx是相同的(毕竟都是人家开发的):
从设置cargo-vendor以及源码的下载,都是相同的;
编译:
进入到zombodb的源码目录下执行:
cargo pgrx init --pgxx='which pg_config'
这里配置一下pg的版本,pgxx具体为pg12,pg13...等等,需要自行确定
在配置成功后,会显示找到的pg_config以及pg的版本
之后执行
cargo pgrx install --release
将zombodb的release版安装到数据库实例中;安装成功后,我们可以在pg中使用查看是否安装成功
create extension zombodb;
create table t1(id serial8 not null primary key,
name text not null);
insert into t1 values(1,'abc');
insert into t1 values(2,'def');
insert into t1 values(3,'aaa');
-- 访问es的客户端
select zdb.request('idxproducts','/');
select * from t1 where name ==> 'abc';
接下来还是老规矩,这里附上对本博客内容学习参考的文献,希望给迷途的羔羊指明前进的道路;
可供参考的文献:
- 在天河二号上配置 Rust 运行环境 - huangjj27 的技术博客
- Linux系统cargo卡openssl-sys问题 - 知乎 (zhihu.com)
- 从零开始的LLVM+Clang(一)——下载、配置到第一个pass_clang下载-CSDN博客
- Centos7上源码编译安装llvm 11.0.0 - 知乎 (zhihu.com)
- Linux安装CMake - 知乎 (zhihu.com)
- 其他安装方法 · Rust 程序设计语言 (rust-lang.org)
- Rust入门笔记|如何安装Rust-超全指南 - 知乎 (zhihu.com)
- 【Rust 日报】2023-05-17 pgx -- 用于在 Rust 中开发 PostgreSQL 扩展的框架 - Rust语言中文社区 (rustcc.cn)
- [Zombodb那些事]Zombodb与ElasticSearch的Bulk通信-CSDN博客
- 虾神说D - 知乎 (zhihu.com) --这个是大佬