распределенная установка для TiDB через континентальные границы - PullRequest
0 голосов
/ 25 января 2019

Мы планируем использовать TiDB для распределенной установки в Европе и Австралии.

У кого-нибудь есть опыт работы с такой распределенной установкой?

1 Ответ

0 голосов
/ 26 января 2019

Разработчик TiDB здесь.

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

Более разумное развертывание: если ваша рабочая нагрузка в основном находится в Европе, и вам требуется высокая согласованность и высокая доступность одновременно, тогда вы можете выбрать два IDC в ​​Европе и 1 IDC в ​​Австралии для развертывания TiDB,и ваше приложение должно быть развернуто в Европе.Потому что для tidb запись требует, чтобы большинство реплик были записаны успешно.В этом сценарии задержка записи составляет:

latency = min(latency(IDC1, IDC2), latency(IDC2, IDC3), latency(IDC1, IDC3)) 

Вот несколько предложений по развертыванию и сравнение для различных сценариев:

1.Решение по развертыванию 3-DC

TiDB, TiKV и PD распределяются между 3 DC.

3-DC Deployment Architecture

Преимущества:
Все реплики распределены между 3 DC.Даже если один DC не работает, другие 2 DC инициируют выборы лидера и возобновляют обслуживание в течение разумного периода времени (в большинстве случаев в течение 20 с), и данные не теряются.Для получения дополнительной информации см. Следующую диаграмму:

Disaster Recovery for 3-DC Deployment

Недостатки:
Производительность сильно ограничена задержкой в ​​сети.
Для записи:все данные должны быть реплицированы как минимум на 2 DC.Поскольку TiDB использует двухфазную фиксацию для записи, задержка записи по меньшей мере вдвое превышает задержку сети между двумя DC.
Производительность чтения также пострадает, если лидер не находится в том же DC, что и узел TiDB сзапрос на чтение.
Каждая транзакция TiDB должна получить Oracle TimeStamp (TSO) от лидера PD.Таким образом, если TiDB и лидер PD находятся не в одном DC, на производительность транзакций также будет влиять задержка сети, поскольку каждая транзакция с запросом на запись должна будет дважды получать TSO.

Оптимизации:
Если не все три контроллера домена нуждаются в обслуживании приложений, вы можете отправить все запросы на один контроллер домена и настроить политику планирования для переноса всехЛидер TiKV Region и лидер PD в том же округе, что мы сделали в следующем тесте.Таким образом, задержка сети между контроллерами домена не повлияет ни на получение TSO, ни на чтение регионов TiKV.Если этот DC не работает, лидер PD и региональный лидер будут автоматически избраны в других выживших DC, и вам просто нужно переключить запросы на DC, которые все еще в сети.

Read Performance Optimized 3-DC Deployment

2.Решение по развертыванию 3-DC в 2 городах
Это решение аналогично предыдущему решению по развертыванию 3-DC и может рассматриваться как оптимизация на основе бизнес-сценария.Разница в том, что расстояние между двумя DC в одном и том же городе невелико, и, следовательно, задержка очень мала.В этом случае мы можем отправлять запросы двум DC в одном городе и настраивать лидера TiKV и PD, чтобы он находился в 2 DC в одном городе.

3DC in 2 cities

По сравнению с развертыванием 3-DC, развертывание 3-DC в 2 городах имеет следующие преимущества:

  1. Лучшая производительность записи
  2. Лучшее использование ресурсов, поскольку 2 DC могут обеспечитьсервисы для приложений.
  3. Даже если один DC не работает, кластер TiDB все еще будет доступен, и данные не будут потеряны.

Однако недостатком является то, что, если 2 DC в одном и том же городе выйдут из строя, вероятность которых выше, чем вероятность сбоя 2 DC в 2 городах, кластер TiDB будет недоступен инекоторые данные будут потеряны.

3.Решение по развертыванию синхронизации 2-DC + Binlog

Синхронизация 2-DC + Binlog аналогична решению MySQL Master-Slave. 2 полных набора кластеров TiDB (каждый полный набор кластера TiDB включает в себя TiDB, PD и TiKV) развернуты в 2 DC, один действует как ведущий, а другой - как ведомый. В обычных условиях главный DC обрабатывает все запросы, и данные, записанные в главный DC, асинхронно записываются в подчиненный DC через Binlog.

Data Synchronization in 2-DC in 2 Cities Deployment

Если главный DC отключается, запросы могут переключаться на подчиненный кластер. Как и в MySQL, некоторые данные могут быть потеряны. Но в отличие от MySQL, это решение может обеспечить высокую доступность в одном и том же DC: если некоторые узлы в DC не будут работать, это не повлияет на онлайн-бизнес и не требует никаких ручных усилий, поскольку кластер автоматически переизбирает лидеров для оказывать услуги.

2-DC as a Mutual Backup Deployment

Некоторые из наших производственных пользователей также используют мультиактивное решение 2-DC, что означает:

  1. Запросы приложений разделяются и отправляются в 2 контроллера домена.
  2. Каждый DC имеет 1 кластер, и каждый кластер имеет две базы данных: базу данных Master, которая обслуживает часть запросов приложений, и базу данных Slave, которая служит резервной копией базы данных Master другого DC. Данные, записанные в базу данных Master, синхронизируются через Binlog с базой данных Slave на другом DC, образуя цикл резервного копирования.

Обратите внимание, что для решения синхронизации 2-DC + Binlog данные асинхронно реплицируются через Binlog. Если задержка сети между двумя DC слишком высока, данные в подчиненном кластере будут сильно отставать от главного кластера. Если основной кластер выйдет из строя, некоторые данные будут потеряны, и нельзя гарантировать, что потерянные данные находятся в течение 5 минут.

Общий анализ для HA и DR

Для решения по развертыванию 3-DC и решения 3-DC в 2 городах мы можем гарантировать, что кластер будет автоматически восстанавливаться, никакого вмешательства человека не требуется и что данные строго согласованы, даже если один из 3 DC выходит вниз. Все политики планирования предназначены для настройки производительности, но в случае сбоя приоритет имеет доступность 1, а не производительность.

Для решения по синхронизации 2-DC + Binlog мы можем гарантировать, что кластер будет автоматически восстановлен, никакого вмешательства человека не требуется, и что данные будут строго согласованы, даже если какой-либо из узлов в мастер-кластере выйдет из строя. Когда весь мастер-кластер выйдет из строя, потребуются ручные усилия для переключения на ведомый, и некоторые данные будут потеряны. Количество потерянных данных зависит от задержки сети и определяется состоянием сети.

Рекомендации по достижению высокой производительности

Как описано ранее, в сценарии с 3-мя DC задержка сети очень важна для производительности. Из-за высокой задержки транзакция (10 операций чтения на 1 запись) займет 100 мс, а один поток может достичь только 10 TPS.

Эта таблица является результатом нашего теста Sysbench (3 IDC, 2 US-West и 1 US-East):

| threads |     tps |      qps |
|--------:|--------:|---------:|
|       1 |    9.43 |   122.64 |
|       4 |   36.38 |   472.95 |
|      16 |  134.57 |  1749.39 |
|      64 |  517.66 |  6729.55 |
|     256 | 1767.68 | 22979.87 |
|     512 | 2307.36 | 29995.71 |
|    1024 | 2406.29 | 31281.71 |
|    2048 | 2256.27 | 29331.45 |

По сравнению с ранее рекомендованным развертыванием, согласно которому лидеры региона TiKV должны находиться в одном DC, приоритет лидера PD устанавливается pd-ctl member leader_priority pd1 2, чтобы установить лидера PD в том же DC лидеров региона TiKV , избегая чрезмерно высокой задержки в сети при получении TSO.

Исходя из этого, мы заключаем, что если вы хотите использовать больше TPS, вам следует использовать больше параллелизма в вашем приложении.

Мы рекомендуем следующие решения:

  1. Добавьте больше экземпляров TiDB с той же конфигурацией для дальнейшего тестирования, чтобы использовать масштабируемость TiDB.
  2. Чтобы избежать снижения производительности, вызванного запросами на фиксацию транзакций между контроллерами домена, рассмотрите возможность изменения рабочей нагрузки с 10 reads + 1 write для каждой транзакции на 100 reads + 10 writes для более высокого QPS.

На вопрос о HA ответ заключается в том, что в случае сбоя контроллера домена не требуется ручная операция.Это происходит потому, что даже если DC лидера выходит из строя и лидеры блокируются в одном DC, большинство реплик все еще выживает и выберет нового лидера после сбоя благодаря алгоритму согласования Raft.Этот процесс автоматический и не требует ручного вмешательства.Служба все еще доступна и не будет затронута, только с небольшим снижением производительности.

...