写点什么

编译 GreatSQL with RocksDB 引擎

作者:GreatSQL
  • 2024-03-13
    福建
  • 本文字数:2047 字

    阅读完需:约 7 分钟

GreatSQL 里也能用上 RocksDB 引擎

1. 前言

RocksDB 是基于 Facebook 开源的一种支持事务的、高度可压缩、高性能的 MyRocks 存储引擎,特别适用于高度压缩和大容量的数据。以下是一些关键特点:


  1. 高性能: LSM 树结构使得 RocksDB 在写入密集型负载下表现卓越。它能够处理大量的写入操作,并且在写入操作上有较低的延迟。

  2. 可压缩存储: 具有高度可压缩的特性,可以有效减小数据在磁盘上的占用空间。

  3. 事务支持: 支持 MySQL 的事务语义,这使得它适用于要求事务性支持的应用场景。

  4. 定制化存储格式: 允许用户通过定制化存储格式来满足其特定需求。

  5. 兼容性: 兼容 MySQL 的 API 和协议。用户可以将 Percona RocksDB 作为替代存储引擎,以满足特定的性能和压缩需求。


总体而言,RocksDB 是为了应对大规模、写入密集型的工作负载而设计的,尤其适用于像 Facebook 这样需要高度可压缩、高性能、事务支持的应用场景。


GreatSQL 是从 Percona Server For MySQL fork 过来的,因此也能在 GreatSQL 中用上 RocksDB 引擎。但是因为在 GreatSQL 中进行了 MGR 优化,部分代码和 RocksDB 引擎有冲突,因此在默认启用 MGR 的时候就得关闭 RocksDB 引擎。在需要 RocksDB 引擎但不需要 MGR 的场景下,可以采用本文的方法自行编译以支持 RocksDB 引擎。

2. 构建编译环境

下载 GreatSQL-Docker 仓库,并参考其中的 GreatSQL-Build 项目代码,进行本地编译工作。


$ mkdir -p /opt && cd /opt$ git clone git@gitee.com:GreatSQL/GreatSQL-Docker.git$ cd GreatSQL-Docker$ lsdeppkgs  GreatSQL  GreatSQL-Build  GreatSQL-Shell  GreatSQL-Shell-Build  LICENSE  README.md
复制代码


这其中的 GreatSQL-Build 是我们这次要用到的项目。

3. 编译 GreatSQL with RocksDB

先修改 Dockerfile 中的部分代码,部分文件改成本地 COPY,不再从服务器上下载:


$ cd GreatSQL-Docker/GreatSQL-Build/$ vim Dockerfile
# 在第19行附近,增加一行... 18 openssl openssl-devel pam-devel readline-devel wget zlib-devel" 19 COPY ${ENTRYPOINT} /20 RUN (cd /lib/systemd/system/sysinit.target.wants/; for i in *; do [ $i == \...
# 删除原来第44行... 43 curl -o ${OPT_DIR}/${GREATSQL_ENV} ${GREATSQL_BUILD_DOWNLOAD_URL}/${GREATSQL_ENV} > /dev/null 2>&1 && \ 44 chmod +x /*sh ${OPT_DIR}/*sh...
复制代码


修改完后,将不再从服务器上下载 docker-entrypoint.sh 脚本,改用本地文件。


再修改 docker-entrypoint.sh 中的部分代码,启用 RocksDB 编译支持:


# 在第14行后增加一行,最后变成类似下面这样$ vim docker-entrypoint.sh +14... 14 wget -c -O ${GREATSQL_MAKESH} ${GREATSQL_MAKESH_DOWNLOAD_URL}/${GREATSQL_MAKESH} >> ${MAKELOG} 2>&1 && \ 15 sed -i 's/DWITH_ROCKSDB=.*/DWITH_ROCKSDB=ON \\/ig' ${GREATSQL_MAKESH} >> ${MAKELOG} 2>&1 && \ 16 wget -c -O ${RPCGEN} ${GREATSQL_BUILD_DOWNLOAD_URL}/${RPCGEN} >> ${MAKELOG} 2>&1 && \...
复制代码


这个改动是修改 greatsql-automake.sh 脚本,使其启用 RocksDB 编译支持。


然后执行下面的命令,开始构建一个 GreatSQL 编译环境的 Docker 镜像:


$ docker build -t greatsql_build .Sending build context to Docker daemon  20.48kBStep 1/8 : FROM centos:8 ---> 5d0da3dc9764Step 2/8 : ENV LANG en_US.utf8...
复制代码


构建完 Docker 镜像后,新建一个 Docker 容器,即可自动完成 GreatSQL 编译:


# 创建容器$ docker run -itd --name greatsql greatsql_build bash
# 查看编译进展$ docker logs greatsql0. touch logfile /tmp/greatsql-automake.log
1. downloading sourcecode tarballs and extract 1.1 downloading sourcecode tarballs ... 1.2 extract tarballs ...
2. compile patchelf
3. compile GreatSQL 3.1 compiling GreatSQL 3.2 remove mysql-test from GreatSQL 3.3 make dynamic link for GreatSQL
4. greatsql build completed!drwxrwxr-x 13 mysql mysql 293 Feb 22 01:33 GreatSQL-8.0.32-25-centos-glibc2.28-x86_64/opt/GreatSQL-8.0.32-25-centos-glibc2.28-x86_64/bin/mysqld Ver 8.0.32-25 for Linux on x86_64 (GreatSQL, Release 25, Revision 79f57097e3f)
5. remove files and clean up
复制代码


如果能看到这个字样,就表示 GreatSQL 已经编译完成了,再执行下面命令确认是否编译产生 RocksDB 动态库文件:


$ docker exec -it greatsql bash -c "find /opt/GreatSQL-8.0.32-25-centos-glibc2.28-x86_64/ -name ha_rocksdb.so"/opt/GreatSQL-8.0.32-25-centos-glibc2.28-x86_64/lib/plugin/ha_rocksdb.so
复制代码


可以看到成功编译出 RocksDB 动态库文件,可以将编译生成的 GreatSQL 二进制文件拷贝到宿主机上使用。


如果还想同时用上 GreatSQL Rapid 引擎,可以下载 GreatSQL 二进制包,解压缩,提取其中的 lib/plugin/ha_rapid.solib/private/libduckdb.so 动态库文件,放置到相应目录下即可。


接下来就可以体验在 GreatSQL 下使用更稳定可靠的 MGR,以及压缩率很高的 RocksDB 引擎和查询性能更高的 Rapid 引擎。

发布于: 刚刚阅读数: 4
用户头像

GreatSQL

关注

GreatSQL社区 2023-01-31 加入

GreatSQL是由万里数据库维护的MySQL分支,专注于提升MGR可靠性及性能,支持InnoDB并行查询特性,是适用于金融级应用的MySQL分支版本。 社区:https://greatsql.cn/ Gitee: https://gitee.com/GreatSQL/GreatSQL

评论

发布
暂无评论
编译GreatSQL with RocksDB引擎_GreatSQL_InfoQ写作社区