我已经使用 PG Pool 设置了两台服务器来为 web 应用程序创建 HA 设置。
PGPool 和 postgres 在两台服务器上运行,使用从服务器 1 到服务器 2 的流式复制。每台机器上的 webapp 连接到 PgPool,然后将请求发送到当前主服务器。如果数据库连接中断,它被设置为自动故障转移,它运行自定义故障转移脚本将服务器 1 降级为从服务器并将服务器 2 提升为主服务器。
今天早上发生的事情是,网络中断了 2 分钟,这意味着两个 PGPool 实例都无法相互通信 - 因此每个 PGPool 都认为另一台机器出现故障。
服务器 1 - 继续作为主服务器,断开服务器 2
服务器 2 - 启动故障转移,断开服务器 1 并使其自己成为主服务器
由于网络关闭,故障转移命令无法通过服务器 1 使其成为从服务器,反之亦然。因此,当网络在 2 分钟后恢复正常时,我所拥有的是两台服务器,它们都认为自己是主服务器。
PgPool 似乎没有自动故障回复命令,可以用来在网络重新连接时强制服务器 1 再次成为主服务器,这是我能想到的唯一真正的解决方案。
我的问题是我应该如何处理这种情况?这甚至是此设置的正确架构吗?当然,这是一个常见的情况,我无法理解如何解决这种问题。
编辑:是否建议 pgpool 在 linux-ha 下的虚拟 ip 下运行?这可以解决问题,而且我已经为公共 IP 启动并运行了它——这样,任何一台机器都只能访问一个 pgpool 实例。
这似乎是一个简单的问题,但尽管多次查阅起搏器文档,我似乎还是找不到答案。
我已经使用起搏器设置了 corosync 以共享虚拟 IP。我想要做的就是在备份节点接管资源之前设置一个超时值。如果网络中断 <1-2 分钟,我希望起搏器继续正常运行,而不是触发故障转移,但如果中断超过一定数量,则将其切换。
资源超时 - 但这似乎是等待资源启动的超时,而不是整个集群的超时。
我目前正在开发需要各种远程站点安全连接到我们的服务器以访问基本 web 应用程序的软件。
到目前为止,我一直在研究客户端/服务器 VPN 设置——它当然非常安全,但是在 Windows/Linux 连接、客户端计算机之间的路由以及需要额外的客户端服务器/硬件等方面存在很多困难.
我现在认为,如果严格限制在授权的 IP 范围内,允许使用用户名/密码进行 SSL Web 访问是可以接受的 - 我认为这个设置不安全,有 ip 欺骗等,但我找不到任何人警告它。
我的问题是这有多安全?有人可以欺骗客户端 IP 并设法连接吗?这与 VPN 相比如何?
我不确定这里发生了什么:
我有一个在 root 下运行良好的备份脚本。它会在正确的目录中生成一个 >300kb 的数据库转储。
但是,当使用完全相同的命令将其作为 cron 作业运行时,会出现一个空的 gzip 文件,其中没有任何内容。
cron 日志显示没有错误,只是命令已运行。
这是脚本:
#! /bin/bash
DIR="/opt/backup"
YMD=$(date "+%Y-%m-%d")
su -c "pg_dump -U postgres mydatabasename | gzip -6 > "$DIR/database_backup.$YMD.gz" " postgres
# delete backup files older than 60 days
OLD=$(find $DIR -type d -mtime +60)
if [ -n "$OLD" ] ; then
echo deleting old backup files: $OLD
echo $OLD | xargs rm -rfv
fi
Run Code Online (Sandbox Code Playgroud)
当改为:
pg_dump -U postgres mydatabasename | gzip -6 > "$DIR/database_backup.$YMD.gz"
Run Code Online (Sandbox Code Playgroud)
同样的事情发生。
和 cron 工作: …