2

我目前正在设置 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 来实现这一点,但是我要求的兴趣与其他任何事情一样多。

是否存在需要减轻任何活动复制的风险,或者服务是否会保持活动状态直到服务器同步?“停止”的时间将在数据库没有承受大量写入负载的时候完成,因此应该基本上是同步的。我也可以在启动“停止”代码之前对此进行测试。

目的是让复制的从属“活动”,但在主服务器停止时仍处于只读从属模式。

提前致谢

4

0 回答 0