Data Virtualization 的网络需求

Data Virtualization 服务公开网络通信端口,以允许来自 Cloud Pak for Data 集群外部的连接。

Data Virtualization 公开的端口

下表列出了 Data Virtualization 公开的端口及其使用情况。

用于通过使用带有 SSL 的 JDBC 连接到 Data Virtualization 的外部客户机应用程序。
内部端口: 50001
通信: TCP
要获取外部端口,请执行以下步骤。
  1. 在导航菜单上,单击 数据 > Data Virtualization。 缺省情况下,服务菜单将打开到 " 数据源 " 页面。
  2. 在服务菜单上,单击 连接信息
  3. 连接配置资源 部分中选择 使用 SSL 选项。
外部端口是端口号字段的值。
(可选) 您可以运行以下命令。
oc get -n project-name -o jsonpath="{.spec.ports[?(@.name=='ssl-server')].nodePort}" services c-db2u-dv-db2u-engn-svc
project-name 替换为安装了 Data Virtualization 服务的项目 (名称空间)。
oc get -n dv-project -o jsonpath="{.spec.ports[?(@.name=='ssl-server')].nodePort}" services c-db2u-dv-db2u-engn-svc
用于通过不使用 SSL 的 JDBC 连接到 Data Virtualization 的外部客户机应用程序。
内部端口: 50000
通信: TCP
要获取外部端口,请执行以下步骤。
  1. 在导航菜单上,单击 数据 > Data Virtualization。 缺省情况下,服务菜单将打开到 " 数据源 " 页面。
  2. 在服务菜单上,单击 连接信息
  3. 连接配置资源 部分中选择 无 SSL 选项。
外部端口是端口号字段的值。
(可选) 您可以运行以下命令。
oc get -n project-name -o jsonpath="{.spec.ports[?(@.name=='legacy-server')].nodePort}" services c-db2u-dv-db2u-engn-svc
project-name 替换为安装了 Data Virtualization 服务的项目 (名称空间)。
oc get -n dv-project -o jsonpath="{.spec.ports[?(@.name=='legacy-server')].nodePort}" services c-db2u-dv-db2u-engn-svc
自动发现以简化访问远程数据源的流程。
请参阅 发现远程数据源
内部端口: 7777
通信: TCP
要获取外部端口,请运行以下命令。
oc get -n project-name -o jsonpath="{.spec.ports[?(@.name=='qpdiscovery')].nodePort}" services c-db2u-dv-db2u-engn-svc
project-name 替换为安装了 Data Virtualization 服务的项目 (名称空间)。
oc get -n dv-project -o jsonpath="{.spec.ports[?(@.name=='qpdiscovery')].nodePort}" services c-db2u-dv-db2u-engn-svc
要获取由 Data Virtualization 服务和内部到外部端口映射公开的 Kubernetes NodePort 端口的列表,请运行以下命令。
oc get -n project-name services c-db2u-dv-db2u-engn-svc
project-name 替换为安装了 Data Virtualization 服务的项目 (名称空间)。

例如,使用以下命令。

oc get -n dv-project services c-db2u-dv-db2u-engn-svc

检查输出。



NAME                    TYPE     CLUSTER-IP    EXTERNAL-IP PORT(S)                                   AGE
c-db2u-dv-db2u-engn-svc NodePort 172.30.13.109 <none> 50000:30662/TCP,50001:32337/TCP,7777:32178/TCP 2d4h
此示例指示以下映射的端口。
描述 内部端口 外部端口
JDBC SSL 50001 32337
JDBC 非 SSL 50,000 美元 30662
DV 自动发现 7777 32178

设置负载均衡环境的网络需求

通过使用 iptables 实用程序或 firewall-cmd 命令,可以确保表 1 中列出的外部端口及其通信不会被本地防火墙规则或负载均衡器阻塞。

有关检查端口以查找通信块的更多信息,请参阅 Red Hat® 文档中的 使用 NCAT 实用程序管理数据

如果 Cloud Pak for Data 使用负载均衡器,并且您尝试连接到 Data Virtualization 服务时迂到超时错误,请通过更新 /etc/haproxy/haproxy.cfg 文件来增大负载均衡器超时值。 有关更多信息,请参阅 Data Virtualization中的限制和已知问题。

更新 HAProxy 配置文件

如果使用外部基础结构节点将外部 Data Virtualization 流量路由到 Red Hat OpenShift® 集群,那么必须遵循以下步骤将流量转发到集群的主节点。
  1. 在基础结构节点上,打开位于 /etc/haproxy/haproxy.cfg的 HAProxy 配置文件。
  2. 更新 haproxy.cfg 文件以指定端口信息。

    必须直接更新该文件。 请勿复制并粘贴以下代码样本。 haproxy.cfg 文件中指定的值来自集群。 对于供应的每个 Data Virtualization 服务实例,这些值都不同,即使您使用相同的集群或名称空间来供应服务也是如此。

  3. 要获取名称空间的节点端口,请运行以下命令。
    非 SSL
    oc get services -n project-name  c-db2u-dv-db2u-engn-svc -o jsonpath="{.spec.ports[?(@.name=='legacy-server')].nodePort}"
    SSL
    oc get services -n project-name c-db2u-dv-db2u-engn-svc -o jsonpath="{.spec.ports[?(@.name=='ssl-server')].nodePort}"
  4. 要获取集群中每个主节点的 Master<n>-PrivateIP ,请使用以下命令并查看 INTERNAL-IP 列。
    oc get nodes -o wide
  5. 要更新 haproxy.cfg 文件,请确保满足以下需求。
    • 请在 backend 部分中包含集群中的每个主节点,以便在一个主节点停止运行的情况下,可以通过另一个主节点进行连接。
    • 如果集群运行多个名称空间,并且每个名称空间都具有 Data Virtualization 服务实例,那么将唯一地命名该文件中的部分。

      例如,在名称空间 zen中的 Data Virtualizationhaproxy.cfg 文件中有以下部分。 但是,如果您还在名称空间 abc中具有 Data Virtualization 服务实例,那么必须为名称空间 abc添加节点端口,并确保 haproxy.cfg 文件中的部分具有不同的名称, 例如 dv-abc-ssldv-abc-nonssldv-abc-discovery

    defaults
           log                     global
           option                  dontlognull
           option  tcp-smart-accept
           option  tcp-smart-connect
           retries                 3
           timeout queue           1m
           timeout connect         10s
           timeout client          1m
           timeout server          1m
           timeout check           10s
           maxconn                 3000
    
    frontend dv-nonssl
           bind *:NodePort for 50000
           default_backend dv-nonssl
           mode tcp
           option tcplog
    backend dv-nonssl
           balance source
           mode tcp
           server master0 Master0-PrivateIP:NodePort for 50000
           server master1 Master1-PrivateIP:NodePort for 50000
          (repeat for each master node in the cluster)
    
    frontend dv-ssl
           bind *:NodePort for 50001
           default_backend dv-ssl
           mode tcp
           option tcplog
    backend dv-ssl
           balance source
           mode tcp
           server master0 Master0-PrivateIP:NodePort for 50001
           server master1 Master1-PrivateIP:NodePort for 50001
          (repeat for each master node in the cluster)
    
    
    frontend dv-discovery
           bind *:NodePort for 7777
           default_backend dv-discovery
           mode tcp
           option tcplog
    backend dv-discovery
           balance source
           mode tcp
           server master0 Master0-PrivateIP:NodePort for 7777
           server master1 Master1-PrivateIP:NodePort for 7777
          (repeat for each master node in the cluster)
  6. 使用以下命令重新装入 HAProxy 。
    systemctl reload haproxy

定义网关配置以访问孤立的远程连接器

远程连接器充当远程数据源的网关。 如果远程连接器主机对 Cloud Pak for Data 集群具有网络访问权,那么远程连接器会自动联系并连接到集群。 如果未从 HAProxy 和防火墙规则公开自动发现端口,或者如果物理网络配置仅允许从 Cloud Pak for DataData Virtualization 的单向通信 远程连接器,您可能需要手动建立连接。

在部署远程连接器并验证其是否正在主机上运行之后,如果远程连接器未显示在 数据源 > 星座视图 > 中,那么可以使用 API DEFINEGATEWAYS()手动配置从 Data Virtualization 到远程连接器的连接。

  1. 单击 数据 > Data virtualization > 运行 SQL
  2. 运行 DVSYS.DEFINEGATEWAYS() 存储过程。 此存储过程具有一个自变量,该自变量包含运行远程连接器的主机的逗号分隔列表。 在以下示例中,两个远程连接器正在运行; 一个在 host1 上,另一个在 host2上。
    CALL DVSYS.DEFINEGATEWAYS('host1:6414, host2:6414') 

    host1host2 变量替换为远程连接器主机名或 IP 地址。 此示例使用您在生成 dv_endpoint.sh 配置脚本时指定的端口 6414。 要确定要在 DVSYS.DEFINEGATEWAYS() 存储过程中使用的端口映射,请检查远程连接器上的 Queryplex_config.log ,并搜索 GAIAN_NODE_PORT 值,如以下示例中所示。

    GAIAN_NODE_PORT=6414

    如果使用端口转发 (例如, NAT 或 VPN) 到远程连接器,那么必须指定两个端口,如以下示例中所示。

    CALL DVSYS.DEFINEGATEWAYS('host1:37400:6414, host2:37400:6414')

    在此示例中,两个远程连接器在内部的端口 6414 上进行侦听,但主机未向外部公开这些端口。 例如,只能从 Cloud Pak for Data 使用配置为将外部 VPN 端口 37400 映射到内部端口 6414 的 VPN 服务器来访问远程连接器。 定义网关使 Data Virtualization 能够打开与 host1host2上运行的远程连接器的连接。 Data Virtualization 连接到远程主机上的端口 37400 ,而 VPN 将流量转发到远程连接器的内部端口 6414。

正在除去定义的网关配置

如果已定义的网关不再必要或不可访问,那么会对查询性能产生负面影响。 您可以使用 API REMOVEGATEWAYS()来除去网关。 此 API 采用以逗号分隔的网关 ID 参数列表作为单个字符串字面值参数,如以下示例中所示。

CALL DVSYS.REMOVEGATEWAYS('GTW0,GTW2')
注: 此 API 会将网关从使用中除去,但不会删除其配置,因此在您调用 listrdbc时仍会显示该网关。