透明网关部署示例

yc0716 2021-05-20 05:03:43
1.环境
操作系统:redhat 6
数据库:GBase8a MPP Cluster 数据库
2. 配置透明网关
1)安装透明网关
解压 tar 包:tar -xvf [安装包]
修改透明网关相应权限:chmod -R +x [安装目录名]
2)配置透明网关
系统参数配置文件:[安装目录]/conf/conf,properties
内容如下:
$ cat conf.properties
gbase.gt.port=9898
gbase.gt.encode=utf-8
gbase.gt.pagesize=10000
gbase.gt.load.data.type=0
gbase.gt.gc.paging.query=1
gbase.gt.wait.timeout=7200
数据源配置文件:[安装目录]/conf/datedource/gc_link.properties
内容如下:
$ cat dataSource/gc_link1.properties
[gbase8a cluster]
dataSource_IP=[数据源 IP]
dataSource_port=5258
dataSource_dbname=[数据源的库名]
dataSource_dbtype=gcluster
dataSource_user=*******
dataSource_pwd=*******
3)启动透明网关
$ sh gt.sh
4)透明网关关闭方式
如果透明网关配置失败需要手动 kill 对应的进程号,然后重新启动
ps -ef|grep GBaseGateway
kill [进程号]
3. 配置目标数据库 GBase8a MPP Cluster A
gbase_8a_gcluster.cnf 中必须配置的参数:
gbase_dblink_gateway_ip = [透明网关 IP,如 192.18.16.11]
gbase_dblink_gateway_port = [透明网关的服务端口,如 9898]
gbase_8a_gcluster.cnf 中选配的参数:
gcluster_dblink_direct_data_exchange:
默认值为 1
值为 1 表示:数据从数据源集群的计算节点直接发送给目标集群。
值为 0 表示:数据从数据源集群发送给网关,然后由网关转发给目标集 群。
注:仅当数据源集群和目标集群的节点间在网络上不可直接连接时,调整 此参数为 0。
4. 使用 db-link
创建 db-link:
CREATE DATABASE LINK dblink_name connect to ''identified by '' using 'gc_link ';
注:其中 dblink_name 是自定义的 db-link 的名字,后面的查询中,使用
该名字进行 db-link 查询。connect to ‘’ identified by ‘’是固定语法。
using 后面是数据源的名字。例如数据源配置文件名为 gc_link.properties, 则这里填 using ‘gc_link’。
删除 db-link:
DROP DATABASE LINK dblink_name;
注:当前不支持 IF EXISTS 语法。
使用 db-link:
SELECT * FROM 表名@ dblink_name
5. db-link 查询的语法约束
本节介绍 db-link 查询的语法约束。
注:如果仅仅是简单使用,如 insert into local_table select * from 同
源 dblink 表,则可以忽略本节的约束。当查询存在 db-link 表与本地表混用(例
如 db-link 表 JOIN 本地表),或与非同源 db-link 表混用时,则需要遵守如下
语法约束,否则查询会报语法错误。
注:同源 db-link 指 db-link 的名字相同,名字不同的 db-link 成为非同源 db-link。例如 t1@gc_link 和 t2@gc_link 被认为是同源 db-link 的两个表。
t1@gc_link 和 x1@gc_link2,被认为是非同源 db-link 表,即使 gc_link 和gc_link2 在创建时,using 的是同一个数据源,由于其 db-link 名字不同,仍然认为是非同源的。
db-link 查询语法约束如下:
1. db-link 表只能出现在顶层查询,或同源 dblink 的子查询中。出现在本地表的子查询中时,必须放在 relation 子查询中。
例如:如下语句会报语法错误,因为 db-link 出现在本地表的子查询中时,必须用 relation 子查询包围。
select * from t1 where exists (select 1 from t2@gc_link as t2 where t2.id = t1.id);
该语句可以修改为如下形式,以保证符合语法规则:
select * from t1 where exists (select 1 from (select 1 from t2@gc_link) as t2 where t2.id = t1.id);
2. 同源的 db-link 表可以直接 JOIN。dblink 表禁止与 local table, relation subquery,非同源 dblink 表,产生直接 JOIN 关系。
例如:t1@gc_link JOIN t2@gc_link 是允许的;但 t1@gc_link JOIN t2 是不允许的,因为 db-link 表禁止与本地表直接 JOIN,可以改写 SQL 语句为如 下形式:
… (select * from t1@gc_link) t, t2 …
3. db-link 表的子查询中,禁止出现本地表,非同源 dblink 表。
例如:select * from t1@gc_link where exists (select 1 from t2);
是不允许的,因为 db-link 表 t1@gc_link 的子查询中出现了本地表 t2。可以 改写为如下形式:
select * from (select * from t1@gc_link) t where exists (select 1 from t2);
4. group by 或 order by 中的相关子查询,禁止出现 db-link 表。

...全文
213 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

2,209

社区成员

发帖
与我相关
我的任务
社区描述
其他数据库开发 其他数据库
社区管理员
  • 其他数据库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧