您提供的步骤描述了在 PostgreSQL 数据库环境中配置服务器间的 SSH 无密码登录和数据库用户认证的过程。这些步骤主要用于设置一个高可用性、负载平衡的数据库集群环境。让我们逐一解释这些步骤的目的和应用场景:

1. 启动 PostgreSQL 服务

systemctl start postgresql-13

这个命令用于启动 PostgreSQL 13 的服务。

2. 创建数据库角色

CREATE ROLE pgpool WITH LOGIN;
CREATE ROLE repl WITH REPLICATION LOGIN;

这些命令在 PostgreSQL 中创建了两个角色:pgpoolreplpgpool 用于连接池管理,而 repl 用于复制(replication)。

3. 设置 SSH 无密码登录

ssh-keygen -t rsa -f id_rsa_pgpool
ssh-copy-id -i id_rsa_pgpool.pub postgres@server1
ssh-copy-id -i id_rsa_pgpool.pub postgres@server2
ssh-copy-id -i id_rsa_pgpool.pub postgres@server3

这些命令生成了一个 SSH 密钥对,并将公钥复制到集群中的其他服务器上。这允许 postgres 用户在不需要输入密码的情况下通过 SSH 访问集群中的其他服务器,这对于管理和自动化任务非常重要。

4. 配置 .pgpass 文件

vi /var/lib/pgsql/.pgpass

.pgpass 文件用于存储数据库连接的凭据,使得脚本和程序能够在不需交互输入密码的情况下连接到数据库。
/var/lib/pgsql/.pgpass 文件用于存储 PostgreSQL 数据库的登录凭据,以便在不需要交互式输入密码的情况下自动登录。这个文件的每一行都包含一个数据库连接的凭据,格式如下:

hostname:port:database:username:password

每个字段的含义如下:

  1. hostname: 数据库服务器的主机名或IP地址。如果适用于所有主机,可以使用 * 代替。
  2. port: 数据库服务器监听的端口。如果适用于所有端口,可以使用 * 代替。
  3. database: 要连接的数据库名称。如果适用于所有数据库,可以使用 * 代替。
  4. username: 连接数据库的用户名。
  5. password: 用户名对应的密码。

例如,如果您想为用户 replserver1, server2, 和 server3 上的 replication 数据库配置自动登录,并且为 postgres 用户在这些服务器上的 postgres 数据库配置自动登录,您的 .pgpass 文件将如下所示:

server1:5432:replication:repl:repl_password
server2:5432:replication:repl:repl_password
server3:5432:replication:repl:repl_password
server1:5432:postgres:postgres:postgres_password
server2:5432:postgres:postgres:postgres_password
server3:5432:postgres:postgres:postgres_password

这里,repl_passwordpostgres_password 应该被替换为实际的密码。

安全注意事项:

  • .pgpass 文件应该被设置为仅由文件拥有者可读,使用命令 chmod 600 /var/lib/pgsql/.pgpass
  • 由于这个文件包含敏感信息,确保它的安全性非常重要。只有必要的用户和应用程序应该能够访问这个文件。
  • 在配置文件时要小心,避免在不安全的环境中泄露凭据。

应用场景

假设您正在设置一个由三个服务器(server1、server2、server3)组成的 PostgreSQL 集群,您可能需要进行以下操作:

  • 数据复制(Replication):使用 repl 角色在主服务器和备份服务器之间同步数据。
  • 负载平衡(Load Balancing):使用 pgpool 或其他工具分配查询负载,优化性能。
  • 自动化任务:例如,数据库备份、监控或其他维护任务,可以通过 SSH 无密码登录在服务器之间自动执行。

通过这些配置,您的数据库环境将支持高可用性和易于管理的特性,使得在出现故障或需要扩展时,您可以更加灵活和迅速地应对。

测试
ssh postgres@server1 -i ~/.ssh/id_rsa_pgpool ls /home

这个命令是在使用 SSH 连接到名为 server1 的服务器,并执行 ls /home 命令来列出 /home 目录的内容。让我们分解这个命令的各个部分:

  1. ssh postgres@server1: 这是一个 SSH 命令,用于通过网络从当前服务器(或计算机)连接到 server1。在这里,postgres 是你将要以其身份登录到 server1 的用户名。

  2. -i ~/.ssh/id_rsa_pgpool: 这个选项指定了私钥文件的位置,用于验证身份。-i 参数告诉 SSH 使用 ~/.ssh/id_rsa_pgpool 私钥文件进行身份验证,而不是默认的私钥文件。这个文件是之前生成的,用于设置无密码 SSH 访问的一部分。

  3. ls /home: 登录到 server1 之后,将执行的命令。ls 是一个列出目录内容的命令,在这种情况下,它被用来列出 server1/home 目录的内容。

总的来说,这个命令允许用户 postgres 使用指定的私钥文件远程登录到 server1,并在那里执行 ls /home 命令来查看 /home 目录中的文件和目录列表。这是远程服务器管理和自动化任务中常见的操作。

12-07 12:05