Архив рубрики: high availability

Балансировка нагрузки на кластер MySQL с помощью HAProxy

Введение

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

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

  • драйвер JDBC для MySQL (MySQL Connector/J);
  • драйвер, используемый по умолчанию в PHP MySQL для master-slave (mysqlnd-ms).

Эти драйверы позволяют обеспечить прозрачность подключения клиентов к автономному серверу MySQL, решению MySQL Cluster (NDB) или топологии, использующим репликацию MySQL.

Однако при использовании этих драйверов с кластером Galera для MySQL или MariaDB есть ряд проблем, так как они не обладают расширенной информацией о состоянии Galera. Например, узел-донор Galera может находиться в режиме «только для чтения» , когда помогает другому узлу повторно синхронизироваться (если для передачи снимка состояния (SST) используется mysqldump или rsync), или в случае split brain он может быть в состоянии Non-Primary. То есть, существуют случаи, когда даже драйверы с поддержкой пуллинга и балансировки не предоставляют необходимый уровень поддержки кластера.

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

Читать далее

Производительность репликации в кластере MySQL Galera

Администраторы часто настраивают кластер Galera с тремя и более узлами в сетях с пропускной способностью 1 Гбит/с. Кажется, что 1 Гбит/с это довольно много? Фактически, не так уж и много, если задуматься о том, как происходит репликация данных между серверами кластера.

Galera поддерживает два режима репликации — с использованием одноадресной рассылки (ip unicast), либо с использованием многоадресной рассылки, для работы которого может требоваться поддержка на уровне инфраструктуры провайдера или вашего сетевого оборудования, если используется собственная инфраструктура.

Читать далее

Защита сетевого трафика кластера MySQL Galera с помощью шифрования SSL

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

Кластер Galera поддерживает шифрование соединения с использованием протокола SSL. В статье мы рассмотрим, как зашифровать все соединения кластера с помощью SSL-шифрования.

Читать далее

Настройка высокодоступного, масштабируемого отказоустойчивого сайта с помощью Nginx, GlusterFS и MySQL Galera в Linux

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

Сайт без единой точки отказа становится де-факто требованием в мире, где большинство операций выполняются дистанционным образом. Простои обходятся дорого, особенно, если они происходят в неподходящее время — праздники, выходные, высокий сезон.

В этой статье мы рассмотрим как настроить высокодоступный сайт на трех узлах, которые могут быть как виртуальными так и аппаратными серверами. В ходе настройки мы будем использовать Nginx, СУБД MariaDB (MySQL), распределенную файловую систему GlusterFS, CDN CloudFlare, сертификаты Let’s Encrypt.

Читать далее

Настройка отказоустойчивого кластера MySQL с синхронной мульти-master репликацией с помощью Galera в Ubuntu, Debian и CentOS Linux

Синхронная мульти-master репликация в MySQL появилась сравнительно недавно, однако была востребована довольно давно. До этого момента пользователям приходилось использовать либо репликацию в режиме Master-Slave и переключать операции записи на ведомый сервер при отказе главного сервера, либо использовать довольно сложный вариант с Master-Master репликацией на основании двунаправленной Master-Slave репликации.

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

С появлением Galera все стало намного проще. Для надежной работы вам необходимо эксплуатировать нечетное количество серверов, например 3 или 5 для защиты от партиционирования, так, чтобы при ситуации, когда кластер «рассыпался» Galera могла принять обоснованное решение о том, является ли наблюдаемый сегмент кластера целостным.

Читать далее

Настраиваем распределенную файловую систему GlusterFS на трехузловом кластере под управлением Linux

В этом руководстве мы рассмотрим настройку распределенной файловой системы GlusterFS на кластере, состоящем из трех узлов. Кластерные файловые системы часто используются в отказоустойчивых системах для обеспечения общего хранилища файлов.

Мы не рекомендуем использовать кластерные системы в задачах, где предполагается интенсивная запись данных, требующая высоких показателей IOPS и прогнозируемую задержку IO. Однако, для задач, в которых операции чтения значительно преобладают над операциями записи и нет требований к ультранизкой задержке IO, кластерные файловые системы вполне могут использоваться.

Читать далее

Реализация динамических черных и белых списков доступа по IP большого объема в Nginx с помощью Lua и Redis в Ubuntu и Debian

В данном руководстве мы рассмотрим как реализовать концепцию большого динамического черного или белого списка с помощью веб-сервера Nginx, сервера Redis и скрипта расширения Nginx, реализованного на Lua.

В данном руководстве все программное обеспечение будет устанавливаться в Ubuntu 16.04 или 18.04. Практически без изменений данные решения можно применить и в других дистрибутивах, основанных на Debian.

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

К счастью, Nginx поддерживает модули расширения на языке Lua, которые совместно с кэшу в памяти Redis позволяют реализовать требуемую функциональность черных и белых списков.

Читать далее

Доступ к сообщениям журнала ядра при переходе ядра Linux в режим паники

Часто встречающаяся ситуация: виртуальный или аппаратный сервер завис и не отвечает. Заходите на него с помощью инструмента удаленного управления IPMI или консоли VNC, видите только черный экран и ничего кроме. Скорее всего, ядро Linux вошло в режим паники (Kernel Panic), который вызван сбоем одного из модулей ядра, ошибкой в самом ядре, критической аппаратной ошибкой.

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

Читать далее

Усиление безопасности сервера Redis

Redis — NoSQL хранилище типа “ключ/значение”, размещаемое в памяти, имеющее возможность сохранения на диск. Чаще всего Redis используется для кэширования данных, хранения сессий и для реализации различных механизмов масштабирования.

Redis был спроектирован для использования доверенными клиентами в надежной среде, и в нем не предусмотрено собственных надежных функций безопасности. Для подтверждения этого приведем цитату с официального сайта Redis:

«Redis предназначен для доступа доверенных клиентов в доверенных средах. Это означает, что, как правило, не рекомендуется размещать экземпляр Redis непосредственно в Интернете или, вообще, в среде, где непроверенные клиенты могут напрямую обратиться к TCP-порту Redis или сокету UNIX… В общем, дизайн Redis спроектирован для обеспечения максимальной производительности и простоты управления, но не для максимальной безопасности.»


Читать далее

Установка и настройка кластера Redis в Linux

Кластер Redis часто используется в качестве инструмента для хранения данных их кэширования, брокера сообщений и других задач. Он стал популярным инструментом благодаря возможности масштабирования и высокой скорости работы. В этой статье представлены инструкции по созданию кластера на трех серверах для организации разделения данных (sharding) и высокой доступности за счет репликации. В данной конфигурации в случае отказа узла master, slave-сервер автоматически заменяет его.

Читать далее