웹사이트 검색

Debian 10에서 3노드 MySQL 8 클러스터를 설정하는 방법


이 페이지에서

  1. 전제 조건
  2. 시작하기\n
  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을 실행하는 3개의 서버 중 하나는 관리자 노드용이고 나머지는 데이터 노드입니다.\n
  • 루트 암호는 각 서버에 설정됩니다.\n

시작하기

먼저 모든 서버를 최신 버전으로 업데이트해야 합니다. 다음 명령으로 모두 업데이트할 수 있습니다.

apt-get update -y

모든 서버가 업데이트되면 다음 단계로 진행할 수 있습니다.

MySQL 클러스터 관리자 설치 및 설정

먼저 마스터 노드에 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

다음으로 서비스를 관리하기 위해 MySQL Cluster Manager용 systemd 서비스 파일을 생성합니다.

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

모든 종속 항목이 설치되면 다음 명령을 사용하여 최신 버전의 MySQL Data Nodes deb 파일을 다운로드합니다.

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

다음으로 다음 명령을 사용하여 두 데이터 노드에서 ndbd에 대한 systemd 서비스 파일을 생성합니다.

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 클러스터 관리자 노드에 MySQL 서버 및 클라이언트 패키지를 다운로드하여 설치합니다.

먼저 다음 명령을 사용하여 최신 버전의 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

다음으로 다음 명령을 사용하여 MySQL Common deb 파일을 설치합니다.

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

설치하는 동안 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 클러스터 테스트

이제 3노드 MySQL 클러스터를 성공적으로 설치하고 구성했습니다. 다음으로 작동 여부를 확인해야 합니다.

먼저 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>

이제 다음 명령을 실행하여 모든 데이터 ndo를 확인합니다.

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)

결론

축하합니다! Debian 10 서버에 3노드 MySQL 클러스터를 성공적으로 설치하고 설정했습니다. 이제 프로덕션 환경에서 이 설정을 사용하여 확장성과 가용성을 달성할 수 있습니다.