Кластер против репликации
У меня есть случай использования, когда я ищу репликации одной базы данных на нескольких серверах (для целей высокой доступности и масштабируемости),
Будет ли какой-либо недостаток запускать реплику из 3 узлов вместо кластера из 3 узлов?
2 ответа
Документация Couchdb 11.2 предоставляет пример конфигурации кластера:
[cluster]
q=8
r=2
w=2
n=3
q - количество осколков
r - число копий документа с той же ревизией, которые должны быть прочитаны, прежде чем CouchDB вернется с 200 и документом. Если доступна только одна копия документа, то возвращается 200.
w - число узлов, которым необходимо сохранить документ, прежде чем запись будет возвращена с 201. Если число узлов, сохраняющих документ, равно 0, возвращается 202.
n - количество копий каждого документа. Реплики.
Поведение вашей реплики из 3 частей должно быть эквивалентно:
[cluster]
q=1
r=1
w=1
n=3
при репликации правильно. Это возможная конфигурация кластеризации, но не оптимальная, так как в ней отсутствует:
преимущество подтверждения того, что несколько узлов и большинство узлов подтвердили сохранение до его подтверждения.
преимущество подтверждения того, что несколько узлов и большинство узлов подтвердили правильность ревизии перед ее возвратом.
Расширяемость базы данных за пределы хранилища одного узла с помощью шардинга.
Возможность изменения любой конфигурации, эквивалентной параметрам кластера с q, r или w > 1 без переключения на кластер.
Косвенно, ограничения на подтверждения создают больше потенциальных конфликтов для разрешения между репликами, если реплики фактически используются для масштабируемости сети, и больше шансов на фактическое несоответствие в форме потерянных записей, если узел отказывает между подтверждением сохранения и передачей его в другие реплики.
Какую версию CouchDB вы будете использовать? Если 2.0.0+, вероятно, нет причин не использовать истинную кластеризацию.
Единственная причина, по которой я могу использовать реплики вместо кластеризации, заключается в простоте настройки или в том, что ваша база данных (то есть CouchDB < 2.0.0) не поддерживает ее.
Но если вы используете кластеризацию, даже на 3 узлах сейчас, вы уже настроены на большее расширение позже, просто добавив больше узлов.
Есть ли причина, по которой вы не хотите использовать кластер?