Как установить и настроить мастер MariaDB Galera для управления кластером на сервере Ubuntu Linux 16.04 LTS, чтобы получить масштабируемость как для чтения, так и для записи?nnMariaDB Galera Cluster является открытым исходным кодом и бесплатным синхронным мульти-мастер-кластером для базы данных MariaDB. Он доступен только в Linux и поддерживает только системы хранения XtraDB / InnoDB. Существует экспериментальная поддержка MyISAM, но она недостаточно проверена. Начиная с MariaDB 10.1, wsrep API для Galera Cluster включен по умолчанию.n
Преимущества кластера Galera
- n
- True Multi-master. Чтение и запись на любой узел в любое время.
- Синхронная репликация. Отсутствует ведомое устройство, данные не теряются при сбое узла.
- Tightly Coupled. Все узлы имеют одинаковое состояние. Нет разнесенных данных между разрешенными узлами.
- Многопоточный Slave. Для лучшей производительности. Для любой рабочей нагрузки.
- Нет операций переключения мастер-слэйва или использования VIP.
- Горячий режим ожидания. Отсутствие простоев при переходе на другой ресурс (так как нет перехода на другой ресурс).
- Автоматическое создание узлов. Не нужно вручную создавать резервную копию базы данных и копировать ее на новый узел.
- Поддерживает InnoDB.
- Прозрачный для приложений. Требуется минимальные изменения в приложении или вообще не трубует изменений.
- Нет необходимости разделения чтения и записи.
- Результатом этого является решение высокой доступности, которое является одновременно надежным с точки зрения целостности данных и высокой производительности с отказоустойчивостью.
nnnGalera Cluster для MariaDB — это простое в использовании решение с высокой доступностью, которое обеспечивает высокую производительность системы, отсутствие потери данных и масштабируемость для будущего роста. Вы можете настроить его следующим образомn
- n
- Между двумя центрами обработки данных (кластер для центров обработки данных). Для целей безопасности вы должны настроить VPN и MariaDB через SSL .
- В вашей локальной сети / VLAN (единый кластер центра обработки данных) — VPN не требуется, но вы должны настроить MariaDB через SSL .
n
Что нужно для установки кластера высокой доступности MariaDB Galera?
- n
- Минимум два сервера (могут быть облачные или физические). Для промышленного используйте четыре сервера (рекомендуется минимум три сервера).
- Частная сеть (LAN / VLAN) между серверами
- VPN между двумя центрами обработки данных, если устанавливается между двумя IDC
- Ubuntu Linux 16.04 LTS на обоих серверах
nДавайте приступим к установке и настройке MariaDB Galera на Ubuntu.n
Шаг 1 — Настройка /etc/hosts
Отредактируйте файлы setup /etc/hosts на обоих серверах :n
sudo vi /etc/hosts
Установите правильный частный IP-адрес согласно рис. 01 или согласно настройке:n
192.168.2.45 mdb01n 192.168.2.46 mdb02
Закройте и сохраните файл. Проверьте:n
ping -c2 mdb01 nping -c2 mdb02
Шаг 2. Включение репозиториев MariaDB для версии 10.1.
Введите следующие команды, чтобы разрешить репозиториям mariadb установить версию 10.1 на обоих серверах :n
$ sudo apt-get install software-properties-common n$ sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8 n$ sudo add-apt-repository 'deb [arch=amd64,i386,ppc64el] http://mirror.lstn.net/mariadb/repo/10.1/ubuntu xenial main' n$ sudo apt-get update
Шаг 3. Установите сервер MariaDB v10.1 на Ubuntu Linux.
Введите следующую команду apt-get command / apt на обоих серверах :n
$ sudo apt-get install mariadb-server rsync
Пример результата:nnВы должны установить пароль пользователя MariaDB root:n
Шаг 4. Создание SSL-сертификатов для кластера MariaDB Galera
Введите следующие команды для создания сертификата CA, сервера и клиента, чтобы мы могли иметь защищенные зашифрованные соединения между узлами с использованием протокола SSL. Это включает как соединения между клиентами базы данных и серверами через стандартную поддержку SSL в MySQL, так и шифрование трафика репликации, в частности к самому Galera Cluster. Реализация SSL распространяется по всему кластеру и не поддерживает аутентификацию для трафика репликации. Вы должны включить SSL для всех узлов в кластере или ни для одного из них:n
$ sudo openssl genrsa 2048 > ca-key.pemn$ sudo openssl req -new -x509 -nodes -days 730 -key ca-key.pem -out ca-cert.pemn$ sudo openssl req -newkey rsa:2048 -days 730 -nodes -keyout server-key.pem -out server-req.pemn$ sudo openssl rsa -in server-key.pem -out server-key.pemn$ sudo openssl x509 -req -in server-req.pem -days 730 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 -out server-cert.pemn$ sudo openssl req -newkey rsa:2048 -days 730 -nodes -keyout client-key.pem -out client-req.pemn$ sudo openssl rsa -in client-key.pem -out client-key.pemn$ sudo openssl x509 -req -in client-req.pem -days 365000 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 -out client-cert.pemn$ sudo openssl verify -CAfile ca-cert.pem server-cert.pem client-cert.pem
Чтобы избежать проблем, я устанавливаю их общее имя следующим образом:n
- n
- Общее имя CA: MariaDB admin
- Общее имя сервера: MariaDB server
- Клиентское общее имя: MariaDB client
n
Настройка клиента и сервера mysql для ssl
Отредактируйте файл /etc/mysql/my.cnf:n
$ sudo vi /etc/mysql/my.cnf
Найдите и обновите раздел [клиент] следующим образом:n
[client]nport = 3306nsocket = /var/run/mysqld/mysqld.socknssl-ca=/etc/mysql/ssl/ca-cert.pemnssl-cert=/etc/mysql/ssl/client-cert.pemnssl-key=/etc/mysql/ssl/client-key.pem
Найдите и обновите раздел [mysqld] следующим образом:n
[mysqld]nssl-ca=/etc/mysql/ssl/ca-cert.pemnssl-cert=/etc/mysql/ssl/server-cert.pemnssl-key=/etc/mysql/ssl/server-key.pem
Сохраните и закройте файл.n
Установка сертификатов на других узлах
Копирование сертификатов во все остальные узлы:n
ssh [email protected] mkdir -p /etc/mysql/ssl/nscp * [email protected]:/etc/mysql/ssl/nssh [email protected] mkdir -p /etc/mysql/ssl/nscp * [email protected]:/etc/mysql/ssl/
Шаг 5. Настройте сервер кластера MariaDB Galera.
Создайте на обоих серверах следующий файл:n
$ sudo vi /etc/mysql/conf.d/galera.cnf
Добавьте следующий текст на сервере mdb01 :n
[mysqld]n#mysql settingsnbinlog_format=ROWndefault-storage-engine=innodbninnodb_autoinc_lock_mode=2nquery_cache_size=0nquery_cache_type=0ninnodb_flush_log_at_trx_commit=0ninnodb_buffer_pool_size=256Mnbind-address=192.168.2.45nn#Galera settingsnwsrep_provider="/usr/lib/galera/libgalera_smm.so"n#SSL for Galeranwsrep_provider_options="socket.ssl_key=/etc/mysql/ssl/server-key.pem;socket.ssl_cert=/etc/mysql/ssl/server-cert.pem;socket.ssl_ca=/etc/mysql/ssl/ca-cert.pem"nwsrep_cluster_name="cbz_cluster"nwsrep_cluster_address="gcomm://192.168.2.45,192.168.2.46"nwsrep_sst_method=rsyncnwsrep_on=ONnwsrep_node_address="192.168.2.45"nwsrep_node_name="mdb01"
Добавьте следующий текст на сервере mdb02 :n
[mysqld]n#mysql settingsnbinlog_format=ROWndefault-storage-engine=innodbninnodb_autoinc_lock_mode=2nquery_cache_size=0nquery_cache_type=0ninnodb_flush_log_at_trx_commit=0ninnodb_buffer_pool_size=256Mnbind-address=192.168.2.46nn#Galera settingsnwsrep_provider="/usr/lib/galera/libgalera_smm.so"n#SSL for Galeranwsrep_provider_options="socket.ssl_key=/etc/mysql/ssl/server-key.pem;socket.ssl_cert=/etc/mysql/ssl/server-cert.pem;socket.ssl_ca=/etc/mysql/ssl/ca-cert.pem"nwsrep_cluster_name="cbz_cluster"nwsrep_cluster_address="gcomm://192.168.2.45,192.168.2.46"nwsrep_sst_method=rsyncnwsrep_on=ONnwsrep_node_address="192.168.2.46"nwsrep_node_name="mdb02"
Сохраните и закройте файл.n
Шаг 6. Запустите кластер MariaDB на сервере mdb01.
Введите следующую команду:n
$ sudo systemctl stop mysql
Начальная загрузка кластера
Начальная загрузка — инициализация кластера. Введите следующую команду на сервере mdb01 :n
$ sudo /usr/bin/galera_new_cluster
Убедитесь, что MySQL запущен:n
$ ps aux | grep mysql nmysql 10587 14.0 15.5 1266120 155268 ? Ssl 01:50 0:00 /usr/sbin/mysqld --wsrep-new-cluster --wsrep_start _position=00000000-0000-0000-0000-000000000000:-1 nroot 20822 0.0 0.0 12948 980 pts/0 S+ 01:22 0:00 grep --color=auto mysql
Убедитесь, что SSL работает
Введите следующую командуn
$ grep ssl /var/log/syslog
Убедитесь, что кластер работает
Введите следующую команду, чтобы проверить, что кластер и первый узел работают:n
$ mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size';"
Шаг 7. Присоединитесь к кластеру MariaDB на сервере mdb02.
Введите следующую команду на сервере mdb01 , чтобы присоединиться к кластеру mdb01:n
$ sudo systemctl mysql stop n$ sudo systemctl mysql start
Проверьте:n
$ mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size';"
Результат:n
Введите пароль: n + -------------------- + ------- +n | Variable_name | Значение |n + -------------------- + ------- +n | Wsrep_cluster_size | 2 |n + -------------------- + ------- +
Обратите внимание, что значение 2 указывает, что в нашем кластере есть два мастер-узла для управления узлом. Если вы присоединитесь к третьему узлу, он должен быть следующим:n
Введите пароль: n + -------------------- + ------- +n | Variable_name | Значение |n + -------------------- + ------- +n | Wsrep_cluster_size | 3 |n + -------------------- + ------- +
Ниже приведена дополнительная информация о вашем кластере:n
$ mysql -u root -p -e "show status like 'wsrep%';"
+------------------------------+--------------------------------------+n| Variable_name | Value |n+------------------------------+--------------------------------------+n| wsrep_apply_oooe | 0.000000 |n| wsrep_apply_oool | 0.000000 |n| wsrep_apply_window | 0.000000 |n| wsrep_causal_reads | 0 |n| wsrep_cert_deps_distance | 0.000000 |n| wsrep_cert_index_size | 0 |n| wsrep_cert_interval | 0.000000 |n| wsrep_cluster_conf_id | 2 |n| wsrep_cluster_size | 2 |n| wsrep_cluster_state_uuid | 1ff614b2-01e1-11e7-8e6b-6613e80d4934 |n| wsrep_cluster_status | Primary |n| wsrep_commit_oooe | 0.000000 |n| wsrep_commit_oool | 0.000000 |n| wsrep_commit_window | 0.000000 |n| wsrep_connected | ON |n| wsrep_desync_count | 0 |n| wsrep_evs_delayed | |n| wsrep_evs_evict_list | |n| wsrep_evs_repl_latency | 0/0/0/0/0 |n| wsrep_evs_state | OPERATIONAL |n| wsrep_flow_control_paused | 0.000000 |n| wsrep_flow_control_paused_ns | 0 |n| wsrep_flow_control_recv | 0 |n| wsrep_flow_control_sent | 0 |n| wsrep_gcomm_uuid | 1ff51705-01e1-11e7-96a2-ca7fb2d337c2 |n| wsrep_incoming_addresses | 192.168.2.46:3306,192.168.2.45:3306 |n| wsrep_last_committed | 0 |n| wsrep_local_bf_aborts | 0 |n| wsrep_local_cached_downto | 18446744073709551615 |n| wsrep_local_cert_failures | 0 |n| wsrep_local_commits | 0 |n| wsrep_local_index | 1 |n| wsrep_local_recv_queue | 0 |n| wsrep_local_recv_queue_avg | 0.000000 |n| wsrep_local_recv_queue_max | 1 |n| wsrep_local_recv_queue_min | 0 |n| wsrep_local_replays | 0 |n| wsrep_local_send_queue | 0 |n| wsrep_local_send_queue_avg | 0.000000 |n| wsrep_local_send_queue_max | 1 |n| wsrep_local_send_queue_min | 0 |n| wsrep_local_state | 4 |n| wsrep_local_state_comment | Synced |n| wsrep_local_state_uuid | 1ff614b2-01e1-11e7-8e6b-6613e80d4934 |n| wsrep_protocol_version | 7 |n| wsrep_provider_name | Galera |n| wsrep_provider_vendor | Codership Oy |n| wsrep_provider_version | 25.3.19(r3667) |n| wsrep_ready | ON |n| wsrep_received | 6 |n| wsrep_received_bytes | 407 |n| wsrep_repl_data_bytes | 0 |n| wsrep_repl_keys | 0 |n| wsrep_repl_keys_bytes | 0 |n| wsrep_repl_other_bytes | 0 |n| wsrep_replicated | 0 |n| wsrep_replicated_bytes | 0 |n| wsrep_thread_count | 2 |n+------------------------------+--------------------------------------+
Теперь вы можете создать базу данных и таблицу на любом узле, и она будет реплицироваться на обоих узлах:n
{vitek@mdb01:~ }$ mysql -u root -p -e 'create database foobar;'
От второго узла проверьте его:n
{vitek@mdb02:~ }$ mysql -u root -p -e 'show databases;'
Примеры результатов:n
+--------------------+n| Database |n+--------------------+n| demo |n| foobar |n| information_schema |n| mysql |n| performance_schema |n+--------------------+
Вы можете выполнить миграцию из автономной среды MariaDB в кластерную установку следующим образом:n
## На старом MariaDB сервере##n## Выполните дамп базы данных foobar без движка ##n$ mysqldump -u root -p --skip-create-options foobar > foobar.sqln## Копируйте foobar.sql на любую кластерную ноду, например mdb02 ##n$ scp foobar.sql 192.168.2.46:/root/n## Восстановите БД, на mdb02 ##n$ mysql -u root -p foobar < foobar.sql
Необходима настройка или сопровождение кластера базы данных, обращайтесь [email protected]