配置访问远端MPPDB(Foreign Table方式)
功能描述
通过在集群中创建Foreign Table的方式,实现在多个集群之间的关联查询和用来导入数据。
使用场景
- 将数据从一个集群导入到另外一个集群中。
- 多个集群之间的关联查询。
注意事项
- 创建的外表与其对应的远端表的列名和类型名要完全一致,且远端表的类型为行存表或列存表、哈希表或者复制表。
- 如果关联的表在另外一个集群是复制表或者存在数据倾斜,性能可能会很差。
- 使用期间,两个集群的状态应为“Normal”。
- 两个集群都需要具备基于Foreign Table的SQL on other GaussDB数据处理功能。
- 建议配置LVS,如未配置,推荐使用多个CN作为server的地址,禁止将多个集群的CN地址写在一起。
- 请尽可能保证两端数据库的编码相同,否则可能出现报错或者收到的数据为乱码。
- 如果远端表已经做过统计信息收集,可以对外表执行analyze以获得更优的执行计划。
使用前准备
需要保证两个集群可以连通,连接配置步骤如下:
- 设置远端集群的监听IP。
在需要接受远程服务的所有CN上(假设其中一个CN主机名为Linux-235,IP为10.11.12.16),将其对外提供服务的网卡IP或主机名(英文逗号分隔)添加到监听列表中去(一般为本机IP,如果列表中已有则可以不用设置),如
gs_guc reload -Z coordinator -N Linux-235 -I all -c "listen_addresses='localhost,10.11.12.16'"更详细的说明请参考Linux下配置数据源章节中的6。
- 在远端集群CN设置认证方式。
假定本地GaussDB 200集群的各节点IP地址为:10.11.12.13,10.11.12.14,10.11.12.15,如设置sha256连接认证方式,则可在远端GaussDB集群上每一个有CN的节点执行如下命令:
gs_guc reload -Z coordinator -N all -I all -h "host all all 10.11.12.13/32 sha256" gs_guc reload -Z coordinator -N all -I all -h "host all all 10.11.12.14/32 sha256" gs_guc reload -Z coordinator -N all -I all -h "host all all 10.11.12.15/32 sha256"对于本地GaussDB 200集群有很多节点,且其IP连续、在一个网段时,可进行批量设置,如:
#允许IP为10.11.12.x的任何主机进行连接访问 gs_guc reload -Z coordinator -N all -I all -h "host all all 10.11.12.0/24 sha256" #允许IP为10.11.x.x的任何主机进行连接访问 gs_guc reload -Z coordinator -N all -I all -h "host all all 10.11.0.0/16 sha256"对于本地GaussDB 200集群有很多节点时,且其IP不连续或不在同网段,则用户可用EC的remoteIP功能进行设置(将需要设置的IP放入文本文件中,例:/opt/host/hostfile(文件路径和文件名可变更,但需要确保有读取权限)),其中每行一个IP,然后再执行如下命令设置IP:
gs_om -t ec -m add -N /opt/host/hostfile -U username --type=remoteip gs_om -t ec -m add -N /opt/host/hostfile -U username --type=remoteip -L #-L为本地模式,需要在全部节点完成上述步骤并执行该命令。说明:
- 远端集群需要在所有有CN的节点上进行配置。
- 本地集群有扩容、新增CN的操作,需要将新增的地址在远端集群所有有CN的节点进行配置。
- 支持ssl连接。如果配置使用host或者hostssl,可使用ssl连接。
- 重启远端集群。
gs_om -t stop gs_om -t start操作步骤
- 创建server。
CREATE SERVER server_remote FOREIGN DATA WRAPPER GC_FDW OPTIONS (address '10.146.187.231:8000,10.180.157.130:8000' , dbname 'test', username 'test', password 'xxxxxxxx' );说明:
- server_remote为server名字,供外表使用。
- address为远端集群CN的地址和端口号,如配置LVS,推荐只填写一个LVS地址,如未配置,推荐使用多个CN作为server的地址。
- dbname为远端集群的数据库名。
- username为连接远端集群使用的用户名,注意该用户不能为系统管理员。
- password为连接远端集群使用的用户名的密码。
- 创建外表。
CREATE FOREIGN TABLE region ( R_REGIONKEY INT4, R_NAME TEXT, R_COMMENT TEXT ) SERVER server_remote OPTIONS ( schema_name 'test', table_name 'region', encoding 'gbk' );说明:
- 外表的列不允许带任何约束。
- 外表的列名和列的类型要与远端集群对应的表的列名和列的类型完全一致。
- schema_name为远端集群对应的表所在的schema,如果该option省略,则schema_name预设该外表所在的schema。
- table_name为远端集群对应的表所在的表名,如果该option省略,则table_name预设该外表的表名。
- encoding为远端集群的编码,如果该option省略,则编码使用远端集群数据库的默认编码。
- 查看建立的外表。
\d+ region Foreign table "public.region" Column | Type | Modifiers | FDW Options | Storage | Stats target | Description -------------+---------+-----------+-------------+----------+--------------+------------- r_regionkey | integer | | | plain | | r_name | text | | | extended | | r_comment | text | | | extended | | Server: server_remote FDW Options: (schema_name 'test', table_name 'region', encoding 'gbk') FDW permition: read only Has OIDs: no Distribute By: ROUND ROBIN Location Nodes: ALL DATANODES- 使用外表进行导入数据或者关联查询。
- 导入数据。
CREATE TABLE local_region ( R_REGIONKEY INT4, R_NAME TEXT, R_COMMENT TEXT ); INSERT INTO local_region SELECT * FROM region;说明:
- 如遇到报错连接失败,请检查server的信息确认两个集群是否已经相互连通。
- 如遇到报错表不存在,请检查外表的option信息是否正确。
- 如遇到报错列信息不匹配,请检查外表的列信息是否与远端集群对应表的列信息是否一致。
- 如遇到报错版本不一致,请升级低版本的集群在继续使用。
- 如遇到乱码,请检查数据源的实际编码方式,并重新创建外表指定正确的编码。
- 关联查询。
SELECT local_region * FROM region, local_region WHERE local_region.R_NAME = region.R_NAME;说明:
- 外表可以当做一个本地表来使用,执行复杂的作业。
- 如果远端集群已经有统计信息,请对该外表执行analyze以获得更优的执行计划。
- 如果本地集群的DN数量比远端集群的DN数量少,本地集群需要使用SMP来获得更佳的性能。
- 删除外表。
DROP FOREIGN TABLE region; DROP FOREIGN TABLE
查看更多:华为GaussDB 200 跨集群访问其他数据平台「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」关注作者【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。评论
- 在远端集群CN设置认证方式。




