Публикация на rqlite 7.0, разпределена отказоустойчива СУБД на база SQLite

Произведен выпуск распределенной СУБД rqlite 7.0, использующей SQLite в качестве движка хранения и позволяющей организовать работу кластера из синхронизированных друг с другом хранилищ. Среди особенностей rqlite выделяются простота установки, развертывания и сопровождения распределенного отказоустойчивого хранилища, аналогичного etcd и Consul, но использующего реляционную модель работы с данными вместо формата ключ/значение. Код проекта написан на языке Go и распространяется под лицензией MIT.

Для поддержания всех узлов в синхронизированном состоянии используется алгоритм достижения консенсуса Raft. rqlite применяет оригинальную библиотеку SQLite и драйвер go-sqlite3, поверх которых запускается прослойка, обрабатывающая запросы клиентов, выполняющая репликацию на другие узлы и отслеживающая достижение консенсуса для выбора лидирующего узла.

Изменения в базы данных могут вноситься только узлом, выбранным в качестве лидирующего, но соединения с операциями записи могут направляться и к другим узлам кластера, которые возвращают адрес лидера для повторного запроса (в следующей версии обещают добавить автоматический проброс обращения к лидеру). Основное внимание уделяется отказоустойчивости, поэтому СУБД масштабируется только по операциям чтения, а операции записи являются узким местом. Возможно запустить кластер rqlite из одного узла, что может быть использовано для организации доступа к SQLite поверх HTTP без обеспечения отказоустойчивости.

Данные SQLite на каждом узле хранятся не в файле, а в памяти. На уровне слоя с реализацией протокола Raft ведется журнал всех команд SQLite, приводящих к изменению базы данных. Данный журнал используется при репликации (репликация на уровне воспроизведения запросов на других узлах), при запуске нового узла или для восстановления после потери связности. Для сокращения размера журнала применяется автоматическая упаковка, которая запускается после заданного числа изменений и приводит к фиксации снимка, относительно которого начинается новый журнал (состояние базы в памяти идентично снимку + накопленному журналу изменений).

Особености на rqlite:

  • Лесно разгръщане на клъстера, без необходимост от отделна инсталация на SQLite.
  • Възможност за бързо получаване на репликирано SQL хранилище.
  • Готовность к использованию в рабочих проектах (production-grade).
  • Наличието на HTTP(S) API, позволяващ обновяване на данни в пакетен режим и определяне на водещия възел в клъстера. Също така е предоставен интерфейс на командния ред и клиентски библиотеки за различни езици за програмиране.
  • Наличие на услуга за определяне на други възли, позволяваща динамично създаване на клъстери.
  • Поддръжка на криптиране на обмена на данни между възлите.
  • Възможност за настройка на нивото на проверка на актуалността и последователността на данните при четене.
  • Опционална възможност за свързване на възли в режим само за четене, които не участват в определянето на консенсуса и се използват за увеличаване на мащабируемостта на клъстера при операции по четене.
  • Поддръжка на собствена форма на транзакции на базата на обединение на команди в един запит (транзакции на базата на BEGIN, COMMIT, ROLLBACK, SAVEPOINT и RELEASE не се поддържат).
  • Поддръжка на създаването на горещи резервни копия.

В новото издание:

  • Добавена е поддръжка за автоматично клъстеризиране на rqlite с използване на нова услуга за определяне на възли, която може да работи на база разпределени хранилища Consul и etcd. Услугата позволява на възлите rqlite автоматично да се намират помежду си — администраторът просто трябва да стартира няколко възела на различни сървъри, като укаже общия адрес на клъстера Consul или etcd (например, „example.com:8500“), и възлите автоматично ще бъдат обединени в клъстер. Водещият възел периодично обновява в хранилището Consul или etcd информация за своя адрес, което позволява в последствие да се промени лидера без необходимост от пренастройка на останалите възли, както и да се добавят нови възли дори след промяната на лидера. Поддръжката на старата услуга за определяне на възли (Discovery mode), работеща на база AWS Lambda, е прекратена.
  • В интерфейса на CLI е разрешено указването на няколко хоста наведнъж — ако първият възел се окаже недостъпен, ще бъде направен опит да се свърже с следващите хостове.
  • Кодът за разглеждане на аргументите на командния ред rqlited е преработен.
  • Използването на остарелия пакет protobuf е спряно.
  • Хранилището BoltDB, използвано в реализирането на протокола Raft, е заменено с bbolt, форк на проекта etcd.

Източник: opennet.ru

Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри 🔥 Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри | ProHoster