主服务器中的设置:
max_wal_senders = 1 wal_level = '存档' 存档模式 = 开启 archive_command = 'cd .' wal_keep_segments = 10000
从服务器中的设置:在 recovery.conf 文件中:
待机模式 = '开' primary_conninfo = '主机=主用户的IP地址=repuser' trigger_file = '/tmp/postgresql.trigger.5432'
log_connections=on
在主服务器和从服务器上都设置了
在主服务器的 pg_hba.conf 文件中为复制用户创建条目
主机复制 repuser ipaddress/32 trust
尝试复制时出现以下错误
2014-07-14 19:28:22 IST LOG:数据库系统在 2014-07-14 19:28:21 IST 在恢复中关闭 2014-07-14 19:28:22 IST LOG:进入待机模式 2014-07-14 19:28:22 IST 警告:WAL 是使用 wal_level=minimal 生成的,数据可能丢失 2014-07-14 19:28:22 IST 提示:如果您临时设置 wal_level=min imal 而不进行新的基本备份,则会发生这种情况。 2014-07-14 19:28:22 IST LOG:在 0/19FFE28 达到一致的恢复状态 2014-07-14 19:28:22 IST LOG:0/19FFE28 长度为零的记录 2014-07-14 19:28:22 IST FATAL:数据库系统标识符在主数据库和备用数据库之间不同 2014-07-14 19:28:22 IST 详细信息:主节点的标识符是 6022019027749040119 ,备用节点的标识符是 6033562405193904122。 2014-07-14 19:28:23 IST LOG:收到连接:主机=[本地] 2014-07-14 19:28:23 IST FATAL:数据库系统正在启动 2014-07-14 19:28:24 IST LOG:收到连接:主机=[本地] 2014-07-14 19:28:24 IST FATAL:数据库系统正在启动 2014-07-14 19:28:25 IST LOG:收到连接:主机=[本地] 2014-07-14 19:28:25 IST FATAL:数据库系统正在启动 2014-07-14 19:28:26 IST LOG:收到连接:主机=[本地] 2014-07-14 19:28:26 IST FATAL:数据库系统正在启动 2014-07-14 19:28:27 IST LOG:收到连接:主机=[本地] 2014-07-14 19:28:27 IST FATAL:数据库系统正在启动 “postgresql-2014-07-14_192822.log”6630L、756429C 2014-07-14 19:28:22 IST LOG:数据库系统在 2014-07-14 19:28:21 IST 恢复时关闭 2014-07-14 19:28:22 IST LOG:进入待机模式 2014-07-14 19:28:22 IST 警告:WAL 是使用 wal_level=minimal 生成的,数据可能丢失 2014-07-14 19:28:22 IST 提示:如果您临时设置 wal_level=minimal 而不进行新的基本备份,则会发生这种情况。 2014-07-14 19:28:22 IST LOG:在 0/19FFE28 达到一致的恢复状态 2014-07-14 19:28:22 IST LOG:0/19FFE28 长度为零的记录 2014-07-14 19:28:22 IST FATAL:主数据库和备用数据库系统标识符不同 2014-07-14 19:28:22 IST 详细信息:主节点的标识符是 6022019027749040119,备用节点的标识符是 6033562405193904122。 2014-07-14 19:28:23 IST LOG:收到连接:主机=[本地] 2014-07-14 19:28:23 IST FATAL:数据库系统正在启动 2014-07-14 19:28:24 IST LOG:收到连接:主机=[本地] 2014-07-14 19:28:24 IST FATAL:数据库系统正在启动 2014-07-14 19:28:25 IST LOG:收到连接:主机=[本地] 2014-07-14 19:28:25 IST FATAL:数据库系统正在启动 2014-07-14 19:28:26 IST LOG:收到连接:主机=[本地] 2014-07-14 19:28:26 IST FATAL:数据库系统正在启动 2014-07-14 19:28:27 IST LOG:收到连接:主机=[本地] 2014-07-14 19:28:27 IST FATAL:数据库系统正在启动 2014-07-14 19:28:28 IST LOG:收到连接:主机=[本地] 2014-07-14 19:28:28 IST FATAL:数据库系统正在启动 2014-07-14 19:28:29 IST LOG:收到连接:主机=[本地] 2014-07-14 19:28:29 IST FATAL:数据库系统正在启动 2014-07-14 19:28:30 IST 日志:收到连接:主机=[本地] 2014-07-14 19:28:30 IST FATAL:数据库系统正在启动 2014-07-14 19:28:31 IST LOG:收到连接:主机=[本地] 2014-07-14 19:28:31 IST FATAL:数据库系统正在启动 2014-07-14 19:28:32 IST LOG:收到连接:主机=[本地] 2014-07-14 19:28:32 IST FATAL:数据库系统正在启动 2014-07-14 19:28:33 IST LOG:收到连接:主机=[本地] 2014-07-14 19:28:33 IST FATAL:数据库系统正在启动 2014-07-14 19:28:34 IST LOG:收到连接:主机=[本地] 2014-07-14 19:28:34 IST FATAL:数据库系统正在启动 2014-07-14 19:28:35 IST LOG:收到连接:主机=[本地] 2014-07-14 19:28:35 IST FATAL:数据库系统正在启动 2014-07-14 19:28:36 IST LOG:收到连接:主机=[本地] 2014-07-14 19:28:36 IST FATAL:数据库系统正在启动 2014-07-14 19:28:37 IST LOG:收到连接:主机=[本地] 2014-07-14 19:28:37 IST FATAL:数据库系统正在启动 2014-07-14 19:28:37 IST FATAL:数据库系统标识符在主数据库和备用数据库之间不同 2014-07-14 19:28:37 IST 详细信息:主节点的标识符是 6022019027749040119,备用节点的标识符是 6033562405193904122。 2014-07-14 19:28:38 IST LOG:收到连接:主机=[本地] 2014-07-14 19:28:38 IST FATAL:数据库系统正在启动 2014-07-14 19:28:39 IST 日志:收到连接:主机=[本地] IST FATAL:数据库系统标识符在主数据库和备用数据库之间不同 2014-07-14 19:28:37 IST 详细信息:主节点的标识符是 6022019027749040119,备用节点的标识符是 6033562405193904122。
这些线是什么意思?
当我运行这个命令
service postgresql-9.3 start
我在 startup.log 文件中收到以下错误
2014-07-15 11:25:59 IST FATAL:锁定文件“postmaster.pid”已经存在 2014-07-15 11:25:59 IST 提示:另一个 postmaster (PID 25961) 是否在数据目录“/opt/postgres/PostgreSQL/9.3/data”中运行?
扩展问题
我们是 Postgresql 开源的新手。我们无法理解这个问题的答案。如果可能,请简要说明。我们已按照“Postgresql 9 Administration Cook book”一书的说明进行操作。我们遵循本书中的这些步骤。
执行以下步骤:
确定您的主节点和备用节点,并确保它们已根据最佳实践方案进行配置。
配置复制安全。在 Master 节点上创建或确认复制用户的存在
CREATE USER repuser SUPERUSER LOGIN CONNECTION LIMIT 1 ENCRYPTED PASSWORD 'changeme';
允许复制用户进行身份验证。以下示例允许使用加密密码验证从任何 ip 地址访问;您可能希望考虑更多限制性选项。添加以下行:
host replication repuser 127.0.0.1/0 md5
在 master 和 Standby 上的 postgresql.conf 中设置日志记录选项,以便您获得有关复制连接尝试和相关故障的更多信息。
log_connections = on
在 Master in 上设置 max_wal_senders
postgresql.conf
,如果值已经非零,则增加。max_wal_senders = 1 wal_mode = 'archive' archive_mode = on archive_command = 'cd .'
在 postgresql.conf 中调整 Master 上的 wal_keep_segments。将此值设置为不高于挂载 pg_xlog 目录的驱动器上的可用空间量除以 16MB 的值。如果 pg_xlog 没有安装在单独的驱动器上,那么不要假设所有当前可用空间都可用于事务日志文件。
wal_keep_segments = 10000 # e.g. 160 GB
如果需要,调整热备参数(见后面的配方)
进行基本备份,与备份章节中描述的进行物理备份的过程非常相似。
一个。开始备份
psql -c "select pg_start_backup('base backup for streaming rep')"
湾。复制数据文件(不包括 pg_xlog 目录)
rsync -cva --inplace --exclude=*pg_xlog* \ ${PGDATA}/ $STANDBYNODE:$PGDATA
C。停止备份
psql -c "select pg_stop_backup(), current_timestamp"
recovery.conf
在 Standby 上设置参数。请注意,primary_conninfo 不能指定数据库名称,但可以包含任何其他 PostgreSQL 连接选项。另请注意,recovery.conf 中的所有选项都用引号括起来,而 postgresql.conf 参数则不需要。Standby_mode = 'on' primary_conninfo = 'host=192.168.0.1 user=repuser' trigger_file = '/tmp/postgresql.trigger.5432'
启动备用服务器
仔细监控复制延迟,直到追赶期结束。在最初的追赶期间,复制延迟将比我们通常预期的要高得多。建议您仅在初始期间设置 hot_Standby = off。
您似乎试图从一台服务器复制到另一台未使用原始服务器副本设置的服务器。这就是为什么:
因为每个新
initdb
的 PostgreSQL 都会获得一个新的随机系统标识符。当您复制现有的 PostgreSQL 安装时,它会保留相同的系统标识符。这就是 PostgreSQL 可以跟踪一台服务器是否可以从另一台服务器重播 WAL 的方式。如果副本是主副本(例如文件系统级备份),则只能使用物理复制
pg_basebackup
。有关详细信息,请参阅手册中有关复制的详细介绍。更新:
上面显示的说明应该没问题,但它们并没有尽可能清晰。
备用服务器的数据目录应该被您在第 8 步创建的基本备份替换,如果它首先存在的话。
您不能在不替换其数据目录的情况下将现有 PostgreSQL 实例变为另一个实例的备用实例。您需要主数据目录的副本来运行备用。设置它的一种常见方法是获取现有的备用数据库,删除其数据目录,将其替换为主数据库数据目录的副本,然后将其配置为复制从属。这就是我认为第 8 步应该做的事情。
而不是这样做,我认为您可能使用了从属服务器的现有数据目录并尝试将其作为主服务器的副本启动。那将不起作用,并且会导致您显示的错误。
有关复制的主要 PostgreSQL 文档是推荐的主要信息资源。我建议先去那里。
您可能还想查看repmgr,它有助于自动执行复制和故障转移任务。