Как настроить кластер MySQL 8 с тремя узлами в Debian 10
На этой странице
- Предпосылки
- Начало работы
- Установка и настройка диспетчера кластеров MySQL
- Установка и настройка узлов данных
- Установка и настройка сервера MySQL
- Тестирование кластера MySQL
- Заключение
MySQL — это бесплатная система управления реляционными базами данных с открытым исходным кодом. Он используется для хранения данных в различных целях, включая хранилища данных, электронную коммерцию и приложения для ведения журналов. MySQL Cluster — это технология, обеспечивающая масштабируемость и доступность по низкой цене.
В этом руководстве мы будем использовать один главный узел для хранения конфигурации кластера и два узла данных для хранения данных кластера. IP-адрес каждого узла показан ниже:
- Главный или управляющий узел — 104.245.33.61
- Узел данных 1 — 104.245.32.195
- Узел данных 2 — 69.87.218.169
Предпосылки
- Три сервера с Debian 10: один для узла менеджера, а другие — для узлов данных.
- На каждом сервере устанавливается пароль root.
Начиная
Во-первых, вам нужно будет обновить все серверы до последней версии. Вы можете обновить все с помощью следующей команды:
apt-get update -y
Как только все серверы будут обновлены, вы можете перейти к следующему шагу.
Установка и настройка MySQL Cluster Manager
Во-первых, вам нужно будет установить пакет управления кластером MySQL на главном узле. По умолчанию этот пакет не включен в стандартный репозиторий Debian 10. Поэтому вам нужно будет загрузить его с официального сайта MySQL.
Вы можете скачать его с помощью следующей команды:
wget https://cdn.mysql.com//Downloads/MySQL-Cluster-8.0/mysql-cluster-community-management-server_8.0.24-1debian10_amd64.deb
После загрузки файла deb установите его с помощью следующей команды:
dpkg -i mysql-cluster-community-management-server_8.0.24-1debian10_amd64.deb
После завершения установки создайте каталог для хранения конфигурации кластера с помощью следующей команды:
mkdir /var/lib/mysql-cluster
Затем создайте новый файл конфигурации с помощью следующей команды:
nano /var/lib/mysql-cluster/config.ini
Добавьте следующие строки:
[ndbd default] NoOfReplicas=2 # Number of replicas [ndb_mgmd] # Management process options: hostname=104.245.33.61 #IP of the MySQL Cluster Manager datadir=/var/lib/mysql-cluster [ndbd] hostname=104.245.32.195 #IP of the first data node NodeId=2 # Node ID for this data node datadir=/usr/local/mysql/data # Remote directory for the data files [ndbd] hostname=69.87.218.169 #IP of the second data node NodeId=3 # Node ID for this data node datadir=/usr/local/mysql/data # Remote directory for the data files [mysqld] # SQL node options: hostname=104.245.33.61 #IP of the MySQL Cluster Manager
Сохраните и закройте файл, когда закончите, затем запустите менеджер кластера с помощью следующей команды:
ndb_mgmd -f /var/lib/mysql-cluster/config.ini
Вы должны получить следующий результат:
MySQL Cluster Management Server mysql-8.0.24 ndb-8.0.24 2021-05-10 08:23:05 [MgmtSrvr] INFO -- The default config directory '/usr/mysql-cluster' does not exist. Trying to create it... 2021-05-10 08:23:05 [MgmtSrvr] INFO -- Sucessfully created config directory
Теперь убейте работающий сервер с помощью следующей команды:
pkill -f ndb_mgmd
Затем создайте файл службы systemd для MySQL Cluster Manager для управления службой:
nano /etc/systemd/system/ndb_mgmd.service
Добавьте следующие строки:
[Unit] Description=MySQL NDB Cluster Management Server After=network.target auditd.service [Service] Type=forking ExecStart=/usr/sbin/ndb_mgmd -f /var/lib/mysql-cluster/config.ini ExecReload=/bin/kill -HUP $MAINPID KillMode=process Restart=on-failure [Install] WantedBy=multi-user.target
Сохраните и закройте файл, затем перезагрузите демон systemd с помощью следующей команды:
systemctl daemon-reload
Затем запустите диспетчер кластеров и включите его запуск при перезагрузке системы с помощью следующей команды:
systemctl start ndb_mgmd
systemctl enable ndb_mgmd
Теперь вы можете проверить статус службы с помощью следующей команды:
systemctl status ndb_mgmd
Вы должны получить следующий результат:
? ndb_mgmd.service - MySQL NDB Cluster Management Server Loaded: loaded (/etc/systemd/system/ndb_mgmd.service; disabled; vendor preset: enabled) Active: active (running) since Mon 2021-05-10 08:23:53 UTC; 6s ago Process: 984 ExecStart=/usr/sbin/ndb_mgmd -f /var/lib/mysql-cluster/config.ini (code=exited, status=0/SUCCESS) Main PID: 985 (ndb_mgmd) Tasks: 12 (limit: 2359) Memory: 6.5M CGroup: /system.slice/ndb_mgmd.service ??985 /usr/sbin/ndb_mgmd -f /var/lib/mysql-cluster/config.ini May 10 08:23:53 master systemd[1]: Starting MySQL NDB Cluster Management Server... May 10 08:23:53 master ndb_mgmd[984]: MySQL Cluster Management Server mysql-8.0.24 ndb-8.0.24 May 10 08:23:53 master systemd[1]: Started MySQL NDB Cluster Management Server.
Как только вы закончите, вы можете перейти к следующему шагу.
Установка и настройка узлов данных
Далее мы создадим пакет узла данных на других серверах и настроим его для связи с MySQL Cluster Manager.
Сначала установите необходимые зависимости на обоих узлах данных с помощью следующей команды:
apt-get install libclass-methodmaker-perl -y
После установки всех зависимостей загрузите последнюю версию файла deb MySQL Data Nodes с помощью следующей команды:
wget https://cdn.mysql.com//Downloads/MySQL-Cluster-8.0/mysql-cluster-community-data-node_8.0.24-1debian10_amd64.deb
После завершения загрузки установите загруженный файл с помощью следующей команды:
dpkg -i mysql-cluster-community-data-node_8.0.24-1debian10_amd64.deb
По умолчанию узлы данных хранят все конфигурации в файле /etc/my.cnf.
Поэтому создайте новый файл /etc/my.cnf на обоих узлах данных с помощью следующей команды:
nano /etc/my.cnf
Добавьте IP-адрес кластера, как показано ниже:
[mysql_cluster] # Options for NDB Cluster processes: ndb-connectstring=104.245.33.61 #IP of the MySQL Cluster Manager
Сохраните и закройте файл, затем создайте каталог данных на обоих узлах данных:
mkdir -p /usr/local/mysql/data
Теперь запустите узлы данных с помощью следующей команды:
ndbd
Вы должны получить следующий результат:
2021-05-10 08:27:13 [ndbd] INFO -- Angel connected to '104.245.33.61:1186' 2021-05-10 08:27:13 [ndbd] INFO -- Angel allocated nodeid: 2
Затем завершите запущенный процесс ndbd следующей командой:
pkill -f ndbd
Затем создайте служебный файл systemd для ndbd на обоих узлах данных с помощью следующей команды:
nano /etc/systemd/system/ndbd.service
Добавьте следующие строки:
[Unit] Description=MySQL NDB Data Node Daemon After=network.target auditd.service [Service] Type=forking ExecStart=/usr/sbin/ndbd ExecReload=/bin/kill -HUP $MAINPID KillMode=process Restart=on-failure [Install] WantedBy=multi-user.target
Сохраните и закройте файл, затем перезагрузите демон systemd с помощью следующей команды:
systemctl daemon-reload
Затем запустите службу ndbd и запустите ее при перезагрузке системы с помощью следующей команды:
systemctl start ndbd
systemctl enable ndbd
Вы также можете проверить статус службы ndbd с помощью следующей команды:
systemctl status ndbd
Вы должны получить следующий результат:
? ndbd.service - MySQL NDB Data Node Daemon Loaded: loaded (/etc/systemd/system/ndbd.service; disabled; vendor preset: enabled) Active: active (running) since Mon 2021-05-10 08:28:28 UTC; 12s ago Process: 740 ExecStart=/usr/sbin/ndbd (code=exited, status=0/SUCCESS) Main PID: 741 (ndbd) Tasks: 46 (limit: 2359) Memory: 827.1M CGroup: /system.slice/ndbd.service ??741 /usr/sbin/ndbd ??742 /usr/sbin/ndbd May 10 08:28:28 data1 systemd[1]: Starting MySQL NDB Data Node Daemon... May 10 08:28:28 data1 ndbd[740]: 2021-05-10 08:28:28 [ndbd] INFO -- Angel connected to '104.245.33.61:1186' May 10 08:28:28 data1 ndbd[740]: 2021-05-10 08:28:28 [ndbd] INFO -- Angel allocated nodeid: 2 May 10 08:28:28 data1 systemd[1]: Started MySQL NDB Data Node Daemon.
Установить и настроить сервер MySQL
Далее мы загрузим и установим пакеты MySQL Server и Client на узле MySQL Cluster Manager.
Сначала загрузите последнюю версию MySQL Cluster Bundle с помощью следующей команды:
wget https://cdn.mysql.com/Downloads/MySQL-Cluster-8.0/mysql-cluster_8.0.24-1debian10_amd64.deb-bundle.tar
Затем извлеките загруженный файл из каталога /opt с помощью следующей команды:
tar -xvf mysql-cluster_8.0.24-1debian10_amd64.deb-bundle.tar -C /opt
Затем измените каталог на /opt и установите необходимые зависимости с помощью следующей команды:
cd /opt
apt-get install libaio1 libmecab2 libnuma1 psmisc -y
Затем установите общий deb-файл MySQL с помощью следующей команды:
dpkg -i mysql-common*
Затем установите пакеты клиента MySQL с помощью следующей команды:
dpkg -i mysql-cluster-community-client_8.0.24-1debian10_amd64.deb mysql-cluster-community-client-core_8.0.24-1debian10_amd64.deb mysql-cluster-community-client-plugins_8.0.24-1debian10_amd64.deb
dpkg -i mysql-client_8.0.24-1debian10_amd64.deb
dpkg -i mysql-cluster-community-server*
Если вы получили какую-либо ошибку зависимости, выполните следующую команду:
apt-get install -f
Затем установите пакет MySQL Server с помощью следующей команды:
dpkg -i mysql-server_8.0.24-1debian10_amd64.deb
Во время установки вам будет предложено установить пароль root для MySQL.
После установки сервера MySQL вам нужно будет отредактировать основной файл конфигурации MySQL и определить IP-адрес кластера:
nano /etc/mysql/my.cnf
Добавьте следующие строки:
[mysqld] # Options for mysqld process: ndbcluster # run NDB storage engine [mysql_cluster] # Options for NDB Cluster processes: ndb-connectstring=104.245.33.61 #IP of the MySQL Cluster Manager
Сохраните и закройте файл, когда закончите. Затем перезапустите службу MySQL и включите ее запуск при перезагрузке системы:
systemctl restart mysql
systemctl enable mysql
Вы можете проверить статус сервера MySQL с помощью следующей команды:
systemctl status mysql
Вы должны увидеть следующий вывод:
? mysql.service - MySQL Cluster Community Server Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled) Active: active (running) since Mon 2021-05-10 08:35:04 UTC; 7s ago Docs: man:mysqld(8) http://dev.mysql.com/doc/refman/en/using-systemd.html Process: 1950 ExecStartPre=/usr/share/mysql-8.0/mysql-systemd-start pre (code=exited, status=0/SUCCESS) Main PID: 1985 (mysqld) Status: "Server is operational" Tasks: 47 (limit: 2359) Memory: 372.0M CGroup: /system.slice/mysql.service ??1985 /usr/sbin/mysqld May 10 08:35:01 master systemd[1]: Starting MySQL Cluster Community Server... May 10 08:35:04 master systemd[1]: Started MySQL Cluster Community Server.
Как только вы закончите, вы можете перейти к следующему шагу.
Тестовый кластер MySQL
Теперь мы успешно установили и настроили MySQL Cluster с тремя узлами. Далее вам нужно будет проверить, работает ли он или нет.
Сначала войдите в узел MySQL Cluster Manager и войдите в MySQL с помощью следующей команды:
mysql -u root -p
Укажите свой корневой пароль MySQL, затем проверьте информацию о кластере с помощью следующей команды:
mysql> SHOW ENGINE NDB STATUS \G
Если все в порядке, вы должны получить следующий вывод:
*************************** 1. row *************************** Type: ndbclus Name: connection Status: cluster_node_id=4, connected_host=104.245.33.61, connected_port=1186, number_of_data_nodes=2, number_of_ready_data_nodes=2, connect_count=0 *************************** 2. row *************************** Type: ndbclus Name: NdbTransaction Status: created=2, free=2, sizeof=392 *************************** 3. row *************************** Type: ndbclus Name: NdbOperation Status: created=4, free=4, sizeof=944 *************************** 4. row *************************** Type: ndbclus Name: NdbIndexScanOperation Status: created=0, free=0, sizeof=1152 *************************** 5. row *************************** Type: ndbclus Name: NdbIndexOperation Status: created=0, free=0, sizeof=952 *************************** 6. row *************************** Type: ndbclus Name: NdbRecAttr Status: created=0, free=0, sizeof=88 *************************** 7. row *************************** Type: ndbclus Name: NdbApiSignal Status: created=16, free=16, sizeof=144 *************************** 8. row *************************** Type: ndbclus Name: NdbLabel Status: created=0, free=0, sizeof=200 *************************** 9. row *************************** Type: ndbclus Name: NdbBranch Status: created=0, free=0, sizeof=32 *************************** 10. row *************************** Type: ndbclus Name: NdbSubroutine Status: created=0, free=0, sizeof=72 *************************** 11. row *************************** Type: ndbclus Name: NdbCall Status: created=0, free=0, sizeof=24 *************************** 12. row *************************** Type: ndbclus Name: NdbBlob Status: created=0, free=0, sizeof=592 *************************** 13. row *************************** Type: ndbclus Name: NdbReceiver Status: created=0, free=0, sizeof=128 *************************** 14. row *************************** Type: ndbclus Name: NdbLockHandle Status: created=0, free=0, sizeof=48 *************************** 15. row *************************** Type: ndbclus Name: binlog Status: latest_epoch=897648164875, latest_trans_epoch=820338753551, latest_received_binlog_epoch=0, latest_handled_binlog_epoch=0, latest_applied_binlog_epoch=0 15 rows in set (0.00 sec)
Теперь выйдите из оболочки MySQL с помощью следующей команды:
mysql> exit
Теперь мы выполним еще один тест, чтобы убедиться, что кластер работает правильно.
Подключите консоль управления кластером с помощью следующей команды:
ndb_mgm
Вы должны увидеть следующий вывод:
-- NDB Cluster -- Management Client -- ndb_mgm>
Теперь выполните следующую команду, чтобы проверить все данные ndoes:
ndb_mgm> SHOW
Вы должны получить следующий результат:
Connected to Management Server at: 104.245.33.61:1186 Cluster Configuration --------------------- [ndbd(NDB)] 2 node(s) id=2 @104.245.32.195 (mysql-8.0.24 ndb-8.0.24, Nodegroup: 0, *) id=3 @69.87.218.169 (mysql-8.0.24 ndb-8.0.24, Nodegroup: 0) [ndb_mgmd(MGM)] 1 node(s) id=1 @104.245.33.61 (mysql-8.0.24 ndb-8.0.24) [mysqld(API)] 1 node(s) id=4 @104.245.33.61 (mysql-8.0.24 ndb-8.0.24)
Чтобы проверить состояние первого узла данных, выполните следующую команду:
ndb_mgm> 2 STATUS
Вы должны увидеть следующий вывод:
Node 2: started (mysql-8.0.24 ndb-8.0.24)
Чтобы проверить состояние второго узла данных, выполните следующую команду:
ndb_mgm> 3 STATUS
Вы должны увидеть следующий вывод:
Node 3: started (mysql-8.0.24 ndb-8.0.24)
Заключение
Поздравляем! вы успешно установили и настроили кластер MySQL с тремя узлами на сервере Debian 10. Теперь вы можете использовать эту настройку в производственной среде для достижения масштабируемости и доступности.