ClusterControl е чудесен инструмент за разгръщане и управление на клъстери от бази данни - ако се занимавате с MySQL, можете лесно да разгръщате клъстери, базирани както на традиционните MySQL главен-подчинен репликация, на Galera Cluster или MySQL NDB Cluster. За постигане на висока наличност разгръщането на клъстер обаче не е достатъчно. Възлите може (и най-вероятно ще) да паднат и системата ви трябва да може да се адаптира към тези промени.
Тази адаптация може да се случи на различни нива. Можете да внедрите някаква логика в приложението - тя ще проверява състоянието на клъстерните възли и насочва трафика към тези, които са достъпни в дадения момент. Можете също така да създадете прокси слой, който ще реализира висока наличност във вашата система. В тази публикация в блога бихме искали да споделим някои съвети как можете да постигнете това с помощта на ClusterControl.
Разгръщане на HAProxy с помощта на ClusterControl
HAProxy е стандартът - един от най-популярните прокси сървъри, използвани във връзка с MySQL (но не само, разбира се). ClusterControl поддържа внедряване и наблюдение на HAProxy възли. Също така помага за внедряване на висока наличност на самия прокси с помощта на keepalived.
Разгръщането е доста просто - трябва да изберете или попълните IP адреса на хост, където ще бъде инсталиран HAProxy, да изберете порт, политика за балансиране на натоварването, да решите дали ClusterControl трябва да използва съществуващо хранилище или най-новия изходен код за внедряване на HAProxy. Можете също да изберете кои бекенд възли искате да включите в конфигурацията на прокси сървъра и дали да са активни или резервни.
По подразбиране екземплярът на HAProxy, разгърнат от ClusterControl, ще работи върху MySQL Cluster (NDB), Galera Cluster, PostgreSQL стрийминг репликация и MySQL репликация. За репликация главен-подчинен ClusterControl може да конфигурира два слушателя, един за четене и друг за четене-запис. След това приложенията ще трябва да изпращат четене и запис до съответните портове. За мулти-главна репликация ClusterControl ще настрои стандартното TCP балансиране на натоварването въз основа на алгоритъм за най-малко балансиране на връзките (напр. за Galera Cluster, където всички възли могат да се записват).
Keepalived се използва за добавяне на висока наличност към прокси слоя. Когато имате поне два HAProxy възела във вашата система, можете да инсталирате Keepalived от потребителския интерфейс на ClusterControl.
Ще трябва да изберете два HAProxy възела и те ще бъдат конфигурирани като двойка активен - готовност. На активния сървър ще бъде присвоен виртуален IP и, ако не успее, ще бъде преназначен на прокси сървъра в готовност. По този начин можете просто да се свържете с VIP и всичките ви заявки ще бъдат насочени към текущо активния и работещ HAProxy възел.
Можете да намерите повече подробности за това как са конфигурирани вътрешните елементи, като прочетете нашия урок за HAProxy.
Разгръщане на ProxySQL с помощта на ClusterControl
Докато HAProxy е солидно прокси и много популярен избор, му липсва информираност за базата данни, например разделяне на четене-запис. Единственият начин да го направите в HAProxy е да създадете два бекенда и да слушате на два порта - един за четене и един за запис. Обикновено това е добре, но изисква да приложите промени в приложението си - приложението трябва да разбере какво е четене и какво е запис и след това да насочи тези заявки към правилния порт. Би било много по-лесно просто да се свържете с един порт и да оставите проксито да реши какво да прави по-нататък - това е нещо, което HAProxy не може да направи, тъй като това, което прави, е просто маршрутизиране на пакети - не се прави проверка на пакети и, особено, няма разбиране на протокола MySQL.
ProxySQL решава този проблем - той говори с MySQL протокол и може (наред с други неща) да извърши разделяне на четене-запис чрез своите мощни правила за заявка и да насочва входящия MySQL трафик според различни критерии. Инсталирането на ProxySQL от ClusterControl е лесно - искате да отидете в раздел Управление -> Балансиране на натоварването и да попълните раздела „Разгръщане на ProxySQL“ с необходимите данни.
Накратко, трябва да изберем къде ще бъде инсталиран ProxySQL, какъв потребител за администриране и парола трябва да има, кой потребител за наблюдение да използва, за да се свърже с MySQL backends и да провери тяхното състояние и състояние на наблюдение. От ClusterControl можете или да създадете нов потребител, който да бъде използван от приложението - можете да решите неговото име, парола, достъп до кои бази данни се предоставят и какви привилегии на MySQL ще има този потребител. Такъв потребител ще бъде създаден както от страна на MySQL, така и на ProxySQL. Вторият вариант, по-подходящ за съществуващи инфраструктури, е да се използват съществуващите потребители на база данни. Трябва да подадете потребителско име и парола и такъв потребител ще бъде създаден само на ProxySQL.
И накрая, трябва да отговорите на въпрос:използвате ли неявни транзакции? Под това разбираме транзакциите, стартирани чрез изпълнение на SET autocommit=0; Ако го използвате, ClusterControl ще конфигурира ProxySQL да изпраща целия трафик към главния. Това е необходимо, за да се гарантира, че ProxySQL ще обработва транзакциите правилно в ProxySQL 1.3.x и по-стари. Ако не използвате SET autocommit=0 за създаване на нова транзакция, ClusterControl ще конфигурира разделяне на четене/запис.
ProxySQL, като всеки прокси, може да се превърне в единична точка на повреда и трябва да се направи излишен, за да се постигне висока наличност. Има няколко метода за това. Един от тях е да разпределите ProxySQL в уеб възлите. Идеята тук е, че през повечето време процесът ProxySQL ще работи добре и причината за неговата недостъпност е, че целият възел се е сринал. В такъв случай, ако ProxySQL е разположен заедно с уеб възела, не е нанесена голяма вреда, защото този конкретен уеб възел също няма да бъде наличен.
Друг метод е да използвате Keepalived по подобен начин, както направихме в случая с HAProxy.
Можете да намерите повече подробности за това как са конфигурирани вътрешните елементи, като прочетете нашия урок за ProxySQL.