Поиск по сайту:

Как настроить HAProxy в качестве балансировщика нагрузки для MariaDB на CentOS 7


На этой странице

  1. Шаг 1. Установка и настройка кластера MariaDB Galera
    1. А. Настройте имена хостов и подготовьте базовую систему
    2. Б. Установите сервер MariaDB Galera
    3. С. Настроить брандмауэр
    4. Д. Настройка кластера MariaDB Galera
    5. Э. Настроить кластерную проверку

    1. А. Репликационное тестирование
    2. Б. Доступ к серверу MariaDB через HAProxy
    3. С. Войдите в веб-интерфейс HAProxy

    В этом руководстве я проведу вас через установку кластера MariaDB Galera на CentOS 7, перед которым стоит балансировщик нагрузки HAProxy. Общая установка состоит из 4 серверов. Я буду использовать 3 сервера CentOS 7 для узлов базы данных, 2 узла будут активными, а 1 будет действовать как резервный узел. Четвертый сервер будет использоваться для балансировки нагрузки HAProxy. Для алгоритма баланса мы используем наименьший конн (но вы можете использовать и другие алгоритмы).

    MariaDB — один из самых популярных серверов реляционных баз данных, созданный первоначальным разработчиком сервера баз данных MySQL. MariaDB — это ответвление MySQL, которое поддерживает механизм хранения XtraDB, механизм хранения InnoDB и новый механизм хранения под названием aria.

    MariaDB Galera Cluster — это синхронный кластер с несколькими мастерами для MariaDB, доступный только в операционных системах на базе GNU/Linux. Galera Cluster поддерживает только механизмы хранения XtraDB и InnoDB. Он использует библиотеку Galera для репликации с автоматическим контролем элементов, автоматическим присоединением к узлам, а также для чтения и записи на узлы кластера.

    Предпосылка

    • 4 сервера CentOS 7 — 64-разрядная версия:

    mariadb1
               192.168.1.132

               mariadb2
               192.168.1.133

               mariadb3
                   3           192.168.1.133


               HAProxy
               192.168.1.135

    • Права root на всех четырех серверах.

    Шаг 1. Установите и настройте кластер MariaDB Galera.

    На этом этапе мы установим и настроим кластер MariaDB Galera на 3 серверах CentOS. Мы установим сервер MariaDB-Galera, затем включим брандмауэр и откроем несколько портов для базы данных и других служб. Затем мы установим скрипт clustercheck на каждый сервер MariaDB, чтобы мы могли проверять состояние сервера с помощью HAProxy.

    A. Настройте имена хостов и подготовьте базовую систему.

    Войдите на все серверы баз данных с вашей учетной записью ssh:

    ssh 

    Переключитесь на пользователя root с помощью команды sudo:

    sudo su

    Отредактируйте файл hosts на каждом сервере MariaDB и добавьте все IP-адреса серверов и имена хостов других узлов:

    vi /etc/hosts

    См. мою конфигурацию /etc/hosts ниже:

    192.168.1.132   mariadb1
    192.168.1.133   mariadb2
    192.168.1.134   mariadb3

    Сохраните файл и выйдите.

    Затем отключите SELinux на каждом сервере, потому что это вызывает проблемы с MariaDB Galera. Отключите SELinux с помощью этой команды sed:

    sed -i -e 's/SELINUX=permissive/SELINUX=disabled/g' /etc/sysconfig/selinux

    sed (редактор потока): замените \SELINUX=permissive\ на \SELINUX=disabled\ в файле /etc/sysconfig/selinux.

    B. Установите сервер MariaDB Galera

    На этом этапе мы установим MariaDB Galera 10.0, которая доступна в репозитории MariaDB.

    Создайте новый файл .repo в каталоге yum.repos.d с помощью команды vi:

    vi /etc/yum.repos.d/mariadb.repo

    Вставьте данные репозитория MariaDB Galera ниже и сохраните их:

    # MariaDB 10.0 CentOS repository list - created 2015-07-09 14:56 UTC
    # http://mariadb.org/mariadb/repositories/
    [mariadb]
    name = MariaDB
    baseurl = http://yum.mariadb.org/10.0/centos7-amd64
    gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
    gpgcheck=1

    Теперь установите сервер и клиент MariaDB Galera, а также некоторые другие пакеты, необходимые для этого руководства:

    yum -y install MariaDB-Galera-server MariaDB-client galera rsync xinetd percona-toolkit precona-xtrabackup xinetd wget

    Дождитесь завершения процесса установки.

    C. Настройте брандмауэр

    Мы включим брандмауэр CentOS 7 по умолчанию под названием Firewalld. Мы включим его и откроем порты TCP, которые используются службами, которые мы установим.

    3306=используется для клиентских подключений MySQL/MariaDB.
    4567=трафик репликации кластера Galera.
    873    =порты Rsync.< br> 4444=для всех остальных передач моментальных снимков состояния (SST).
    9200=xinetd — clustercheck.

    Включите firewalld с помощью этой команды systemctl:

    systemctl start firewalld

    Теперь откройте порты с помощью firewall-cmd:

    firewall-cmd --permanent --add-port=3306/tcp
    firewall-cmd --permanent --add-port=4567/tcp
    firewall-cmd --permanent --add-port=873/tcp
    firewall-cmd --permanent --add-port=4444/tcp
    firewall-cmd --permanent --add-port=9200/tcp

    и перезагрузите firewalld:

    firewall-cmd --reload

    D. Настройте кластер MariaDB Galera

    Перейдите в каталог /etc/my.cnf.d/ и отредактируйте файл server.conf с помощью vi:

    cd /etc/my.cnf.d/
    vi server.conf

    Раскомментируйте и добавьте несколько строк конфигурации, вы можете увидеть подробности ниже:

    wsrep_provider=/usr/lib64/galera/libgalera_smm.so   # Path to wsrep provider library
    wsrep_cluster_address="gcomm://192.168.1.132,192.168.1.133,192.168.1.134"   # Group Node, add all MardiaDB Server IP
    binlog_format=row
    default_storage_engine=InnoDB
    innodb_autoinc_lock_mode=2
    bind-address=0.0.0.0

    # Add some configuration below
    # Cluster Name
    wsrep_cluster_name="mariadb_cluster"

    # Add Server IP - on mariadb2 = 192.168.1.133 - on mariadb3 = 192.168.1.134
    wsrep_node_address="192.168.1.132"

    # Replication Provider with rsync
    wsrep_sst_method=rsync

    Сохраните файл и выйдите.

    На сервере mariadb1 давайте загрузим кластер с помощью следующей команды:

    /etc/rc.d/init.d/mysql bootstrap

    результат:

    Bootstrapping the cluster.. Starting MySQL.. SUCCESS!

    На серверах mariadb2 и mariadb3 запустите MariaDB в обычном режиме:

    /etc/init.d/mysql start

    загрузка mariadb1.

    mariadb2 и mariadb3 запускаются.

    MariaDB запущена на всех узлах, теперь настройте пароль root для MariaDB на всех серверах с помощью команды ниже:

    /usr/bin/mysql_secure_installation

    E. Настройте Clustercheck

    Clustercheck — полезный bash-скрипт, позволяющий прокси-серверу (например, HAProxy) отслеживать сервер MariaDB.

    Перейдите в каталог /tmp и загрузите скрипт с помощью wget:

    cd /tmp
    wget https://raw.githubusercontent.com/olafz/percona-clustercheck/master/clustercheck

    Теперь сделайте скрипт исполняемым, изменив разрешение и переместив его в каталог /usr/bin/:

    chmod +x clustercheck
    mv clustercheck /usr/bin/

    Затем создайте скрипт xinetd для clusterchek с помощью команды vi в каталоге \/etc/xinet.d/\:

    vi /etc/xinetd.d/mysqlchk

    Вставьте конфигурацию ниже:

    # default: on
    # description: mysqlchk
    service mysqlchk
    {
            disable = no
            flags = REUSE
            socket_type = stream
            port = 9200             # This port used by xinetd for clustercheck
            wait = no
            user = nobody
            server = /usr/bin/clustercheck
            log_on_failure += USERID
            only_from = 0.0.0.0/0
            per_source = UNLIMITED
    }

    Сохранить и выйти.

    Добавьте clustercheck в список сервисов:

    vi /etc/services

    Перейдите к строке 10101, прокомментируйте службы, использующие порт 9200, и добавьте новую строку для mysqlchk/clustercheck.

    mysqlchk        9200/tcp                # mysqlchk

    #wap-wsp         9200/tcp                # WAP connectionless session service
    #wap-wsp         9200/udp                # WAP connectionless session service

    Сохраните файл и выйдите.

    Затем запустите службу xinetd:

    systemctl start xinetd

    Чтобы выполнить проверку кластера, вы должны создать нового пользователя в MySQL. Войдите в оболочку MariaDB и создайте нового пользователя с именем \clustercheckuser\ и паролем \clustercheckpassword!\.

    mysql -u root -p
    GRANT PROCESS ON *.* TO 'clustercheckuser'@'localhost' IDENTIFIED BY 'clustercheckpassword!' ;
    exit;

    На этом этапе все серверы MariaDB синхронизируются.

    Тестирование кластерной проверки:

    /usr/bin/clustercheck

    Убедитесь, что код результатов равен 200.

    Шаг 2 — Установите и настройте HAProxy

    Вход на сервер HAProxy:

    ssh 

    Станьте пользователем root и добавьте IP-адрес и имя хоста сервера MariaDB в файл \/etc/hosts\:

    sudo su
    vi /etc/hosts

    HAProxy доступен в базовом репозитории CentOS, запустите эту команду yum, чтобы установить его:

    yum -y install haproxy

    Затем настройте журнал для HAProxy, отредактировав файл конфигурации rsyslog:

    vi /etc/rsyslog.conf

    Раскомментируйте порт udp:

    # Provides UDP syslog reception
    $ModLoad imudp
    $UDPServerRun 51

    Сохраните файл и выйдите из редактора.

    Добавьте конфигурацию HAProxy в каталог rsyslog.d:

    vi /etc/rsyslog.d/haproxy.conf

    Вставьте конфигурацию ниже:

    local2.=info     /var/log/haproxy-access.log
    local2.notice    /var/log/haproxy-info.log

    Сохраните файл и перезапустите rsyslog:

    systemctl restart rsyslog

    Затем создайте новый файл конфигурации HAProxy.

    Перейдите в каталог /etc/haproxy и сделайте резервную копию файла конфигурации dafult haproxy.

    cd /etc/haproxy/
    mv haproxy.cfg haproxy.cfg.orig

    Создайте новый файл конфигурации haproxy:

    vi /etc/haproxy/haproxy.cfg

    И вставьте конфигурацию HAProxy ниже:

    global
            log 127.0.0.1   local2
            maxconn 1024
            user haproxy
            group haproxy
            daemon
            stats socket /var/run/haproxy.sock mode 600 level admin         # Make sock file for haproxy

    defaults
            log     global
            mode    http
            option  tcplog
            option  dontlognull
            retries 3
            option  redispatch
            maxconn 1024
            timeout connect 5000ms
            timeout client 50000ms
            timeout server 50000ms

    listen mariadb_cluster 0.0.0.0:3030
    ## MariaDB balance leastconn - the cluster listening on port 3030.
            mode tcp
            balance leastconn
            option httpchk
            server mariadb1 192.168.1.132:3306 check port 9200
            server mariadb2 192.168.1.133:3306 check port 9200
            server mariadb3 192.168.1.134:3306 check port 9200 backup       # Make mariadb3 as backup - automatic replication data

    listen stats 0.0.0.0:9000
    ## HAProxy stats web gui running on port 9000 - username and password: howtoforge.
            mode http
            stats enable
            stats uri /stats
            stats realm HAProxy\ Statistics
            stats auth howtoforge:howtoforge
            stats admin if TRUE

    Порт 3030 — это порт MariaDB с балансировкой нагрузки, мы можем получить доступ к базам данных на всех серверах MariaDB с IP-адресом балансировщика нагрузки и этим портом.

    Порт 9000 — это порт для веб-интерфейса, он позволяет отслеживать HAProxy из браузера.

    Теперь запустите firewalld, откройте порты 9000 и 3030, а затем перезагрузите его:

    systemctl start firewalld
    firewall-cmd --permanent --add-port=9000/tcp
    firewall-cmd --permanent --add-port=3030/tcp
    firewall-cmd --reload

    Запустите HAProxy командой systemctl:

    systemctl start haproxy

    Шаг 3 — Тестирование HAProxy и MariaDB

    А. Репликационное тестирование

    Войдите на сервер MariaDB, войдите в оболочку MySQL и создайте новую базу данных из mariadb1, затем из mariadb2 и, наконец, из mariadb3.

    mysql -u root -p
    create database this_mariadb1;  # Run this on mariadb1 server
    create database this_mariadb2;  # Run this on mariadb2 server
    create database this_mariadb3;  # Run this on mariadb3 server

    Проверьте базы данных:

    B. Доступ к серверу MariaDB через HAProxy

    Теперь мы получаем доступ к кластеру серверов MariaDB и базам данных через IP-адрес HAProxy на порту 3030.

    Перед выполнением этого теста включите удаленный доступ к серверу MariaDB, создав нового пользователя root с хостом \%\.

    Войдите в оболочку MariaDB и создайте нового пользователя «root» с паролем «aqwe123»:

    mysql -u root -p
    GRANT ALL PRIVILEGES ON *.* TO '%' IDENTIFIED BY "aqwe123";

    Затем получите доступ к таблице базы данных mysql.user через сервер HAProxy:

    mysql -u root -p -h 192.168.1.135 -P 3030 -e "select Host, User, Password from mysql.user"

    Вы можете увидеть пользователей сервера базы данных, обратившись к IP-адресу балансировщика нагрузки через порт 3030. Вы можете получить доступ к базам данных на узлах MySQL, обратившись к IP-адресу HAProxy через порт 3030.

    Еще один тест сервера: алгоритм наименьших коннов:

    C. Войдите в веб-интерфейс HAProxy

    Вы можете получить доступ к серверу мониторинга HAProxy через порт 9000, используя имя пользователя и пароль «howtoforge», чтобы отобразить веб-интерфейс HAProxy:

    http://192.168.1.135:9000/статистика

    HAProxy был успешно установлен, и вы можете видеть, что серверы MariaDB отслеживаются.

    Заключение

    MariaDB Galera Cluster — это синхронный кластер с несколькими мастерами, который обеспечивает балансировку нагрузки для баз данных MySQL. Это хорошее решение для создания мощной системы баз данных для вашего сайта. Кластер MariaDB Galera поддерживает механизмы хранения xtradb и innodb, обеспечивает автоматическую репликацию и позволяет автоматически присоединять новые узлы. Мы можем использовать HAProxy перед кластером базы данных в качестве балансировщика нагрузки. Балансировщик нагрузки помогает распределять входящие запросы по всем базам данных. Мы используем кластерную проверку скрипта bash для мониторинга базы данных из HAProxy. MariaDB Galera Cluster и HAProxy — одно из лучших решений для создания системы базы данных с высокой доступностью.