Как настроить HAProxy в качестве балансировщика нагрузки для MariaDB на CentOS 7
На этой странице
- Шаг 1. Установка и настройка кластера MariaDB Galera
- А. Настройте имена хостов и подготовьте базовую систему
- Б. Установите сервер MariaDB Galera
- С. Настроить брандмауэр
- Д. Настройка кластера MariaDB Galera
- Э. Настроить кластерную проверку
- А. Репликационное тестирование
- Б. Доступ к серверу MariaDB через HAProxy
- С. Войдите в веб-интерфейс 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/hostsHAProxy доступен в базовом репозитории 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 — одно из лучших решений для создания системы базы данных с высокой доступностью.