Има различни причини за надграждане на вашите бази данни. Това може да бъде да приложите корекции на сигурността, да използвате нови функции, да разрешите проблеми със съвместимостта или просто да поддържате системата си актуална. Тази надстройка може да бъде голяма или незначителна и в зависимост от технологията има различни подходи за извършване на тази работа, но ако имате нужда системите ви да работят непрекъснато с нулев престой, извършването на непрекъснато надграждане може да бъде най-добрият вариант .
В този блог ще видим някои съображения, които трябва да вземете предвид преди надстройката и как да извършите непрекъснато надграждане на MySQL.
Малки срещу големи надстройки
По принцип малките надстройки са безопасни по начина, по който можете лесно да ги понижите или върнете назад и трябва да са съвместими с предишните пакети и функции.
Основната надстройка на версията включва някои рискове като премахване на пакет от база данни, съвместимост на конфигурацията и конекторите, оттеглени функции и др.
Така че, дори когато тестването е важно и за двата сценария, в случай на големи надстройки е задължително, ако искате да избегнете сериозни проблеми за вашия бизнес.
Преди надстройка
Сега нека разгледаме някои съображения, преди да надстроим, за да избегнем бъдещи проблеми.
Резервни копия
Резервните копия винаги са важни и дори повече, ако искате да надстроите своята база данни. Ако нещо се обърка и други опции за възстановяване при бедствие не успеят, ще ви е необходимо резервно копие, за да възстановите вашата база данни. Така че, преди да започнете задачата, направете пълен архив (физическо или/или логическо) на текущата си база данни и я пазете в безопасност, докато се уверите, че всичко работи правилно за няколко дни/седмици.
Преглед на остарелите функции
Ако използвате функция, която е остаряла в новата версия, приложението ви може да се провали и ще трябва да върнете обратно, за да възстановите системите си, което ще генерира престой (в зависимост от подхода) и загуба на време. Проверката на оттеглената функция и сравнението им с тези, които използвате, ще избегне този неуспешен опит за надстройка.
Тестване
Това е важно не само за надстройки, но и за всяка промяна във вашата база данни или приложение. Наличието на тестова среда, която репликира производствената среда, може да ви спести време и да избегне неочаквани проблеми по време на надграждане или промяна на базата данни.
Отмяна
При всяко надграждане е важно да имате готов връщане назад, който да бъде използван, ако е необходимо, за да може вашата база данни да работи възможно най-скоро. В противен случай това може да повлияе на вашия RTO (Цел за време за възстановяване), в случай че трябва да пресъздадете клъстера от резервно копие или друга опция за план за възстановяване.
Имайте предвид, че понякога понижаването на версията не е възможно, така че трябва да имате вторичен план, в случай че трябва да отмените промените си.
Проверки на доставчик
В зависимост от доставчика и версията, можете да използвате командата mysqlcheck, за да извършите предварителната проверка на текущата си инсталация и да потвърдите, че сте готови да започнете.
$ mysqlcheck -u root -p --all-databases --check-upgrade
Enter password:
mysql.columns_priv OK
mysql.db OK
mysql.engine_cost OK
mysql.event OK
mysql.func OK
mysql.general_log OK
mysql.gtid_executed OK
mysql.help_category OK
mysql.help_keyword OK
mysql.help_relation OK
mysql.help_topic OK
mysql.innodb_index_stats OK
mysql.innodb_table_stats OK
mysql.ndb_binlog_index OK
mysql.plugin OK
mysql.proc OK
mysql.procs_priv OK
mysql.proxies_priv OK
mysql.server_cost OK
mysql.servers OK
mysql.slave_master_info OK
mysql.slave_relay_log_info OK
mysql.slave_worker_info OK
mysql.slow_log OK
mysql.tables_priv OK
mysql.time_zone OK
mysql.time_zone_leap_second OK
mysql.time_zone_name OK
mysql.time_zone_transition OK
mysql.time_zone_transition_type OK
mysql.user OK
sys.sys_config OK
Това е първата проверка, която трябва да се извърши преди надстройката и ще провери дали няма:
- Таблици, използващи остарели типове данни или функции
- Осираци frm файлове
- Задействания с липсващ или празен дефинер или невалиден контекст за създаване
Има още няколко неща, които трябва да проверите, но за да избегнете обширна публикация в блога, можете да се обърнете към официалната документация на MySQL за това.
Ръчно подвижни надстройки за MySQL
Има различни подходи за извършване на непрекъснато надграждане. Може да е на място, като се използва репликация или дори комбинация от тях. Във всеки случай, ако искате да избегнете престой, не трябва да извършвате промени в приложението си по време на надстройката. За това можете да добавите Load Balancer пред вашите бази данни. Приложението ви ще се свърже с вашия Load Balancer и ще пренасочи трафика към наличните възли.
Да приемем, че имате MySQL репликация с 1 главен и 2 подчинени възела и 1 HAProxy възел пред тях:
Опростен начин за извършване на ръчно подвижно надграждане в тази среда може да бъде:
- Деактивирайте един подчинен възел от вашия HAProxy
- Уверете се, че нямате трафик на този подчинен възел
- Надстройте ръчно подчинения възел
- Проверете състоянието на репликация, за да се уверите, че е актуално
- Деактивирайте главния възел във вашия HAProxy
- Уверете се, че нямате трафик на главния си възел
- Насърчаване на надстроения подчинен възел
- Активирайте го във вашия HAProxy
- Потвърдете, че новият главен адрес получава трафик
- Преконфигурирайте втория си подчинен за репликация от новия главен
- Деактивирайте второто подчинено устройство от вашия HAProxy
- Уверете се, че нямате трафик на този подчинен възел
- Надстройте ръчно подчинения възел
- Проверете състоянието на репликация, за да се уверите, че е актуално
- Активирайте го във вашия HAProxy
- Потвърдете, че подчинения възел получава трафик (ако е необходимо)
- Преконфигурирайте стария си главен файл, за да се репликира от новия главен файл
- Надстройте стария главен възел ръчно
- Проверете състоянието на репликация, за да се уверите, че е актуално
- Активирайте го във вашия HAProxy
- Потвърдете, че старият главен (сега подчинен) получава трафик (ако е необходимо)
Както можете да видите, дори и по опростен начин, тази задача изисква много стъпки и означава повече възможности нещо да се обърка.
Постоянни надстройки на ClusterControl за MySQL
Най-добрият начин да намалите възможността за отказ е чрез автоматизиране на всички (или почти всички) тези стъпки. С помощта на ClusterControl можете да извършите незначително надграждане на вашия MySQL клъстер само с няколко щраквания.
За да направите това, отидете на ClusterControl -> Изберете Cluster -> Manage -> Upgrades, където виждате опцията Upgrade.
Надстройките са онлайн и се извършват на един възел в даден момент. Възелът ще бъде спрян, софтуерът ще бъде актуализиран и след това възелът ще бъде стартиран отново. Ако възел не успее да се надстрои, процесът се прекратява.
Ако изберете опцията Надстройка, ще видите потвърждение за версията, която ще бъде надстроена:
И просто трябва да натиснете Upgrade, за да потвърдите тази задача. След това можете да наблюдавате процеса на надстройка в раздела за активност на ClusterControl:
В същото време ClusterControl ще преконфигурира вашите Load Balancers за изпращане на трафика към наличните възли.
ClusterControl поддържа само незначителни надстройки, тъй като, както споменахме по-рано, основното надграждане е рискована задача, която изисква тестване и проучване, за да се уверите, че приложението ви ще работи добре в новата основна версия.
Заключение
Надстройването е важна задача във всички компании и може да бъде рисковано, ако не вземете определени предпазни мерки и не следвате всички стъпки за надстройка правилно.
В този блог споменахме някои съображения, които трябва да вземете предвид, преди да надстроите вашата база данни, и показахме разликата между извършването на тази задача ръчно и използването на ClusterControl, което ви помага да сведете до минимум възможността за неуспех.