Будет ли использование отработки отказа DNS работать в качестве стратегии отработки отказа с несколькими DC?

Если у меня есть кластер с несколькими DC, DC1 и DC2, где DC2 используется только для восстановления после отказа. А в драйвере на стороне клиента я определяю контактные точки, используя доменные имена (foo1.net, foo2.net, and foo3.net), У меня есть foo*, указывающая на DC1, и если я когда-нибудь обнаружу какую-либо ошибку с DC1, я сделаю DNS-маршрут foo*, указывающий на DC2.

Этот подход, кажется, работает на бумаге, но будет ли он на самом деле работать? Есть проблемы с этим подходом?

1 ответ

В случае DataStax Java Driver 3.x это не будет работать, так как DNS оценивается только в начале Cluster конкретизации.

Указанные контактные точки разрешаются с помощью DNS через InetAddress.getAllByName в Cluster.Builder.addContactPoint:

public Builder addContactPoint(String address) {
    // We explicitly check for nulls because InetAdress.getByName() will happily
    // accept it and use localhost (while a null here almost likely mean a user error,
    // not "connect to localhost")
    if (address == null)
        throw new NullPointerException();

    try {
        addContactPoints(InetAddress.getAllByName(address));
        return this;
    } catch (UnknownHostException e) {
        throw new IllegalArgumentException("Failed to add contact point: " + address, e);
    }
}

Если DNS изменяется в течение жизненного цикла Cluster водитель не будет знать об этом, пока вы не создадите новый Cluster.Builder экземпляр и создать новый Cluster от него.

Я предпочитаю дизайн, который выталкивает отказоустойчивость Центра обработки данных за пределы вашего приложения и на более высокий уровень вашей архитектуры. Вместо того чтобы возложить ответственность за отказоустойчивость вашего клиентского приложения, вы должны запускать экземпляры ваших клиентов, размещенные в каждом центре обработки данных C*. Балансировщик нагрузки вашего приложения / маршрутизатор /DNS может направлять трафик на экземпляры вашего приложения в других центрах обработки данных, когда центры обработки данных становятся недоступными.

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