GuassDB 200跨集群访问其他数据平台

本文分别介绍GuassDB跨集群访问远端oracle以及远端MPPDB数据库。因环境有限,这里不列举对接HDFS以及对接Spark功能。

一、对接oracle数据库

1、约束限制

  • 仅支持连接Oracle11.2.0.1至Oracle12.2.0.1。
  • 要求Oracle-ODBC驱动的版本为12.2.0.1.0。
  • unixODBC的版本要求为2.3.6。
  • 支持最多配置20组远端Oracle配置。
  • 配置所需要的Oracle ODBC请从Oracle官网下载。以配置访问Oracle11.2.0.4为例,需要下载:“oracle-instantclient-basic-linux.x64-12.2.0.1.0.zip”、“oracle-instantclient-sqlplus-linux.x64-12.2.0.1.0.zip”、“oracle-instantclient-odbc-linux.x64-12.2.0.1.0.zip”。并将上述三个zip文件打包压缩为“package.zip”。

    2、前提条件

  • Oracle数据库和GaussDB 200集群状态正常。
  • Oracle数据库物理节点和GaussDB 200集群之间可以互相通信。

    3、安装unixODBC

    Gaussdb要求的unixODBC版本必须为2.3.6。操作系统自带的版本不能正常使用,需要从官方网站单独下载并编译安装。

    [[email protected] ~]# tar -xzf unixODBC-2.3.6.tar.gz
    [[email protected] ~]# cd unixODBC-2.3.6
    [[email protected] unixODBC-2.3.6]# ./configure
    [[email protected] unixODBC-2.3.6]# make
    [[email protected] unixODBC-2.3.6]# make install

    安装完成后,需要指定库文件的环境变量,否则使用过程中会报错。

    [[email protected] ~]# vi /etc/profile
    export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/lib
    [[email protected] ~]# isql --version
    unixODBC 2.3.6
    [[email protected] ~]# su - omm
    Last login: Tue Oct 29 16:35:31 CST 2019
    [[email protected] ~]$ isql --version
    unixODBC 2.3.6

    保存完成后,必须使环境变量生效。

    4、创建package.zip压缩包

    从oracle官方网站下载如下三个压缩包,然后压缩为package.zip文件。

    [[email protected] tmp]# zip package.zip instantclient-*.zip
    adding: instantclient-basic-linux.x64-12.2.0.1.0.zip (stored 0%)
    adding: instantclient-odbc-linux.x64-12.2.0.1.0-2.zip (stored 0%)
    adding: instantclient-sqlplus-linux.x64-12.2.0.1.0.zip (stored 0%)

    5、在Gassdb管理页面创建对接oracle

    登录FusionInsight Manager>选择“集群 > 待操作的集群名称 > 服务 > MPPDB > 对接 > 对接Oracle”,单击“创建”,填写配置组名称,单击“确定”。如下图所示:

    参数说明见下表:
    输入相关配置参数并上传驱动文件“package.zip”,单击“上传并部署”,等待部署完成。部署完成后,单击“保存”。等待保存配置成功,单击“完成”。然后在集群“概览”页面,选择“更多 > 重启”,执行相应操作重启服务。
    注:在服务重启的过程中,系统会把odbc驱动分发到各个节点以完成部署。ODBC的部署目录为:/opt/huawei/Bigdata/mppdb/core/utilslib/fc_conf。

    6、创建Data Source并连接oracle数据库

    从主机上切换到omm用户,并连接到mppdb数据库,执行下面的语句创建:

[[email protected] ~]# su - omm
Last login: Tue Oct 29 16:43:45 CST 2019
[[email protected] ~]$ gsql -d postgres -p 25308
gsql ((GaussDB Kernel V300R002C00 build 8a9c1eb6) compiled at 2019-08-01 18:47:38 commit 6093 last mr 10175 )
Non-SSL connection (SSL connection is recommended when requiring high-security)
Type "help" for help.

postgres=#CREATE DATA SOURCE ds_oracle TYPE ‘ORACLE‘ OPTIONS (DSN ‘oracle_DSN‘, USERNAME ‘spwuser‘, PASSWORD ‘redhat‘, ENCODING ‘UTF8‘);
CREATE DATA SOURCE

使用下面的语句验证是否可以连接到远端oracle数据库:

postgres=# SELECT * FROM exec_on_extension(‘ds_oracle‘, ‘select * from web_customer;‘) AS (c1 int,c2 text,c3 text,c4 text);

如下图所示:

注:使用“exec_on_extension”之前需要创建Data Source对象。
以下举例将远端的查询结果导入本地表:

[[email protected] ~]$ gsql -d postgres -p 25308
gsql ((GaussDB Kernel V300R002C00 build 8a9c1eb6) compiled at 2019-08-01 18:47:38 commit 6093 last mr 10175 )
Non-SSL connection (SSL connection is recommended when requiring high-security)
Type "help" for help.

postgres=#\c rhnschema
rhnschema=# CREATE TABLE dd AS SELECT * FROM exec_on_extension(‘ds_oracle‘, ‘select * from rhnpackagefile;‘) AS (package_id numeric,capability_id numeric,device numeric,
inode numeric,file_mode numeric,username character varying(32),groupname character varying(32),rdev numeric,file_size numeric,mtime timestamp with time zone,
checksum_id numeric,linkto character varying(256),flags numeric,verifyflags numeric,lang character varying(32),created timestamp with time zone,modified timestamp with time zone);
NOTICE:  The ‘DISTRIBUTE BY‘ clause is not specified. Using ‘package_id‘ as the distribution column by default.
HINT:  Please use ‘DISTRIBUTE BY‘ clause to specify suitable data distribution column.
INSERT 0 6304854
rhnschema=# select count(*) from dd;
  count
---------
 6304854
(1 row)

二、对接远端MPPDB

GaussDB 200支持两种方式访问远端MPPDB数据库集群,包括通过FusionInsight Manager配置方式和创建Foreign Table的方式。

2.1、通过FusionInsight Manager配置方式

  • 创建配置文件
    登录FusionInsight Manager>选择“集群 > 待操作的集群名称 > 服务 > MPPDB > 对接 > 对接MPPDB”,单击“创建”,填写配置组名称,单击“确定”。如下图所示:

    参数说明如下图所示:

    单击“保存”。等待保存配置成功,单击“完成”。然后在集群“概览”页面选择“更多 > 重启”,执行相应操作重启服务。
  • 配置集群互联
    设置远端集群的监听IP
    默认情况下,集群系统只监听localhost以及业务IP,可以使用下面的命令查询:
[[email protected] ~]$ gs_guc check -Z coordinator -I all -c "listen_addresses"
expected guc information: hd02: listen_addresses=NULL: [/srv/BigData/mppdb/data1/coordinator/postgresql.conf]
gs_guc check: hd02: listen_addresses=‘localhost,192.168.110.24‘: [/srv/BigData/mppdb/data1/coordinator/postgresql.conf]

Total GUC values: 1. Failed GUC values: 0.
The value of parameter listen_addresses is same on all instances.
    listen_addresses=‘localhost,192.168.110.24‘

如果没有监听业务IP,可以使用下面的方法将其加入监听里:

[[email protected] ~]$ gs_guc set -I all -Z coordinator -c "listen_addresses=‘localhost,192.168.110.24‘"
expected instance path: [/srv/BigData/mppdb/data1/coordinator/postgresql.conf]
gs_guc set: listen_addresses=‘*‘: [/srv/BigData/mppdb/data1/coordinator/postgresql.conf]

Total instances: 1. Failed instances: 0.
Success to perform gs_guc!

以上只在集群的一个节点有效,其他节点也需要单独操作。另外多个IP之间,用逗号隔开。
在远端集群CN设置认证方式
默认情况下,系统只允许集群各个节点之间互相通信。如果其他网段需要访问就必须设置认证方式,这个在任意一个节点执行即可。

[[email protected] ~]$ gs_guc reload -Z coordinator -N all -I all -h "host all all 192.168.120.0/24 sha256"
Begin to perform gs_guc for all coordinators.

Total instances: 3. Failed instances: 0.
Success to perform gs_guc!

设置完成后,重启集群:

[[email protected] ~]$ gs_om -t stop && gs_om -t start

  • 创建Data Source对象
    如下,创建ds_mppdb对象,并使用exec_on_extension函数进行连接。
[[email protected] ~]$ gsql -d postgres -p 25308
gsql ((GaussDB Kernel V300R002C00 build 8a9c1eb6) compiled at 2019-08-01 18:47:38 commit 6093 last mr 10175 )
Non-SSL connection (SSL connection is recommended when requiring high-security)
Type "help" for help.

postgres=# CREATE DATA SOURCE ds_mppdb type ‘MPPDB‘ OPTIONS (DSN ‘mppdb_DSN‘, USERNAME ‘spwuser‘, PASSWORD ‘abcABC12‘, ENCODING ‘UTF8‘);
CREATE DATA SOURCE
postgres=# SELECT * FROM exec_on_extension(‘ds_oracle‘, ‘select * from web_customer;‘) AS (c1 int,c2 text,c3 text,c4 text);
 c1 |  c2  |             c3              |             c4
----+------+-----------------------------+-----------------------------
  1 | xzxj | 2019-4-11 8:42:35.094133000 | 2019-4-11 8:42:35.094168000
(1 row)

2.2 使用Foreign Table方式

注意事项:

  • 创建的外表与其对应的远端表的列名和类型名要完全一致,且远端表的类型为行存表或列存表、哈希表或者复制表。
  • 如果关联的表在另外一个集群是复制表或者存在数据倾斜,性能可能会很差。
  • 使用期间,两个集群的状态应为“Normal”。
  • 两个集群都需要具备基于Foreign Table的SQL on other GaussDB数据处理功能。
    建议配置LVS,如未配置,推荐使用多个CN作为server的地址,禁止将多个集群的CN地址写在一起。
  • 请尽可能保证两端数据库的编码相同,否则可能出现报错或者收到的数据为乱码。
  • 如果远端表已经做过统计信息收集,可以对外表执行analyze以获得更优的执行计划。
    在配置之前,需要确保两个集群之间可以互相访问。集群互访可以参考上面的步骤操作。
    创建Server
    postgres=# CREATE SERVER Gauss1 FOREIGN DATA WRAPPER GC_FDW OPTIONS
    (address ‘192.168.110.22:25308,192.168.110.23:25308,192.168.110.24:25308‘ ,
    dbname ‘rhnschema‘, username ‘spwuser‘, password ‘abcABC12‘);


    创建外表并查看

    postgres=# CREATE FOREIGN TABLE f_web_customer
    (
    ID NUMERIC,
    NAME character varying(128),
    CREATED timestamp with time zone,
    MODIFIED timestamp with time zone
    )
    SERVER  Gauss1 OPTIONS
    (
    schema_name ‘public‘,
    table_name ‘web_customer‘,
    encoding ‘UTF-8‘
    );
    postgres=# \d f_web_customer;



    使用外表进行导入数据

    postgres=# CREATE TABLE local_web_customer
    (
    ID NUMERIC,
    NAME character varying(128),
    CREATED timestamp with time zone,
    MODIFIED timestamp with time zone
    );
    postgres=# INSERT INTO local_web_customer SELECT * FROM f_web_customer;
    INSERT 0 1
    postgres=# select *from local_web_customer;


原文地址:https://blog.51cto.com/candon123/2446396

时间: 2024-08-03 10:25:48

GuassDB 200跨集群访问其他数据平台的相关文章

GaussDB 200跨集群访问HDFS

当需要从Hive等Hadoop集群迁移数据到GaussDB 200集群时,因为数据量太大,可能无法导出到本地.此时需要GaussDB 200跨集群读取HDFS上的数据,并写入GaussDB 200集群. 目前GaussDB 200只支持跨集群访问FusionInsight HD中的HDFS. 前提条件 FusionInsight HD和GaussDB 200两个集群状态正常并且可以互相通信. 远端FusionInsight HD集群被访问的表为ORC格式. 远端FusionInsight HD集

HDFS跨集群数据合并方案之ViewFileSystem

前言 在很多时候,我们会碰到数据融合的需求,比如说原先有A集群,B集群,后来管理员认为有2套集群,数据访问不方便,于是设法将A,B集群融合为一个更大的集群,将他们的数据都放在同一套集群上.一种办法就是用Hadoop自带的DistCp工具,将数据进行跨集群的拷贝.当然这会带来很多的问题,如果数据量非常庞大的话.本文给大家介绍另外一种解决方案,ViewFileSystem,姑且可以叫做视图文件系统.大意就是让不同集群间维持视图逻辑上的唯一性,不同集群间还是各管各的. 传统数据合并方案 为了形成对比,

java架构师课程、性能调优、高并发、tomcat负载均衡、大型电商项目实战、高可用、高可扩展、数据库架构设计、Solr集群与应用、分布式实战、主从复制、高可用集群、大数据

15套Java架构师详情 * { font-family: "Microsoft YaHei" !important } h1 { background-color: #006; color: #FF0 } 15套java架构师.集群.高可用.高可扩展.高性能.高并发.性能优化.Spring boot.Redis.ActiveMQ.Nginx.Mycat.Netty.Jvm大型分布式项目实战视频教程 视频课程包含: 高级Java架构师包含:Spring boot.Spring  clo

kafka集群扩容以及数据迁移

一 kafka集群扩容比较简单,机器配置一样的前提下只需要把配置文件里的brokerid改一个新的启动起来就可以.比较需要注意的是如果公司内网dns更改的不是很及时的话,需要给原有的旧机器加上新服务器的host,不然可能会产生controller服务器从zk上拿到域名但是解析不到新机器地址的情况. 二 集群扩容后数据是不会自动均衡到新机器上的,需要采用kafka-reassign-partitions.sh这个工具脚本.脚本可以工作在三种模式--generate,--execute,--veri

Kafka跨集群迁移方案MirrorMaker原理、使用以及性能调优实践

序言Kakfa MirrorMaker是Kafka 官方提供的跨数据中心的流数据同步方案.其实现原理,其实就是通过从Source Cluster消费消息然后将消息生产到Target Cluster,即普通的消息生产和消费.用户只要通过简单的consumer配置和producer配置,然后启动Mirror,就可以实现准实时的数据同步. 1. Kafka MirrorMaker基本特性Kafka Mirror的基本特性有: 在Target Cluster没有对应的Topic的时候,Kafka Mir

Redis3.0集群crc16算法php客户端实现方法(php取得redis3.0集群中redis数据所在的redis分区插槽,并根据分区插槽取得分区所在redis服务器地址)

数据分区        Redis集群将数据分区后存储在多个节点上,即不同的分区存储在不同的节点上,每个节点可以存储多个分区.每个分区在Redis中也被称为"hash slot",Redis集群中总共规划了16384个分区. 例如:当集群中有3个节点时,节点A将包含0-5460分区,节点B将包含5461-10922分区,节点C将包含10923-16383分区. 每个key将会存储到一个唯一的分区中,每个分区其实就是一组key的集合,两者对应关系为:key的CRC16校验码%16384=

在不同版本号hdfs集群之间转移数据

最简单的办法就是把src集群的数据导到本地,然后起还有一个进程将本地数据传到des集群上去. 只是这有几个问题: 效率减少 占用本地磁盘空间 不能应付实时导数据需求 两个进程须要协调,复杂度添加 更好的办法是在同一个进程内一边读src数据,一边写des集群.只是这相当于在同一个进程空间内载入两个版本号的hadoop jar包.这就须要在程序中使用两个classloader来实现. 下面代码能够实现classloader载入自己定义的jar包,并生成须要的Configuration对象: Java

mongodb3.0集群部署及数据迁移

本文主要介绍mongodb3.0新特性.集群部署及从mongodb2.6中数据迁移到mongodb3.0. mongodb3.0介绍 一.mongodb3.0新特性 引入了插件式存储引擎API 新增WiredTiger存储引擎 支持文档级别的锁 二.WiredTiger存储引擎特性介绍 文档级别锁 WiredTiger通过MVCC实现文档级别的并发控制,即文档级别锁.这就允许多个客户端请求同时更新一个集合内存的多个文档,再也不需要在排队等待库级别的写锁.这在提升数据库读写性能的同时,大大提高了系

Linux安装ElasticSearch与MongoDB分布式集群环境下数据同步

ElasticSearch有一个叫做river的插件式模块,可以将外部数据源中的数据导入elasticsearch并在上面建立索引.River在集群上是单例模式的,它被自动分配到一个节点上,当这个节点挂掉后,river会被自动分配到另外的一个节点上.目前支持的数据源包括:Wikipedia, MongoDB, CouchDB, RabbitMQ, RSS, Sofa, JDBC, FileSystem,Dropbox等.River有一些指定的规范,依照这些规范可以开发适合于自己的应用数据的插件.