Debian 10에서 3노드 MySQL 8 클러스터를 설정하는 방법
이 페이지에서
- 전제 조건
- 시작하기\n
- MySQL 클러스터 관리자 설치 및 설정
- 데이터 노드 설치 및 구성
- MySQL 서버 설치 및 구성
- MySQL 클러스터 테스트
- 결론
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 클러스터를 성공적으로 설치하고 설정했습니다. 이제 프로덕션 환경에서 이 설정을 사용하여 확장성과 가용성을 달성할 수 있습니다.