写点什么

ODBC 适配国产数据库

作者:扬_帆_起_航
  • 2024-06-03
    北京
  • 本文字数:1673 字

    阅读完需:约 5 分钟

1.前言

Kong Gateway 是一个运行在 Nginx 上的 Lua 应用程序,它与 OpenResty 一起发布。Kong Gateway 底层数据库只支持 PostgreSQL 和 Cassandra,从 3.4.0 版本官方已不在支持 Cassandra。

由于大部分国产数据并没有提供 Lua 语言驱动,所有笔者将采用 ODBC 适配达梦数据库,文中涉及到的 lua 源码需要读者自行实现。

2.环境

  • 安装 bazel

cd "/usr/bin" && \curl -fLO https://releases.bazel.build/6.1.0/release/bazel-6.1.0-linux-x86_64 && \ chmod +x bazel-6.1.0-linux-x86_64 && \mv bazel-6.1.0-linux-x86_64 bazel
复制代码
  • 基础依赖

yum install \    automake \    gcc \    gcc-c++ \    git \    libyaml-devel \    make \    patch \    perl \    perl-IPC-Cmd \    protobuf-devel \    unzip \    valgrind \    valgrind-devel \    zlib-devel
复制代码
  • ODBC

yum install unixODBC unixODBC-devel
复制代码

配置 odbc 数据库源配置文件在: /etc/odbc.ini

[DM8]Description = DM ODBC DSN#DM8数据库区动Driver = /usr/lib/dm/libdodbc.so#数据库连接地址SERVER = localhost #此处为用户名UID = SYSDBA #此处为连接的密码PWD = 12345678s #数据库实例端口号TCP_PORT = 5236
复制代码

命令验证是否生效

3.适配

  • kong-3.3.1-0.rockspec 文件中增加 odbc 库

dependencies = { ...... "luasql-odbc == 2.6.0",}build = {  type = "builtin",  modules = {    ......    ["kong.cluster_events.strategies.dm"] = "kong/cluster_events/strategies/dm.lua",    ["kong.db.strategies.dm"] = "kong/db/strategies/dm/init.lua",    ["kong.db.strategies.dm.connector"] = "kong/db/strategies/dm/connector.lua",    ["kong.db.strategies.dm.tags"] = "kong/db/strategies/dm/tags.lua",    ......  }}
复制代码
  • 创建 Lua 文件

kong/cluster_events/strategies/dm.lua#建立数据库连接kong/db/strategies/dm/connector.lua#访问数据库SELECT、INSERT、DELETE、UPDATE等kong/db/strategies/dm/init.luakong/db/strategies/dm/tags.lua
复制代码
  • 修改 Lua 文件

#配置文件kong.conf.defaultkong/templates/kong_defaults.luakong/db/strategies/init.luakong/cluster_events/init.luakong/conf_loader/init.luakong/db/schema/others/migrations.lua#依赖的表、触发器、函数kong/db/migrations/core/000_base.lua#辅助表结构及插件依赖表结构可忽略但必须有数据库名称配置#当然也可以把表结构拆分到相关的lua文件中kong/db/migrations/core/003_100_to_110.luakong/db/migrations/core/004_110_to_120.luakong/db/migrations/core/005_120_to_130.luakong/db/migrations/core/006_130_to_140.luakong/db/migrations/core/007_140_to_150.luakong/db/migrations/core/008_150_to_200.luakong/db/migrations/core/009_200_to_210.luakong/db/migrations/core/010_210_to_211.luakong/db/migrations/core/011_212_to_213.luakong/db/migrations/core/012_213_to_220.luakong/db/migrations/core/013_220_to_230.luakong/db/migrations/core/014_230_to_270.luakong/db/migrations/core/015_270_to_280.luakong/db/migrations/core/016_280_to_300.luakong/db/migrations/core/017_300_to_310.luakong/db/migrations/core/018_310_to_320.luakong/db/migrations/core/019_320_to_330.luakong/db/migrations/operations/200_to_210.lua。
复制代码

4.编译

bazel build //build:kong --verbose_failures --action_env=CFLAGS="-DUNIXODBC"bazel build --config release //build:kong --verbose_failures --action_env=CFLAGS="-DUNIXODBC#输出rpm文件到当前目录的bazel-bin/pkg/bazel build --config release :kong_el7 --verbose_failures
复制代码

5.安装

默认安装路径: /usr/local/share/lua/5.1/,日志路径: /usr/local/kong

  • yum install -y kong.el7.xxx.rpm

  • /etc/kong/kong.conf

  • kong migrations bootstrap

  • kong start

6.源码

感兴趣友情支持,主要支持达梦数据库、MYSQL、瀚高。

https://item.taobao.com/item.htm?ft=t&id=763874191645

用户头像

尘世中一个迷途小书童! 2020-03-09 加入

大数据领域从业者,近几年一直从事Kafka领域相关工作

评论

发布
暂无评论
ODBC适配国产数据库_lua_扬_帆_起_航_InfoQ写作社区