БалансиранеMySQL се зарежда с HAProxy

Оферта от 8host.com

зарежда

HAProxy е инструмент за балансиране на натоварването с отворен код за HTTP и TCP сървъри.

Предишната статия от тази серия описа как да настроите HTTP балансиране на натоварването с HAProxy.

Това ръководство ще ви помогне да настроите балансирането на натоварването на MySQL сървъра.

Забележка : Всички MySQL сървъри трябва да бъдат конфигурирани с репликация Master-Master, тъй като балансирането на натоварването включва четене и запис на всички бекендове.

Изисквания

За да завършите урока, трябва да имате три сървъра.

Сървър 1 - балансьор на натоварването

  • Име на хост: haproxy
  • ОС: Ubuntu
  • Вътрешен IP: 10.0.0.100

Сървър 2 - възел 1

  • Име на хост: mysql-1
  • ОС: Debian 7
  • Вътрешен IP: 10.0.0.1

Сървър 2 - възел 2

  • Име на хост: mysql-2
  • ОС: Debian 7
  • Вътрешен IP: 10.0.0.2

Стартирайте всички MySQL сървъри и се уверете, че репликацията работи правилно.

Стъпка 1: Подготовка на MySQL сървъри

Първо трябва да подготвите MySQL сървърите. Създайте два допълнителни акаунта за HAProxy. Първият потребител е необходим за проверка на състоянието на сървъра:

root@mysql-1# mysql -u root -p -e "INSERT INTO mysql.user (Host,User) стойности ('10.0.0.100','haproxy_check'); FLUSH PRIVILEGES;"

За достъп до MySQL клъстер чрез HAProxy, потребителят на MySQL трябва да има root права. Стандартният root потребител може да влиза само локално. Разбира се, човек може просто да разшири привилегиите на root потребителя; въпреки това се препоръчва да създадете отделен потребител с root права за такива случаи.

root@mysql-1# mysql -u root -p -e "ПРЕДОСТАВЯНЕ НА ВСИЧКИ ПРИВИЛЕГИИ НА *.* НА 'haproxy_root'@'10.0.0.100', ИДЕНТИФИЦИРАН ОТ 'парола' С ОПЦИЯ ЗА ПРЕДОСТАВЯНЕ; ПРОЧИСТВАНЕ НА ПРИВИЛЕГИИ"

Забележка : Заменете haproxy_root и паролата с потребителско име и силна парола.

Достатъчно е да изпълните тези стъпки на един MySQL сървър - благодарение на предварително конфигурираната репликация, промените ще бъдат дублирани на други сървъри.

Стъпка 2: Инсталиране на MySQL клиента

Клиентът MySQL трябва да бъде инсталиран на сървър 1 (балансьор на натоварването).

root@haproxy# apt-get инсталирайте mysql-клиент

Опитайте да изпълните заявка на един от главните сървъри като потребител haproxy_root:

root@haproxy# mysql -h 10.0.0.1 -u haproxy_root -p -e "ПОКАЗВАНЕ НА БАЗИ ДАННИ"

На екрана трябва да се появи списък с MySQL бази данни.

Стъпка 3: Инсталиране на HAProxy

На сървър 1 инсталирайте пакетите HAProxy:

root@haproxy# apt-get инсталирайте haproxy

След инсталирането трябва да активирате HAProxy, така че балансьорът да може да се стартира с помощта на инициализиращия скрипт:

root@haproxy# sed -i "s/ENABLED=0/ENABLED=1/" /etc/default/haproxy

За да се уверите, че конфигурацията е успешна, стартирайте началния скрипт на HAProxy без параметри:

# service haproxy Използване: /etc/init.d/haproxy

Стъпка 4: Конфигуриране на HAProxy

Преименувайте конфигурационния файл по подразбиране и създайте свой собствен файл.

mv /etc/haproxy/haproxy.cfg nano /etc/haproxy/haproxy.cfg

Първият конфигурационен блок съдържа глобални и стандартни настройки:

глобален дневник 127.0.0.1 локално известие потребителски хапрокси групов хапрокси по подразбиране дневник глобален повторни опити 2 изчакване за свързване 3000 изчакване сървър 5000 изчакване клиент 5000

Основният конфигурационен блок изглежда така:

Слушайте MySQL-Cluster свържете 127.0.0.1:3306 <5 15> Режим TCP Опция MySQL-Check Потребител HAPROXY_CHECK Балансирайте Roundrobin сървър mysql-1 10.0.0.1:3306 Проверете сървър mysql-2 10.0.0.2:3306 Проверка на проверка

Добавете още един блок код, за да настроите статистика за балансиране на натоварването

Забележка : Това е напълно незадължително; пропуснете този блок, ако нямате нужда от статистика.

listen 0.0.0.0:8080 mode http stats enable stats uri / stats realm Strictly\ Private stats auth A_Username:YourPassword stats auth Another_User:passwd

Забележка : Въведете вашите потребителски имена и пароли в кода.

Този код ще конфигурира HAProxy да слуша за HTTP заявки на порт 8080 и статистиката ще бъде защитена чрез основно HTTP удостоверяване. Статистиката е достъпна на линка:

След като завършите конфигурацията, стартирайте HAProxy.

услуга haproxy стартиране

Използвайте mysql клиент за запитване към HAProxy.

root@haproxy# mysql -h 127.0.0.1 -u haproxy_root -p -e "ПОКАЗВАНЕ НА БАЗИ ДАННИ"

Стъпка 5: Балансиране на натоварването и тестване при отказ

За да тествате балансирането на натоварването, потърсете променливата server_id поне два пъти.

root@haproxy# mysql -h 127.0.0.1 -u haproxy_root -p -e "покажи променливи като 'server_id'" +--------+-------+ Variable_name Value +-------+-------+ server_id 1 +------ -+------- + root@haproxy# mysql -h 127.0.0.1 -u haproxy_root -p -e "покажи променливи като 'server_id'" +--------+--------+ Variable_name Value +-------+-------+ ----+

Този изход говори за балансиране на натоварването чрез кръговия алгоритъм със същото тегло. Променете теглотоmysql-2 и проверете резултата.

nano /etc/haproxy/haproxy.cfg сървър mysql-2 10.0.0.2:3306 проверка на тегло 2

Рестартирайте haproxy, за да актуализирате настройките.

услуга haproxy презареждане

Заявете server_id няколко пъти:

Балансирането на натоварването вече се извършва в съотношение 1:2, където една трета от заявките се изпращат към сървъра mysql-1 и две трети към сървъра mysql-2.

Спрете MySQL сървъра, като деактивирате услугата:

root@mysql-1# услуга mysql спиране

root@mysql-1# ifconfig eth1 надолу

Заявка за показване на променливи; Следните записи в регистрационния файл ще ви кажат кога и как HAProxy е открил грешката.

tail /var/log/haproxy/haproxy.log 15 ноември 00:08:51 localhost haproxy[1671]: Сървърът mysql-cluster/mysql-1 не работи, причина: Layer4 timeout, продължителност на проверката: 2002ms. Остават 1 активен и 0 резервни сървъри. 0 активни сесии, 0 в опашката, 0 оставащи в опашката.

Стъпка 6: Настройване на Failover

Когато MySQL сървър се срине, отнема известно време, преди балансиращият HAProxy да забележи срива и да го поправи. Този раздел от ръководството ви показва как да управлявате този времеви интервал.

Първо трябва да се научите как да измервате тази стойност. Един от начините е да блокирате MySQL порта с IPTables за определен период от време; по-късно можете да изтриете правилото и да проверите дневника.

# ifconfig eth1 надолу && дата && сън 20 && ifconfig eth1 up && дата петък, 15 ноември 00:37:09 IST 2013 петък, 15 ноември 00:37:29 IST 2013

Порт 3306 беше блокиран за 20 секунди. Сега трябва да проверим дневника:

# tail /var/log/haproxy.log 15 ноември 16:49:38 localhost haproxy [1275]: Сървърът mysql-cluster/mysql-1 не работи, причина: проблем с връзката Layer4, информация: „Връзката е отказана“,времетраене на проверката: 0ms. Остават 1 активен и 0 резервни сървъри. 0 активни сесии, 0 в опашката, 0 оставащи в опашката. 15 ноември 16:49:56 localhost haproxy [1275]: Сървърът mysql-cluster/mysql-1 работи, причина: Проверката на Layer7 премина, код: 0, информация: "5.5.31-0+wheezy1-log", продължителност на проверката: 1ms. 2 активни и 0 резервни сървъра онлайн. 0 сесии в опашка, 0 общо в опашка.

Както се вижда от получените данни, за откриване на повреда са били необходими 6 секунди (16:49:32 - 16:49:38) и 4 секунди за коригиране (16:49:52 - 16:49:56).

Това се определя от параметрите за нарастване, спад и интер.

Параметърът rise задава броя на проверките, които сървърът трябва да премине, за да започне да работи (по подразбиране е 2).

Параметърът за падане определя броя проверки, които сървърът трябва да премине, за да стане мъртъв (по подразбиране е 3).

Параметърът inter определя интервала между тези проверки (по подразбиране е 2000 милисекунди).

Общо взето се оказва, че сървърът трябва да се провали на 3 последователни проверки, които се изпълняват на интервали от 2 секунди, за да се счита за неактивен. Така в горния пример ще се случи следното:

16:49:32 - Порт 3306 на mysql-1 беше блокиран 16:49:34 - Проверка - Неуспешно - Грешка №. 1 16:49:36 - Проверка - Неуспешно - Грешка №. 2 16:49:38 - Проверка - Неуспешно - Грешка №. 3 (сървърът е премахнат и събитието е регистрирано)

След премахване на правилото на защитната стена:

16:49:52 - Правилото на защитната стена е премахнато, порт 3306 е достъпен 16:49:54 - Проверка - Успешно - Успех №. 1 16:49:56 - Проверка - Успешно - Успех №. 2 (сървърът е добавен към клъстера и регистрирано събитие)

Следните настройки ще намалят интервала между проверките до 1 секунда и също ще намалят броя на проверките при падане.

nano /etc/haproxy/haproxy.cfg сървър mysql-1 10.0.0.1:3306проверка на падане 2 между 1000 сървър mysql-2 10.0.0.2:3306 проверка на падане 2 между 1000

При голям брой MySQL сървъри не се препоръчва да замърсявате частната мрежа с тестови пакети. В този случай се използват параметрите fastinter и downinter.

Параметърът fastinter задава интервала между проверките, докато сървърът преминава от едно състояние в друго (разрешено или забранено).

Параметърът downinter задава интервала между проверките, когато сървърът не работи.

Нека разгледаме такъв пример.

nano /etc/haproxy/haproxy.cfg сървър mysql-1 10.0.0.1:3306 проверка на fastinter 1000 сървър mysql-2 10.0.0.2:3306 проверка на fastinter 1000

По подразбиране параметърът inter е зададен на 2000 ms. Рестартирайте HAProxy с тази конфигурация и проверете отново:

# iptables -A INPUT -p tcp --dport 3306 -j REJECT && дата && сън 20 && iptables -D INPUT -p tcp --dport 3306 -j REJECT && дата петък, 15 ноември, 17:18:48 IST 2013 петък, 15 ноември, 17:19:08 IST 2013

Проверете дневника на HAProxy:

# tail /var/log/haproxy.log 15 ноември 17:18:52 localhost haproxy [1353]: Сървърът mysql-cluster/mysql-1 не работи, причина: проблем с връзката Layer4, информация: „Връзката е отказана“, продължителност на проверката: 0ms. Остават 1 активен и 0 резервни сървъри. 0 активни сесии, 0 в опашката, 0 оставащи в опашката. 15 ноември 17:19:11 localhost haproxy [1353]: Сървърът mysql-cluster/mysql-1 работи, причина: Проверката на Layer7 премина, код: 0, информация: "5.5.31-0+wheezy1-log", продължителност на проверката: 1ms. 2 активни и 0 резервни сървъра онлайн. 0 сесии в опашка, 0 общо в опашка.

Сега са необходими само 4 секунди за откриване на грешка и 3 секунди за възстановяване на сървъра.

В този пример се случи следното:

17:18:48 - Порт 3306блокиран 17:18:50 - Проверка - Неуспешно - Грешка №. 1 17:18:51 - Проверка - Неуспешно - Грешка №. 2 17:18:52 - Проверка - Неуспешно - Грешка №. 3 (сървърът е премахнат и събитието е регистрирано)

След премахване на правилото на защитната стена:

17:19:08 - Правилото на защитната стена е премахнато 17:19:10 - Проверка - Успешно - Успех №. 1 17:19:11 - Проверка - Успешно - Успех №. 2 (сървърът е добавен към клъстера и регистрирано събитие)

Моля, обърнете внимание, че интервалът между блокирането на сървъра и първата проверка е 2 секунди (интервал). Интервалът между Тест 1-Тест 2 и Тест 2-Тест 3 е само една секунда (по-бърз интервал). Същите интервали се спазват и при включен сървър. Параметърът fastinter контролира интервала между проверките.

Какво прави downinter? След като изключи сървъра, HAProxy продължи да го проверява на всеки 2 секунди (интервал). Ако смятате, че губите мрежови ресурси, опитайте да промените стойността на downinter на 5000, след което HAProxy ще проверява за сървър с връзка надолу на всеки 5 секунди.

Извършените по-рано тестове отхвърлиха пакетите (REJECT), което означава, че HAProxy е инициирал връзката, като е изпратил SYN пакет към mysql-1 сървъра и е получил RST пакет в отговор (вместо SYN + ACK). Следователно записът Отказана връзка се появи в дневника. В този случай трябва да използвате само параметрите fall, inter и fastinter.

Ако HAProxy не получи нищо след изпращане на SYN пакета, връзката изтича. В този случай, заедно с fall, inter и fastinter, трябва да използвате параметъра за изчакване. Това се случва, ако:

  • iptables политика - DROP;
  • Частният интерфейс е деактивиран;
  • Има проблеми с инфраструктурата на частната мрежа.

Забележка : Официалната документация може да бъде намерена тук.