如何通过SSH隧道将Apache Doris实例与PostgreSQL连接?
Apache Doris 通过 SSH 隧道连接 PostgreSQL 的解决方案
方法一:本地端口转发(推荐方案)
无需修改 Doris 配置或引入自定义驱动,通过 SSH 建立端口转发,让 Doris 连接本地转发端口即可实现间接访问 PostgreSQL。
操作步骤:
在 Doris FE 节点(或可访问 FE 的机器)执行 SSH 端口转发命令:
ssh -L <本地转发端口>:<PostgreSQL主机>:<PostgreSQL端口> <SSH用户名>@<SSH跳板机IP> -Nf示例:
ssh -L 5432:pg-internal.example.com:5432 ops@jump-server.example.com -Nf参数说明:
-L:定义本地端口转发规则,将本地端口流量转发到目标 PostgreSQL 端口-N:仅建立隧道,不执行远程命令-f:后台运行进程
验证隧道连通性:
使用telnet或psql测试本地端口是否能正常连接 PostgreSQL:telnet localhost 5432 # 或用psql测试 psql -h localhost -p 5432 -U pg_user -d target_db在 Doris 中创建 JDBC Catalog:
直接将 JDBC URL 指向本地转发端口,配置和普通 JDBC 连接一致:CREATE CATALOG pg_ssh_tunnel PROPERTIES ( "type"="jdbc", "user"="pg_user", "password"="pg_password", "jdbc_url"="jdbc:postgresql://localhost:5432/target_db", "driver_url"="postgresql-42.6.0.jar", "driver_class"="org.postgresql.Driver" );
方法二:使用带 SSH 功能的自定义 JDBC 驱动
如果必须通过驱动内置的 SSH 隧道实现,可按以下步骤操作:
操作步骤:
- 下载目标 SSH JDBC 驱动及其所有依赖包,上传至 Doris FE 节点的
fe/lib目录。 - 重启 Doris FE 节点,确保驱动包被加载到类路径中。
- 创建 JDBC Catalog 时,使用该驱动的专属 JDBC URL 和驱动类:
注意:不同 SSH JDBC 驱动的 URL 格式可能存在差异,请以对应驱动文档为准。CREATE CATALOG pg_ssh_jdbc PROPERTIES ( "type"="jdbc", "user"="pg_user", "password"="pg_password", "jdbc_url"="jdbc:postgresql+ssh://<SSH用户名>:<SSH密码>@<SSH跳板机IP>:22/<PostgreSQL主机>:<PostgreSQL端口>/target_db", "driver_class"="org.postgresql.ssh.jdbc.SshDriver" );
关键注意事项
- 端口转发方案需确保:跳板机可同时访问 Doris 节点和 PostgreSQL 节点,且 Doris 节点能访问本地转发端口。
- 自定义驱动方案需保证所有依赖包完整,FE 重启后驱动正常加载;生产环境需关注驱动版本兼容性。
- 生产环境中,建议将 SSH 端口转发配置为持久化服务(如 systemd 单元),避免连接断开导致隧道失效。
内容的提问来源于stack exchange,提问作者Ezequiel
相关产品推荐
相关产品推荐

