通过Windows服务

时间:2016-06-17 10:08:50

标签: service postgresql-9.3 pg ctl

我目前正在设置一个c#app,允许我控制Windows 2012服务器上的应用程序。

架构:

主服务器 - Postgres x64 9.3从Windows服务作为读/写数据库运行,具有热备用模式和复制槽。

Slave Server - 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有关机模式,其中" Smart" mode在停止数据库之前等待活动进程并关闭连接等。停止Windows服务也这样做吗?是的,我显然可以使用pg_ctl来实现这一点,但是我要求的是其他任何东西。

是否存在需要针对任何活动复制缓解的风险,或者在服务器同步之前服务是否会保持活动状态? "停止的时间"将在数据库没有大量写入负载的情况下完成,因此应基本保持同步。我也可以在开始"停止"之前测试一下。代码。

目的是让复制的奴隶"生活"但在主服务器停止时仍处于只读从属模式。

提前致谢

0 个答案:

没有答案