Инструменты пользователя

Инструменты сайта


mariadb_galera_cluster

Это старая версия документа!


MariaDB Galera Cluster


Подготовка

Разворачиваем три сервера ubuntu последней версии, назначаем статические ip (для трёх серверов понадобиться 4 штуки).

Далее каждый отдельный сервер (из этих трёх) мы будем называть нода, а три сервера работающие вместе в унисон - кластер.

Для удобства папку /var/lib/mysql делаем отдельным диском, чтобы всегда наглядно знать сколько занимают базы данных и сколько осталось, командой:

df -h | grep --color=never 'mysql\|Filesystem'

Пусть мы развернули три сервера:

mdb01 192.168.7.32
mdb02 192.168.7.33
mdb03 192.168.7.34

Общим ip будет:

mdbc01 192.168.7.35

на каждом начальная инициализация:

dpkg-reconfigure tzdata && dpkg-reconfigure locales
apt update && apt upgrade -y
rm -Rf /var/lib/mysql/lost+found

На случай полной деградации сети в hosts прописываем все три сервера:

cat >> /etc/hosts << 'EOT'
192.168.7.32 mdb01.mosigra.su mdb01
192.168.7.33 mdb02.mosigra.su mdb02
192.168.7.34 mdb03.mosigra.su mdb03
EOT

проверяем, перезагружаем:

cat /etc/hosts
reboot

Установка MariaDB

добавление репозитория, установка curl, mariadb, мне нравится ещё устанавливать tree, но это по желанию

apt install -y curl
curl -LSsO https://r.mariadb.com/downloads/mariadb_repo_setup
chmod u+x ./mariadb_repo_setup
./mariadb_repo_setup
apt install -y mariadb-server mariadb-client mariadb-common tree

проверяем версию MariaDB:

mariadb --version
Настройка MariaDB

в файле /etc/mysql/mariadb.conf.d/50-server.cnf включим Планировщик событий, это пригодится для партиционирования (секционирования) Базы данных для Zabbix

event_scheduler         = ON
Настройка Galera

на всех серверах:

cat >> /etc/mysql/mariadb.conf.d/60-galera.cnf << 'EOT'
wsrep_on                 = ON
wsrep_provider           = /usr/lib/galera/libgalera_smm.so
wsrep_cluster_name       = "MariaDB Galera Cluster 01"
wsrep_cluster_address    = "gcomm://mdb01,mdb02,mdb03"
binlog_format            = row
default_storage_engine   = InnoDB
innodb_autoinc_lock_mode = 2
innodb_force_primary_key = 1
innodb_doublewrite       = 1

# Allow server to accept connections on all interfaces.
bind-address = 0.0.0.0
port         = 13306

# Optional settings
wsrep_slave_threads            = 2
innodb_flush_log_at_trx_commit = 0
wsrep_node_name                = mdb01
wsrep_node_address             = "192.168.7.32"

# By default, MariaDB error logs are sent to journald, which can be hard to digest sometimes.
# The following line will save error messages to a plain file.
log_error = /var/log/mysql/error.log
EOT

Обратите внимание, параметры: wsrep_node_name и wsrep_node_address для каждого сервера должны быть свои

Останавливаем MariaDB:

systemctl stop mariadb
systemctl status mariadb

Только на первой ноде:

galera_new_cluster

На всех запускаем MariaDB и проверяем:

systemctl start mariadb
systemctl status mariadb
ss -anoltup

мы должны увидеть вместо стандартного mysql порта 1306 - наш 13306

Далее только на первой ноде, создаём супер администратора steller и пользователя для haproxy (чтобы он мог оценивать на сколько MariaDB жива):

sudo mysql

CREATE USER 'steller'@'%' IDENTIFIED BY 'very_secret_password';
CREATE USER 'haproxy'@'%';
GRANT ALL PRIVILEGES ON *.* TO 'steller'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
QUIT;

не забудьте поменять пароль very_secret_password на ещё более секретный

проверяем:

echo "SELECT @@hostname;" | mariadb -h mdb03 -u steller -N -P 13306 -pvery_secret_password

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

Установка haproxy и keepalived

https://kifarunix.com/configure-highly-available-haproxy-with-keepalived-on-ubuntu/

apt install haproxy

файл /etc/haproxy/haproxy.cfg должен выглядеть примерно так:

global
        log /dev/log    local0
        log /dev/log    local1 notice
        chroot /var/lib/haproxy
        stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners
        stats timeout 30s
        user haproxy
        group haproxy
        daemon

        # Default SSL material locations
        ca-base /etc/ssl/certs
        crt-base /etc/ssl/private

        # See: https://ssl-config.mozilla.org/#server=haproxy&server-version=2.0.3&config=intermediate
        ssl-default-bind-ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
        ssl-default-bind-ciphersuites TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256
        ssl-default-bind-options ssl-min-ver TLSv1.2 no-tls-tickets

defaults
        log     global
        mode    http
        option  httplog
        option  dontlognull
        timeout connect 5000
        timeout client  50000
        timeout server  50000
        errorfile 400 /etc/haproxy/errors/400.http
        errorfile 403 /etc/haproxy/errors/403.http
        errorfile 408 /etc/haproxy/errors/408.http
        errorfile 500 /etc/haproxy/errors/500.http
        errorfile 502 /etc/haproxy/errors/502.http
        errorfile 503 /etc/haproxy/errors/503.http
        errorfile 504 /etc/haproxy/errors/504.http

# stats dashboard
listen stats
    bind :8080
    mode http
    acl localhost src 192.168.7.32 127.0.0.1
    stats enable if localhost
    stats realm Haproxy\ Statistics
    stats uri /
    stats refresh 10s


listen galera_cluster
    bind *:3306
    balance source
    mode tcp
    option mysql-check user haproxy
    option tcplog
    server mdb01 mdb01:13306 check weight 1
    server mdb02 mdb02:13306 check weight 1
    server mdb03 mdb03:13306 check weight 1

от ноды к ноде будет меняться только этот кусок:

acl localhost src 192.168.7.32 127.0.0.1
mariadb_galera_cluster.1756280573.txt.gz · Последнее изменение: Валерий