在 CentOS 6.9 上进行 PostgreSQL 12 离线安装的步骤

一、在 CentOS 6.9 离线安装 PostgreSQL 12 所需的依赖软件包

需要在 CentOS 6.9 离线安装 PostgreSQL 12 所需的依赖软件包,可以按照以下步骤操作:

  1. 在具有 Internet 连接的计算机上,使用以下命令下载所有依赖软件包及其依赖项:
yum install --downloadonly --downloaddir=<下载目录> openssl-devel readline-devel zlib-devel libicu-devel

注意:<下载目录> 是你想要下载软件包的目录路径。
或者可以找到系统安装的ISO镜像找到rpm安装包。

  1. 将下载的软件包传输到目标 CentOS 6.9 计算机,可以使用 USB 或其他可移动存储设备,或使用 scp 命令将软件包上传到目标服务器。
  2. 在目标 CentOS 6.9 计算机上,使用以下命令安装这些离线软件包:
rpm -Uvh <软件包名称>.rpm

注意:<软件包名称> 是你下载的每个 RPM 软件包的名称,例如 openssl-devel-1.0.x-x.el6.x86_64.rpm

二、安装完依赖软件包后, PostgreSQL 12 的离线安装

注意:为了确保所有依赖关系都得到满足,请务必按照正确的顺序安装依赖软件包,并检查每个软件包的依赖项。

  1. 下载二进制包:从 PostgreSQL 官方网站 https://www.postgresql.org/download/linux/redhat/ 下载适用于 CentOS 6.9 的 PostgreSQL 12 二进制包。你需要下载4个二进制包,分别是 postgresql12-12.14-1PGDG.rhel6.x86_64.rpmpostgresql12-libs-12.x-x.rhel6.x86_64.rpmpostgresql12-server-12.x-x.rhel6.x86_64.rpmpostgresql12-contrib-12.x-x.rhel6.x86_64.rpm
  2. 安装依赖软件包:PostgreSQL 12 需要安装一些依赖的软件包,例如 libpq.so.5、libicui18n.so.42 等。你可以使用以下命令安装这些软件包:
yum install -y openssl-devel readline-devel zlib-devel libicu-devel
  1. 解压并安装二进制包:通过以下命令解压下载的二进制包,并将其安装到 /usr/local/pgsql 目录下:
mkdir -p /usr/local/pgsql/data
rpm -ivh postgresql12-libs-12.x-x.rhel6.x86_64.rpm
rpm -ivh postgresql12-12.14-1PGDG.rhel6.x86_64.rpm
rpm -ivh postgresql12-server-12.x-x.rhel6.x86_64.rpm
rpm -ivh postgresql12-contrib-12.x-x.rhel6.x86_64.rpm
  1. 初始化数据库:使用以下命令初始化一个空的 PostgreSQL 数据库实例:
service postgresql-12 initdb
chkconfig postgresql-12 on
  1. 启动 PostgreSQL:运行以下命令启动 PostgreSQL 服务器:
service postgresql-12 start

此时,你已经成功地在 CentOS 6.9 上完成了 PostgreSQL 12 的离线安装。

三、创建用于备份用户

replicauser 用户是用于从主服务器上访问复制数据的。你需要在主服务器上创建此用户,并授予它适当的权限。

可以使用以下步骤创建 replicauser 用户:

  1. 在主服务器上登录到 PostgreSQL 数据库,例如:
psql -U postgres
  1. 使用以下命令创建一个名为 replicauser 的新用户:
CREATE USER replicauser REPLICATION LOGIN PASSWORD 'password';

这里,我们将用户名称设置为 replicauser,密码设置为 password。请确保密码足够强和安全!

  1. 授予 replicauser 用户访问复制数据所需的权限,例如:
ALTER ROLE replicauser WITH REPLICATION;

这会授予 replicauser 用户具有流复制权限。

完成上述步骤后,在主服务器的 pg_hba.conf 文件中添加以下行,以允许 replicauser 用户使用 md5 认证方法通过 IP 地址连接到该服务器:

host    replication     replicauser      <从服务器IP>/32         md5

这里,<从服务器IP> 是指允许连接到主服务器的从服务器的 IP 地址或域名,replication 是要连接到主服务器的从服务器的名称。

四、在 PostgreSQL 中配置主从流复制需要执行以下步骤:

  1. 配置主服务器
    在主服务器上修改 postgresql.conf 文件。找到以下行并取消注释:
listen_addresses = '*'
wal_level = replica
max_wal_senders = 5
archive_mode = on
archive_command = 'cp %p /path/to/archive/%f'

这里,我们将 listen_addresses 参数设置为*,以便允许所有 IP 地址连接到该服务器。wal_level 参数设置为 replica,表示 WAL 日志将包含足够的信息可用于回放新建从服务器时已提交的事务。max_wal_senders 参数控制可以同时运行的流复制进程数量。archive_mode 参数启用归档模式,它会将 WAL 日志文件保存在另一个地方。archive_command 指定了如何处理 WAL 文件的命令。

修改 pg_hba.conf 文件,添加从服务器的 IP 地址或域名。例如:

host    replication     replicauser      <从服务器IP>/32         md5

其中,replication 是要连接到主服务器的从服务器的名称。replicauser 是用于认证的用户名,<从服务器IP> 是从服务器的 IP 地址或域名。

  1. 配置从服务器
    在从机上,创建复制段文件:
pg_basebackup -D /var/lib/postgresql/12/data -h 主机IP -U replicator -v -P

在从服务器上修改 postgresql.conf 文件。找到以下行并取消注释:

listen_addresses = '*'
hot_standby = on

这里,我们将 listen_addresses 参数设置为 *,以允许从服务器接收来自任何 IP 地址的连接。hot_standby 参数启用热备,使从服务器可以读取 WAL 日志并进行流复制。

在从服务器上创建 recovery.conf 文件,并添加以下内容:

standby_mode = 'on'
primary_conninfo = 'host=<主服务器IP> port=5432 user=replicauser password=password'
restore_command = 'cp /path/to/archive/%f "%p"'
trigger_file = '/tmp/postgresql.trigger'

其中,standby_mode 表示从服务器是一个备用服务器。primary_conninfo 指定要连接的主服务器的 IP 地址、端口、用户名和密码。restore_command 指定如何从归档中检索数据文件。trigger_file 是一个文件路径,如果此文件存在,则从服务器将停止从主服务器复制。

  1. 启动主服务器和从服务器
    在主服务器上启动 PostgreSQL 服务,然后在从服务器上启动 PostgreSQL 服务。从服务器将开始接收来自主服务器的日志流,并将其应用于本地数据库。

这样,你就成功地配置了 PostgreSQL 主从流复制。

主备切换

PostgreSQL 12支持流复制,因此,在主备切换期间,您可以使用从服务器(备服务器)来提供服务。在从服务器成为新的主服务器之前,需要进行一些准备工作。

以下是在 PostgreSQL 12 中进行主备切换的步骤:

  1. 确认主服务器已经宕机并不会再恢复。
  2. 在从服务器上检查复制状态:
SELECT * FROM pg_stat_replication;
  1. 停止客户端连接到从服务器;
  2. 将从服务器设置为独立模式,以防止从服务器尝试重新连接到已经挂掉的主服务器:
SELECT pg_wal_replay_pause();
  1. 带有参数 “-w” 的 pg_ctl promote 命令,将从服务器提升为主服务器:
sudo pg_ctl -D /path/to/postgresql/data promote -w
  1. 再次在从服务器上检查复制状态,并确保其已成为新的主服务器:
SELECT * FROM pg_stat_replication;
  1. 更新客户端连接信息以连接到新的主服务器。
  2. 最后,恢复从服务器的复制流程,以便将未同步的更改从新主服务器复制到其他从服务器:
SELECT pg_wal_replay_resume();

以上是基于流复制的主备切换方法。请注意,在实际生产环境中执行此操作之前,请务必先备份数据库,以防止数据丢失。