Вопрос или проблема
Следующая статья объясняет, как запустить несколько экземпляров mariadb на одном сервере:
https://www.linkedin.com/pulse/running-multiple-instances-mariadb-single-server-different-amadi/
Однако, на https://mariadb.com/kb/en/getting-started-with-mariadb-galera-cluster/ в разделе “Добавление другого узла в кластер” сказано:
Тем не менее, обычно лучше перечислить все узлы кластера в wsrep_cluster_address, чтобы любой узел мог присоединиться к кластеру, подключившись к любому из других узлов кластера, даже если один или несколько узлов кластера отключены. Даже допустимо указать собственный IP-адрес узла в wsrep_cluster_address, так как Galera Cluster достаточно умен, чтобы игнорировать его.
Как я могу добавить один из этих множественных экземпляров mariadb в кластер galera, если у всех этих экземпляров mariadb один и тот же IP-адрес, так как они находятся на одном сервере?
Ответ или решение
Настройка кластера MariaDB с использованием нескольких экземпляров MariaDB на одном сервере может быть сложной задачей, особенно когда каждый экземпляр имеет тот же IP-адрес из-за ограничения в сетевых ресурсах сервера. Однако, с использованием Galera Cluster, это можно достичь с определенной конфигурацией.
Теория
Galera Cluster — это решение для кластеризации и обеспечения высокой доступности для баз данных MariaDB. Galera обеспечивает синхронную репликацию, где транзакции гарантированно применяются сразу на всех узлах, что делает его очень надежным решением для отказоустойчивости и распределенной обработки данных.
Главной задачей при настройке Galera Cluster с несколькими экземплярами на одном сервере является правильно настроить wsrep_cluster_address
, который используется для определения всех узлов кластера. Проблема заключается в использовании одного IP-адреса для всех экземпляров, что может вызвать путаницу. Обычно, каждый экземпляр базы данных имеет уникальный IP-адрес для того, чтобы Galera могла идентифицировать и связываться с ним. Но в данном сценарии необходимо использовать другие пути для дифференциации узлов.
Пример
-
Настройка портов и сокетов: Для каждого экземпляра MariaDB необходимо использовать уникальные порты и сокеты. Это позволяет серверу различать обращения к разным экземплярам, несмотря на общий IP-адрес.
-
Конфигурация Galera: В конфигурационном файле каждого экземпляра (
my.cnf
) нужно указать уникальныйwsrep_node_name
иwsrep_node_address
. Эти параметры помогут Galera идентифицировать каждый узел. -
Использование различных сетевых интерфейсов: Если возможно, настройте алиасы сетевых интерфейсов на сервере. Это позволит задать различный IP-адрес для каждого экземпляра в конфигурации wsrep.
Применение
1. Настройка сокетов и портов
Для каждого экземпляра MariaDB, запущенного на одном сервере, необходимо задать уникальные порты. По умолчанию MariaDB использует порт 3306. Другие экземпляры могут использовать, например, 3307, 3308 и т.д. В конфигурационном файле (my.cnf
для каждого экземпляра), добавьте следующее:
[mysqld]
port=3307
socket=/var/lib/mysql/mysql2.sock
2. Настройка конфигурации Galera
Редактируйте файл конфигурации каждого экземпляра и укажите параметры, уникальные для каждой копии:
[galera]
wsrep_node_name=node2
wsrep_node_address=192.168.1.100:3307
wsrep_cluster_address=gcomm://192.168.1.100:3306,192.168.1.100:3307
Здесь wsrep_cluster_address
указывает на другие узлы, с которыми должен соединяться кластер Galera. Каждый экземпляр на одном сервере указывается с различным портом.
3. Конфигурирование алиасов
Если возможно, создайте сетевые алиасы. Это достигается добавлением дополнительных IP-адресов к сетевому интерфейсу, например:
sudo ifconfig eth0:1 192.168.1.101 netmask 255.255.255.0 up
И используйте эти IP-адреса для параметра wsrep_node_address
в конфигурации Galera.
Заключение
Настройка Galera Cluster с несколькими экземплярами MariaDB на одном сервере требует тщательной настройки конфигурации, чтобы каждый экземпляр мог нормально функционировать и взаимодействовать с остальными узлами кластера. Это достигается за счет использования разных портов, алиасов сетевых интерфейсов и уникальных идентификаторов узлов. Следуя изложенным шагам, вы сможете создать надежный кластер на одном сервере, который эффективно использует ресурсы и обеспечивает высокую доступность данных.