Программирование отказоустойчивого кластера SQL-сервера - PullRequest
3 голосов
/ 13 декабря 2010

В настоящее время у меня нет доступа к кластеру серверов SQL для разработки (тот, который использует службы кластеров с SAN за ним), но я сделаю это в будущем для рабочей среды.

При программировании из a.NET среде, что я должен ожидать в моем коде, если узел, к которому я подключен, умирает?Является ли переключение на другой узел полностью прозрачным?Нужно ли ловить какое-то исключение и пытаться воссоединиться?Есть ли для этого шаблон кода?

1 Ответ

3 голосов
/ 13 декабря 2010

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

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

Вы всегда можете проверить аварийное переключение на нескольких виртуальных машинах.И Virtual Server, и HyperV могут имитировать кластеры на виртуальном оборудовании (но не на Virtual PC), и я ожидаю, что VMWare также может (хотя я никогда не пробовал).

...