创建外部服务器
本章节包含创建OBS外部服务器和创建HDFS外部服务器。
创建OBS外部服务器的步骤如下:
创建外部服务器
- 使用即将创建外部服务器的用户去连接其对应的数据库。
在本示例中,将使用(可选)新建用户及数据库并授予外表权限中创建的普通用户dbuser连接其创建的数据库mydatabase 。用户需要通过GaussDB(DWS)提供的数据库客户端连接数据库。
例如,使用gsql客户端的用户可以通过以下两种方法中的一种进行连接:
- 如果已经登录了gsql客户端,可以执行以下命令切换数据库和用户:
1
\c mydatabase dbuser;
根据提示输入密码。
- 如果尚未登录gsql客户端,或者已经登录了gsql客户端执行“\q”退出gsql后,执行以下命令重新进行连接:
1
gsql -d mydatabase -h 192.168.2.30 -U dbuser -p 8000 -r
根据提示输入密码。
- 如果已经登录了gsql客户端,可以执行以下命令切换数据库和用户:
- 创建外部服务器。
例如,执行以下命令创建外部服务器“obs_server”:
认证用的AK和SK硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全。
1 2 3 4 5 6 7 8
CREATE SERVER obs_server FOREIGN DATA WRAPPER dfs_fdw OPTIONS ( address 'obs.cn-north-1.myhuaweicloud.com' , ACCESS_KEY 'access_key_value_to_be_replaced', SECRET_ACCESS_KEY 'secret_access_key_value_to_be_replaced', encrypt 'on', type 'obs' );
以下为必选参数的说明:
- 外部服务器名称
允许用户自定义名字。
在本例中指定为“obs_server” 。
- FOREIGN DATA WRAPPER
fdw_name的名字可以是hdfs_fdw或者dfs_fdw,它在数据库中已经存在。
- OPTIONS参数
- address
指定OBS服务的终端节点。
address的获取方法如下:
- 访问密钥(AK和SK)(必选)
GaussDB(DWS)需要通过访问密钥(AK和SK)访问OBS,因此,必须先获取访问密钥。
- “access_key”(必选):表示用户的AK信息。
- “secret_access_key”(必选):表示用户的SK信息。
获取访问密钥的具体步骤,请参见创建访问密钥(AK和SK)。
- type
取值为“obs”,表示dfs_fdw连接的是OBS。
- address
- 外部服务器名称
- 查看外部服务器:
1
SELECT * FROM pg_foreign_server WHERE srvname='obs_server';
返回结果如下所示,表示已经创建成功:
1 2 3 4 5 6
srvname | srvowner | srvfdw | srvtype | srvversion | srvacl | srvoptions ------------+----------+--------+---------+------------+--------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------- obs_server | 24661 | 13686 | | | | {address=xxx.xxx.x.xxx,access_key=xxxxxxxxxxxxxxxxxxxx,type=obs,secret_access_key=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx} (1 row)
创建HDFS外部服务器的操作步骤如下:
手动创建外部服务器
- 使用数据库管理员通过GaussDB(DWS)提供的数据库客户端连接默认数据库postgres。
例如:通过gsql客户端登录数据库的用户可以使用以下两种方法中的一种进行连接:
可以通过以下两种方法中的一种进行连接:
- 如果已经登录了gsql客户端,可以执行以下命令切换数据库和用户:
1
\c postgres dbadmin;
根据提示输入密码。
- 如果尚未登录gsql客户端,或者已经登录了gsql客户端执行\q退出gsql后,执行以下命令重新进行连接:
1
gsql -d postgres -h 192.168.2.30 -U dbadmin -p 8000 -W password -r
- 如果已经登录了gsql客户端,可以执行以下命令切换数据库和用户:
- 执行以下命令查询自动创建的外部服务器的信息:
1
SELECT * FROM pg_foreign_server;
返回结果如下:
1 2 3 4 5 6
srvname | srvowner | srvfdw | srvtype | srvversion | srvacl | srvoptions --------------------------------------------------+----------+--------+---------+------------+--------+--------------------------------------------------------------------------------------------------------------------- gsmpp_server | 10 | 13673 | | | | gsmpp_errorinfo_server | 10 | 13678 | | | | hdfs_server_8f79ada0_d998_4026_9020_80d6de2692ca | 16476 | 13685 | | | | {"address=192.168.1.245:25000,192.168.1.218:25000",hdfscfgpath=/MRS/8f79ada0-d998-4026-9020-80d6de2692ca,type=hdfs} (3 rows)
查询结果中,每一行代表一个外部服务器的信息。与MRS数据源连接相关联的外部服务器包含以下信息:
- srvname值包含“hdfs_server”字样以及MRS集群的ID,此ID与MRS管理控制台的集群列表MRS ID相同。
- srvoptions字段中的address参数为MRS集群的主备节点的IP地址及端口。
您可以根据上述信息找到您所要的外部服务器,并记录下它的srvname和srvoptions的值。
- 切换为即将创建外部服务器的用户去连接其对应的数据库。
在本示例中,执行以下命令,使用创建用户和数据库并授予外表权限中创建的普通用户dbuser连接其创建的数据库mydatabase:
1
\c mydatabase dbuser;
- 创建外部服务器。
创建外部服务器的详细语法,请参见CREATE SERVER。示例如下:
1 2 3 4 5 6 7
CREATE SERVER hdfs_server_8f79ada0_d998_4026_9020_80d6de2692cahdfs_server FOREIGN DATA WRAPPER HDFS_FDW OPTIONS ( address '192.168.1.245:25000,192.168.1.218:25000', hdfscfgpath '/MRS/8f79ada0-d998-4026-9020-80d6de2692ca', type 'hdfs' );
以下为必选参数的说明:
- 外部服务器名称
在本例中,指定为前面的2中记录下来的srvname字段的值,如'hdfs_server_8f79ada0_d998_4026_9020_80d6de2692ca'。
不同的数据库之间资源是隔离的,因此在不同的数据库中外部服务器名称可以相同。
- FOREIGN DATA WRAPPER
- OPTIONS参数
- 外部服务器名称
- 查看外部服务器:
1
SELECT * FROM pg_foreign_server WHERE srvname='hdfs_server_8f79ada0_d998_4026_9020_80d6de2692ca';
返回结果如下所示,表示已经创建成功:
1 2 3 4
srvname | srvowner | srvfdw | srvtype | srvversion | srvacl | srvoptions --------------------------------------------------+----------+--------+---------+------------+--------+--------------------------------------------------------------------------------------------------------------------- hdfs_server_8f79ada0_d998_4026_9020_80d6de2692ca | 16476 | 13685 | | | | {"address=192.168.1.245:25000,192.168.1.218:25000",hdfscfgpath=/MRS/8f79ada0-d998-4026-9020-80d6de2692ca,type=hdfs} (1 row)