Изисква ClusterControl 1.6 или по-нова версия. Отнася се за MySQL базирани инстанции/клъстери.
В някои случаи може да искате да стартирате няколко екземпляра на MySQL на една машина. Може да искате да предоставите на различни потребители достъп до техните собствени сървъри на MySQL, които те управляват сами, или може да искате да тествате нова версия на MySQL, като същевременно поддържате съществуваща производствена настройка необезпокоявана.
Възможно е да използвате различен двоичен файл на MySQL сървър за всеки екземпляр или да използвате същия двоичен файл за множество екземпляри (или комбинация от двата подхода). Например, можете да стартирате сървър от MySQL 5.6 и един от MySQL 5.7, за да видите как различните версии се справят с определено работно натоварване. Или може да стартирате множество екземпляри на най-новата версия на MySQL, като всеки управлява различен набор от бази данни.
Независимо дали използвате различни сървърни двоични файлове, всеки екземпляр, който стартирате, трябва да бъде конфигуриран с уникални стойности за няколко оперативни параметъра. Това елиминира потенциала за конфликт между инстанции. Можете да използвате MySQL Sandbox, за да създадете множество MySQL екземпляри. Или можете да използвате mysqld_multi наличен в MySQL, за да стартирате или спрете произволен брой отделни mysqld процеси, работещи на различни TCP/IP портове и UNIX сокети.
В тази публикация в блога ще ви покажем как да конфигурирате ClusterControl да наблюдава множество MySQL екземпляри, работещи на един хост.
Ограничение на ClusterControl
Към момента на писане, ClusterControl не поддържа наблюдение на множество екземпляри на един хост на група клъстер/сървър. Той предполага следните най-добри практики:
- Само един екземпляр на MySQL на хост (физически сървър или виртуална машина).
- Резервирането на MySQL данни трябва да бъде конфигурирано на N+1 сървър.
- Всички екземпляри на MySQL се изпълняват с еднаква конфигурация в групата клъстер/сървър, напр. порт за слушане, регистър на грешки, datadir, basedir, сокет са идентични.
По отношение на точките, споменати по-горе, ClusterControl приема, че в група клъстер/сървър:
- Екземплярите на MySQL са конфигурирани еднакво в клъстер; един и същ порт, едно и също местоположение на регистрационните файлове, база/данни директория и други критични конфигурации.
- Той наблюдава, управлява и внедрява само един MySQL екземпляр на хост.
- MySQL клиентът трябва да бъде инсталиран на хоста и да е наличен в изпълнимия път за съответния потребител на ОС.
- MySQL е свързан с IP адрес, достъпен от възела ClusterControl.
- Продължава да следи статистиката на хоста, напр. CPU/RAM/диск/мрежа за всеки MySQL екземпляр поотделно. В среда с множество екземпляри на хост, трябва да очаквате излишни статистически данни за хост, тъй като той наблюдава един и същ хост няколко пъти.
С горните предположения, следните функции на ClusterControl не работят за хост с множество екземпляри:
Архивиране – Percona Xtrabackup не поддържа множество екземпляри на хост и mysqldump, изпълняван от ClusterControl, се свързва само към сокета по подразбиране.
Управление на процеси – ClusterControl използва стандартния „pgrep -f mysqld_safe“, за да провери дали MySQL работи на този хост. С множество MySQL екземпляри това е фалшиво положителен подход. Като такова автоматичното възстановяване за възел/клъстер няма да работи.
Управление на конфигурацията - ClusterControl предоставя стандартната конфигурационна директория на MySQL. Обикновено се намира под /etc/ и /etc/mysql.
Заобиколно решение
Мониторингът на множество MySQL екземпляри на машина все още е възможно с ClusterControl с просто заобиколно решение. Всеки MySQL екземпляр трябва да се третира като един обект на група сървъри.
В този пример имаме 3 екземпляра на MySQL на един хост, създаден с MySQL Sandbox:
ClusterControl наблюдава множество екземпляри на един и същ хостСъздадохме нашите MySQL екземпляри, използвайки следните команди:
$ su - sandbox
$ make_multiple_sandbox mysql-5.7.23-linux-glibc2.12-x86_64.tar.gz
По подразбиране MySQL Sandbox създава екземпляри на mysql, които слушат 127.0.0.1. Необходимо е да конфигурирате всеки възел по подходящ начин, за да го накарате да слуша всички налични IP адреси. Ето обобщението на нашите MySQL екземпляри в хоста:
[[email protected] multi_msb_mysql-5_7_23]$ cat default_connection.json
{
"node1":
{
"host": "master",
"port": "15024",
"socket": "/tmp/mysql_sandbox15024.sock",
"username": "[email protected]%",
"password": "msandbox"
}
,
"node2":
{
"host": "master",
"port": "15025",
"socket": "/tmp/mysql_sandbox15025.sock",
"username": "[email protected]%",
"password": "msandbox"
}
,
"node3":
{
"host": "master",
"port": "15026",
"socket": "/tmp/mysql_sandbox15026.sock",
"username": "[email protected]%",
"password": "msandbox"
}
}
Следващата стъпка е да промените конфигурацията на новосъздадените екземпляри. Отидете на my.cnf за всеки от тях и хеширайте променлива bind_address:
[[email protected] multi_msb_mysql-5_7_23]$ ps -ef | grep mysqld_safe
sandbox 13086 1 0 08:58 pts/0 00:00:00 /bin/sh bin/mysqld_safe --defaults-file=/home/sandbox/sandboxes/multi_msb_mysql-5_7_23/node1/my.sandbox.cnf
sandbox 13805 1 0 08:58 pts/0 00:00:00 /bin/sh bin/mysqld_safe --defaults-file=/home/sandbox/sandboxes/multi_msb_mysql-5_7_23/node2/my.sandbox.cnf
sandbox 14065 1 0 08:58 pts/0 00:00:00 /bin/sh bin/mysqld_safe --defaults-file=/home/sandbox/sandboxes/multi_msb_mysql-5_7_23/node3/my.sandbox.cnf
[[email protected] multi_msb_mysql-5_7_23]$ vi my.cnf
#bind_address = 127.0.0.1
След това инсталирайте mysql на вашия главен възел и рестартирайте всички екземпляри, като използвате скрипт restart_all.
[[email protected] multi_msb_mysql-5_7_23]$ yum install mysql
[[email protected] multi_msb_mysql-5_7_23]$ ./restart_all
# executing "stop" on /home/sandbox/sandboxes/multi_msb_mysql-5_7_23
executing "stop" on node 1
executing "stop" on node 2
executing "stop" on node 3
# executing "start" on /home/sandbox/sandboxes/multi_msb_mysql-5_7_23
executing "start" on node 1
. sandbox server started
executing "start" on node 2
. sandbox server started
executing "start" on node 3
. sandbox server started
От ClusterControl трябва да извършим „Импортиране“ за всеки екземпляр, тъй като трябва да ги изолираме в различна група, за да може да работи.
ClusterControl импортира съществуващ сървърЗа node1 въведете следната информация в ClusterControl> Import:
ClusterControl импортира съществуващ сървърУверете се, че сте поставили правилни портове (различни за различните екземпляри) и хост (едни и същи за всички екземпляри).
Можете да наблюдавате напредъка, като щракнете върху иконата Активност/Работа в горното меню.
ClusterControl импортира съществуващи подробности за сървъраЩе видите node1 в потребителския интерфейс, след като ClusterControl завърши работата. Повторете същите стъпки, за да добавите още два възела с порт 15025 и 15026. Трябва да видите нещо като по-долу, след като бъдат добавени:
Табло за управление на ClusterControlЕто. Току-що добавихме нашите съществуващи MySQL екземпляри в ClusterControl за наблюдение. Приятно наблюдение!
PS.:За да започнете с ClusterControl, щракнете тук!