我目前正在设置 ac# 应用程序以允许我控制 Windows 2012 服务器上的应用程序。
建筑学:
主服务器 - Postgres x64 9.3 从 Windows 服务作为读/写数据库运行,具有热备用模式和复制槽。
从服务器 - Postgres x64 9.3 通过复制槽从 Windows 服务作为只读热备用服务器运行。
我计划使用以下代码停止服务:
service = new ServiceController("postgresql-x64-9.4");
try
{
TimeSpan timeout = TimeSpan.FromMilliseconds(5000);
service.Stop();
service.WaitForStatus(ServiceControllerStatus.Stopped, timeout);
log.writeLog(data, "success", "Postgres Stopped");
}
catch (Exception e)
{
log.writeLog(data, "ERROR", e.Message + " - " + e.InnerException);
msg = Encoding.ASCII.GetBytes("ERROR");
break;
}
但是,我想知道这对于两个数据库的完整性是否安全。
我知道 pg_ctl 具有关闭模式,其中“智能”模式在停止数据库之前等待活动进程并关闭连接等。停止windows服务也一样吗?是的,我显然可以使用 pg_ctl 来实现这一点,但是我要求的兴趣与其他任何事情一样多。
是否存在需要减轻任何活动复制的风险,或者服务是否会保持活动状态直到服务器同步?“停止”的时间将在数据库没有承受大量写入负载的时候完成,因此应该基本上是同步的。我也可以在启动“停止”代码之前对此进行测试。
目的是让复制的从属“活动”,但在主服务器停止时仍处于只读从属模式。
提前致谢