Поиск по сайту:

Как настроить кластер MySQL 8 с тремя узлами в Debian 10


На этой странице

  1. Предпосылки
  2. Начало работы
  3. Установка и настройка диспетчера кластеров MySQL
  4. Установка и настройка узлов данных
  5. Установка и настройка сервера MySQL
  6. Тестирование кластера MySQL
  7. Заключение

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. Теперь вы можете использовать эту настройку в производственной среде для достижения масштабируемости и доступности.