Остановить Postgres через службу Windows

В настоящее время я настраиваю приложение 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 для достижения этой цели, однако я прошу интереса так же, как и все остальное.

Существуют ли риски, которые необходимо уменьшить в отношении любой активной репликации, или служба будет работать до тех пор, пока серверы не будут синхронизированы? Время "остановки" будет выполнено в момент, когда базы данных не находятся под большой нагрузкой записи, поэтому должны быть по существу синхронизированы. Я также могу проверить это, прежде чем запустить код "Стоп".

Намерение состоит в том, чтобы оставить реплицированное ведомое устройство "живым", но все еще в режиме ведомого только для чтения, пока главный сервер остановлен.

заранее спасибо

0 ответов

Другие вопросы по тегам