更新时间:2024-11-28 GMT+08:00
分享

通过内网连接RDS for PostgreSQL实例(Linux方式)

RDS for PostgreSQL实例购买完成后,可以先登录到Linux弹性云服务器,在ECS上安装PostgreSQL客户端,然后执行psql命令行通过PostgreSQL内网IP连接到实例。

通过PostgreSQL客户端连接实例的方式有SSL连接。SSL连接通过了加密功能,具有更高的安全性。

创建RDS for PostgreSQL实例时默认开启SSL,实例创建完成后,不支持关闭。

开启SSL连接数据库实例后,数据库的只读、读写性能是未开启SSL连接数据库实例的80%左右。

操作流程

操作步骤

说明

准备工作

注册华为账号并开通华为云、实名认证、账户充值,以及对RDS进行精细权限管理。

步骤1:购买RDS for PostgreSQL实例

选择RDS for PostgreSQL的基础配置、高级配置信息,购买数据库实例。

步骤2:购买ECS

通过PostgreSQL客户端连接数据库实例时,必须先准备一台服务器,在服务器上安装PostgreSQL客户端并执行连接命令。

购买Linux ECS,并确认ECS实例与RDS for PostgreSQL实例在同一区域、同一VPC内。

步骤3:测试连通性并安装PostgreSQL客户端

测试ECS到RDS for PostgreSQL实例内网IP和端口的网络连通性,并在ECS上安装PostgreSQL客户端。

步骤4:使用命令行连接实例(SSL加密)

使用命令行通过内网IP和端口连接RDS for PostgreSQL实例。

准备工作

  1. 注册华为账号并开通华为云
  2. 完成实名认证。
  3. 购买实例前需要确保账户有足够金额,请参见账户充值
  4. 如果需要对华为云上的资源进行精细管理,请使用统一身份认证服务(Identity and Access Management,简称IAM)创建IAM用户及用户组,并授权,以使得IAM用户获得具体的操作权限,更多操作,请参见创建用户组、用户并授予RDS权限

步骤1:购买RDS for PostgreSQL实例

  1. 进入购买云数据库RDS页面
  2. 在“快速购买”页面,配置实例基础参数。

    下面的配置项仅作为示例,实际购买时根据用户需求选择合适的资源。

    图1 基础配置

    参数

    示例

    参数说明

    计费模式

    按需计费

    实例的计费模式。

    • 包年/包月:一种预付费模式,即先付费再使用,按照订单的购买周期进行结算。购买周期越长,享受的折扣越大。一般适用于需求量长期稳定的成熟业务。
    • 按需计费:一种后付费模式,即先使用再付费,按照云数据库RDS实际使用时长计费,秒级计费,按小时结算。按需计费模式允许您根据实际业务需求灵活地调整资源使用,无需提前预置资源,从而降低预置过多或不足的风险。

    区域

    华北-北京四

    资源所在的区域。

    说明:

    不同区域内的产品内网不互通,且创建后不能更换,请谨慎选择。

    引擎版本

    16

    数据库版本。

    实例类型

    主备

    实例的架构类型。

    主备:采用一主一备的经典高可用架构,主备实例的每个节点的规格保持一致。备机提高了实例的可靠性,创建主机的过程中,会同步创建备机,备机创建成功后,用户不可见。

    性能规格

    通用型 4U8GB

    实例的CPU和内存规格。

    磁盘存储

    SSD云盘 100GB

    实例的存储空间。

    您申请的存储空间会有必要的文件系统开销,这些开销包括索引节点和保留块,以及数据库运行必需的空间。

    磁盘加密

    不加密

    选择加密后会提高数据安全性,但对数据库读写性能有少量影响,请按照您的使用策略进行选择。

    如果使用共享KMS密钥,对应的CTS事件为createdatakey和decrydatakey,仅密钥所有者能够感知到该事件。

  3. 实例高级配置。
    图2 高级配置

    参数

    示例

    参数说明

    虚拟私有云

    default_vpc

    实例所在的虚拟网络环境,可以对不同业务进行网络隔离。

    如果没有可选的虚拟私有云,单击“创建虚拟私有云”,完成创建后单击。具体操作请参见创建虚拟私有云和子网

    子网

    default_subnet

    通过子网提供与其他网络隔离的、可以独享的网络资源,以提高网络安全性。

    安全组

    default

    安全组限制实例的安全访问规则,加强RDS for PostgreSQL与其他服务间的安全访问。

    企业项目

    default

    对于已成功关联企业项目的用户,仅需在“企业项目”下拉框中选择目标项目。

    更多关于企业项目的信息,请参见《企业管理用户指南》

    购买数量

    1

    批量创建实例的个数。

  4. 配置完成后,单击“立即购买”。
  5. 查看购买成功的RDS for PostgreSQL实例。
    图3 购买成功

步骤2:购买ECS

  1. 进入弹性云服务器控制台
  2. 查看是否有符合要求的Linux ECS。

    RDS for PostgreSQL支持以下两种客户端安装方式:

    • 对于PostgreSQL 15及以下版本的实例,推荐通过PostgreSQL客户端连接。该方式对ECS的镜像有要求,详见PostgreSQL社区指导
    • 通过源码安装的方式连接实例。该方式对PostgreSQL版本及ECS的镜像没有要求。
    • 有Linux ECS,执行3
    • 没有Linux ECS,需要购买ECS,购买时选择Linux操作系统,例如CentOS 7。

      由于需要在ECS下载PostgreSQL客户端,因此需要为ECS绑定弹性公网IP(EIP),并且选择与RDS for PostgreSQL实例相同的区域、VPC和安全组,便于RDS for PostgreSQL和ECS网络互通。

      购买Linux弹性云服务器请参考《弹性云服务器用户指南》中“购买弹性云服务器”章节。

  3. 分别查看ECS的区域和VPC,以及RDS for PostgreSQL实例的区域和VPC。确认ECS实例与RDS for PostgreSQL实例处于同一区域、同一VPC内。
    图4 ECS基本信息

    图5 PostgreSQL概览
    • 如果不在同一区域,请重新购买ECS实例。不同区域的云服务之间内网互不相通,无法访问实例。请就近选择靠近您业务的区域,可减少网络时延,提高访问速度。
    • 如果不在同一VPC,可以修改ECS的VPC,请参见切换虚拟私有云

步骤3:测试连通性并安装PostgreSQL客户端

  1. 登录ECS实例,请参见《弹性云服务器用户指南》中“Linux弹性云服务器远程登录(VNC方式)”。
  2. 在RDS“实例管理”页面,单击实例名称进入“概览”页面。
  3. 选择“连接管理”,在“连接信息”模块获取实例的内网地址和数据库端口。
    图6 连接信息
  4. 在ECS上测试是否可以正常连接到RDS for PostgreSQL实例内网地址的端口。

    telnet 192.168.0.7 5432

    • 如果可以通信,说明网络正常。
    • 如果无法通信,请检查安全组规则。
      • 查看ECS的安全组的出方向规则,如果目的地址不为“0.0.0.0/0”且协议端口不为“全部”,需要将RDS实例的内网IP地址和端口添加到出方向规则。
        图7 ECS的安全组
      • 查看RDS的安全组的入方向规则,需要将ECS实例的私有IP地址和端口添加到入方向规则,具体操作请参见设置安全组规则
  5. 安装PostgreSQL客户端。

    PostgreSQL社区提供了针对不同操作系统的客户端安装方法。通过操作系统的安装工具直接下载安装。此安装方式比较简单,但是对ECS操作系统有要求,只有PostgreSQL社区中支持的操作系统才可以使用该安装方式。

    使用操作系统默认安装,当前使用的Linux操作系统是CentOS 7,通过工具安装最高版本是15版本。

    图8 获取安装工具

    执行安装命令:

    sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
    sudo yum install -y postgresql15-server

    查看是否安装成功:

    psql -V
    图9 安装成功
  1. 登录ECS实例,请参见《弹性云服务器用户指南》中“Linux弹性云服务器远程登录(VNC方式)”。
  2. 在RDS“实例管理”页面,单击实例名称进入“概览”页面。
  3. 选择“连接管理”,在“连接信息”模块获取实例的内网地址和数据库端口。
    图10 连接信息
  4. 在ECS上测试是否可以正常连接到RDS for PostgreSQL实例内网地址的端口。

    telnet 192.168.0.7 5432

    • 如果可以通信,说明网络正常。
    • 如果无法通信,请检查安全组规则。
      • 查看ECS的安全组的出方向规则,如果目的地址不为“0.0.0.0/0”且协议端口不为“全部”,需要将RDS实例的内网IP地址和端口添加到出方向规则。
        图11 ECS的安全组
      • 查看RDS的安全组的入方向规则,需要将ECS实例的私有IP地址和端口添加到入方向规则,具体操作请参见设置安全组规则
  5. 安装PostgreSQL客户端。

    源码安装方式,该安装方式对RDS for PostgreSQL实例的版本以及ECS的操作系统没有限制。

    下面以使用Huawei Cloud EulerOS 2.0镜像的ECS为例,安装RDS for PostgreSQL 16.4版本客户端。

    图12 查看ECS镜像
    1. 要支持SSL,需要在ECS上提前下载openssl。

      sudo yum install -y openssl-devel

    2. 官网获取代码下载链接,使用wget直接下载安装包或者下载到本地后上传到ECS上。

      wget https://ftp.postgresql.org/pub/source/v16.4/postgresql-16.4.tar.gz

    3. 解压安装包。

      tar xf postgresql-16.4.tar.gz

    4. 编译安装。

      cd postgresql-16.4

      ./configure --without-icu --without-readline --without-zlib --with-openssl

      make -j 8 && make install

      不指定--prefix,表示默认路径为“/usr/local/pgsql”,因为只安装客户端采用最简安装。

      图13 编译安装
    5. 配置环境变量,在“/etc/profile”文件中添加以下内容。

      export PATH=/usr/local/pgsql/bin:$PATH

      export LD_LIBRARY_PATH=/usr/local/pgsql/lib:$LD_LIBRARY_PATH

      source /etc/profile

    6. 测试psql是否可使用。

      psql -V

      图14 测试psql可用

步骤4:使用命令行连接实例(SSL加密)

  1. 在RDS“实例管理”页面,单击实例名称进入“概览”页面。
  2. 选择“连接管理”。
  3. 在“连接信息”模块,单击“SSL”处的,下载“Certificate Download”压缩包,解压后获取根证书(ca.pem)和捆绑包(ca-bundle.pem)。
    图15 下载证书
  4. 将根证书(ca.pem)上传到ECS。
    • 推荐使用TLS v1.2及以上协议,低于该版本可能存在安全风险。
    • 协议算法推荐使用EECDH+ECDSA+AESGCM:EECDH+aRSA+AESGCM:EDH+aRSA+AESGCM:EDH+aDSS+AESGCM:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!SRP:!RC4,使用其他选项可能存在安全风险。
    • 根证书捆绑包(ca-bundle.pem)包含2017年4月之后的新根证书和原有根证书。
    • ca.pem和ca-bundle.pem都可以实现SSL连接,ca-bundle.pem文件包含ca.pem,使用ca.pem即可。
  5. 在ECS上执行以下命令连接RDS for PostgreSQL实例。

    psql --no-readline -h <host> -p <port> "dbname=<database> user=<user> sslmode=verify-ca sslrootcert=<ca-file-directory>"

    示例:

    psql --no-readline -h 192.168.0.7 -p 5432 "dbname=postgres user=root sslmode=verify-ca sslrootcert=/root/ca.pem"

    表1 参数说明

    参数

    说明

    <host>

    3中获取的内网地址。

    <port>

    3中获取的数据库端口,默认5432。

    <database>

    需要连接的数据库名,默认的管理数据库是postgres。

    <user>

    管理员账号root。

    <ca-file-directory>

    SSL连接CA证书路径,该文件需放在执行该命令的路径下。

    sslmode

    SSL连接模式,设置为“verify-ca”,通过检查证书链(Certificate Chain,以下简称CA)来验证服务是否可信任。

  6. 出现如下提示时,输入数据库账号对应的密码。
    Password:
    出现如下信息,表示连接成功。
    SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256, compression: off)

后续操作

登录实例后,您可以创建数据库,进行数据迁移等操作,具体请参见:

相关文档