웹사이트 검색

Ubuntu 16.04에 MariaDB Galera 클러스터를 설치하는 방법


이 튜토리얼은 다음 OS 버전에 대해 존재합니다.

  • 우분투 20.04(Focal Fossa)
  • 우분투 16.04(Xenial Xerus)

이 페이지에서

  1. 요구 사항\n
  2. 시작하기\n
  3. MariaDB Galera 설치
  4. Node1에서 MariaDB 클러스터 설정
  5. Galera Cluster에 Node2 추가
  6. Galera Cluster에 Node3 추가
  7. 방화벽 구성\n
  8. MariaDB Galera 클러스터 시작
  9. 데이터베이스 복제 테스트
  10. 결론

MariaDB Galera는 MariaDB용 멀티 마스터 클러스터입니다. MariaDB 10.1부터 MariaDB 서버와 MariaDB Galera 서버 패키지가 결합되었으며 Galera 패키지와 해당 종속성은 MariaDB를 설치할 때 자동으로 설치됩니다. 현재 MariaDB Galera Cluster는 InnoDB/XtraDB 스토리지 엔진만 지원합니다. MariaDB 10.0 및 5.5에서는 별도로 다운로드해야 합니다. MariaDB Galera는 사이트 데이터베이스에 중복성을 추가합니다. MariaDB Galera Cluster에서는 여러 데이터베이스 서버가 서로 상호 연결되어 동기화를 유지합니다.

MariaDB Galera는 많은 기능을 제공하며 그 중 일부는 다음과 같습니다.

  1. 동기식 복제.
  2. 자동 노드 가입.
  3. 활성-활성 다중 마스터 토폴로지.\n
  4. 행 수준에서 진정한 병렬 복제.\n
  5. 읽기 및 쓰기 확장성, 더 작은 클라이언트 대기 시간.\n
  6. 실패한 노드, 클러스터에서 자동 삭제.\n

이 튜토리얼에서는 Ubuntu 16.04 서버에서 실행되는 3개의 노드로 MariaDB Galera Cluster 10.1을 설정하는 방법을 설명합니다. 또한 모든 노드 간의 데이터베이스 복제를 테스트합니다.

요구 사항

  • Ubuntu 16.04 서버를 실행하는 3개의 노드.\n
  • 고정 IP 주소가 192.168.0.102인 Node1, 고정 IP 주소가 192.168.0.103인 Node2 및 고정 IP 주소가 192.168.0.104인 Node3이 서버에 구성됩니다.
  • 모든 노드에서 sudo 권한 설정을 가진 루트가 아닌 사용자.\n

시작하기

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

sudo apt-get update -y
sudo apt-get upgrade -y

그런 다음 모든 노드를 다시 시작하여 이러한 변경 사항을 적용합니다. 그런 다음 sudo 사용자로 로그인하고 다음 단계로 진행합니다.

MariaDB 갈레라 설치

MariaDB Server 및 MariaDB Galera Server 패키지는 MariaDB 10.1 버전에서 결합됩니다. 기본적으로 MariaDB 10.1은 기본 Ubuntu 리포지토리에서 사용할 수 없으므로 모든 노드에 MariaDB 리포지토리를 추가해야 합니다.

먼저 다음 명령을 사용하여 MariaDB 리포지토리 키를 추가합니다.

sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8

다음으로 다음 명령을 사용하여 리포지토리를 추가하고 APT 캐시를 업데이트합니다.

sudo add-apt-repository 'deb [arch=amd64,i386,ppc64el] http://ftp.utexas.edu/mariadb/repo/10.1/ubuntu xenial main'
sudo apt-get update -y

리포지토리가 업데이트되면 다음 명령을 사용하여 MariaDB를 설치합니다.

sudo apt-get install mariadb-server rsync -y

위의 명령은 Galera 및 여러 종속성과 함께 MariaDB를 설치합니다. Galera 부품은 플러그인이나 스토리지 엔진처럼 구성될 때까지 휴면 상태로 유지됩니다. MariaDB가 모든 노드에 설치되면 MariaDB 보안을 진행할 수 있습니다.

기본적으로 MariaDB 설치는 보안되지 않으므로 MariaDB 설치를 보호해야 합니다. mysql_secure_installation 스크립트를 실행하여 이를 수행할 수 있습니다.

sudo mysql_secure_installation

이 과정에서 루트 암호를 설정하고, 익명 사용자를 제거하고, 원격으로 루트 로그인을 허용하지 않고, 테스트 데이터베이스를 제거하라는 메시지가 표시됩니다. 아래와 같이 모든 질문에 답하십시오.

Enter current password for root (enter for none):
Change the root password? [Y/n] n
Remove anonymous users? [Y/n] Y
Disallow root login remotely? [Y/n] Y
Remove test database and access to it? [Y/n] Y
Reload privilege tables now? [Y/n] Y

MariaDB가 모든 노드에서 보호되면 다음 단계로 진행할 수 있습니다.

Node1에서 MariaDB 클러스터 설정

먼저 Node1으로 이동하여 Galera용 구성 파일을 만듭니다. 기본적으로 MariaDB는 /etc/mysql/conf.d/ 디렉토리에서 구성을 읽습니다. 이렇게 하려면 다음 명령을 실행합니다.

sudo nano /etc/mysql/conf.d/galera.cnf

다음 줄을 추가합니다.

[mysqld]
binlog_format=ROW
default-storage-engine=innodb
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0
# Galera Provider Configuration
wsrep_on=ON
wsrep_provider=/usr/lib/galera/libgalera_smm.so
# Galera Cluster Configuration
wsrep_cluster_name="galera_cluster"
wsrep_cluster_address="gcomm://192.168.0.102,192.168.0.103,192.168.0.104"

# Galera Synchronization Configuration
wsrep_sst_method=rsync

# Galera Node Configuration
wsrep_node_address="192.168.0.102"
wsrep_node_name="Node1"

완료되면 파일을 저장하십시오.

참고: 192.168.0.102는 Node1의 IP 주소입니다.

Galera 클러스터에 Node2 추가

다음으로 Node2로 이동하여 Galera용 구성 파일을 만듭니다.

sudo nano /etc/mysql/conf.d/galera.cnf

다음 줄을 추가합니다.

[mysqld]
binlog_format=ROW
default-storage-engine=innodb
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0
# Galera Provider Configuration
wsrep_on=ON
wsrep_provider=/usr/lib/galera/libgalera_smm.so
# Galera Cluster Configuration
wsrep_cluster_name="galera_cluster"
wsrep_cluster_address="gcomm://192.168.0.102,192.168.0.103,192.168.0.104"

# Galera Synchronization Configuration
wsrep_sst_method=rsync

# Galera Node Configuration
wsrep_node_address="192.168.0.103"
wsrep_node_name="Node2"

완료되면 파일을 저장하십시오.

참고: 192.168.0.103은 Node2의 IP 주소입니다.

Galera 클러스터에 Node3 추가

다음으로 Node3로 이동하여 Galera용 구성 파일을 만듭니다.

sudo nano /etc/mysql/conf.d/galera.cnf

다음 줄을 추가합니다.

[mysqld]
binlog_format=ROW
default-storage-engine=innodb
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0
# Galera Provider Configuration
wsrep_on=ON
wsrep_provider=/usr/lib/galera/libgalera_smm.so
# Galera Cluster Configuration
wsrep_cluster_name="galera_cluster"
wsrep_cluster_address="gcomm://192.168.0.102,192.168.0.103,192.168.0.104"

# Galera Synchronization Configuration
wsrep_sst_method=rsync

# Galera Node Configuration
wsrep_node_address="192.168.0.104"
wsrep_node_name="Node3"

완료되면 파일을 저장하십시오.

참고: 192.168.0.104는 Node3의 IP 주소입니다.

방화벽 구성

Galera Cluster는 MySQL 클라이언트 연결에 4개의 포트 3306, 상태 스냅샷 전송에 4444, Galera Cluster 복제 트래픽에 4567, 증분 상태 전송에 4568을 사용합니다. 따라서 UFW 방화벽을 사용하여 이러한 모든 포트를 허용해야 합니다. 모든 노드에서 다음 명령을 실행하여 이 작업을 수행할 수 있습니다.

먼저 다음 명령을 사용하여 UFW 방화벽을 활성화합니다.

sudo ufw enable

그런 다음 다음 명령을 사용하여 모든 포트를 허용합니다.

sudo ufw allow 3306/tcp
sudo ufw allow 4444/tcp
sudo ufw allow 4567/tcp
sudo ufw allow 4568/tcp
sudo ufw allow 4567/udp

그런 다음 다음 명령을 사용하여 방화벽의 상태를 확인할 수 있습니다.

sudo ufw status

모든 노드에 UFW 방화벽이 구성되면 다음 단계를 진행할 수 있습니다.

MariaDB Galera 클러스터 시작

모든 노드를 성공적으로 구성한 후 Node1으로 이동하여 Galera Cluster를 시작합니다.

Galera를 시작하기 전에 MariaDB 서비스가 모든 노드에서 중지되었는지 확인해야 합니다.

모든 노드에서 다음 명령을 실행합니다.

sudo systemctl stop mysql

이제 다음 명령을 사용하여 Node1에서 Galera Cluster를 시작합니다.

sudo galera_new_cluster

이제 다음 명령을 사용하여 클러스터가 실행 중인지 확인합니다.

mysql -u root -p -e "show status like 'wsrep_cluster_size'"

모든 것이 정상이면 다음 출력이 표시됩니다.

+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| wsrep_cluster_size | 1     |
+--------------------+-------+

Node2에서 MariaDB 서비스를 시작합니다.

sudo systemctl start mysql

다음 명령을 사용하여 MariaDB 서비스의 작동 여부를 확인할 수 있습니다.

sudo systemctl status mysql

모든 것이 정상이면 다음 출력이 표시됩니다.

?? mariadb.service - MariaDB database server
   Loaded: loaded (/lib/systemd/system/mariadb.service; enabled; vendor preset: enabled)
   Active: active (running) since Sun 2017-09-17 10:11:20 EDT; 10min ago
  Process: 715 ExecStartPost=/bin/sh -c systemctl unset-environment _WSREP_START_POSITION (code=exited, status=0/SUCCESS)
  Process: 713 ExecStartPost=/etc/mysql/debian-start (code=exited, status=0/SUCCESS)
  Process: 545 ExecStartPre=/bin/sh -c [ ! -e /usr/bin/galera_recovery ] && VAR= ||   VAR=`/usr/bin/galera_recovery`; [ $? -eq 0 ]   && systemctl set
  Process: 535 ExecStartPre=/bin/sh -c systemctl unset-environment _WSREP_START_POSITION (code=exited, status=0/SUCCESS)
  Process: 514 ExecStartPre=/usr/bin/install -m 755 -o mysql -g root -d /var/run/mysqld (code=exited, status=0/SUCCESS)
 Main PID: 661 (mysqld)
   Status: "Taking your SQL requests now..."
    Tasks: 26 (limit: 4915)
   CGroup: /system.slice/mariadb.service
           ??????661 /usr/sbin/mysqld

Sep 17 10:11:11 debian systemd[1]: Starting MariaDB database server...
Sep 17 10:11:15 debian mysqld[661]: 2017-09-17 10:11:15 140287134630464 [Note] /usr/sbin/mysqld (mysqld 10.1.26-MariaDB-0+deb9u1) starting as process
Sep 17 10:11:20 debian systemd[1]: Started MariaDB database server.

이제 두 번째 노드가 클러스터에 자동으로 연결되어야 합니다. 다음 명령으로 확인할 수 있습니다.

mysql -u root -p -e "show status like 'wsrep_cluster_size'"

모든 것이 잘 작동하면 클러스터 크기를 2로 설정해야 합니다.

+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| wsrep_cluster_size | 2     |
+--------------------+-------+

Node3에서 MariaDB 서비스를 시작합니다.

sudo systemctl start mysql
mysql -u root -p -e "show status like 'wsrep_cluster_size'"

모든 것이 제대로 작동하는 경우 클러스터 크기를 3으로 설정해야 합니다.

+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| wsrep_cluster_size | 3     |
+--------------------+-------+

이제 클러스터가 작동하고 서로 통신합니다.

테스트 데이터베이스 복제

이제 모든 노드가 온라인 상태이므로 Galera Cluster에서 데이터베이스 복제를 테스트할 시간입니다. Node1에 데이터베이스를 생성하여 시작하고 모든 노드에 복제되는지 확인하십시오.

먼저 다음 명령을 사용하여 MariaDb 콘솔에 로그인합니다.

mysql -u root -p

루트 비밀번호를 입력하고 이름이 test_db인 데이터베이스를 생성합니다.

MariaDB [(none)]> create database test_db;
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| test_db            |
+--------------------+

이제 Node2와 Node3으로 이동한 다음 복제가 작동하는지 확인합니다.

mysql -u root -p
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| test_db            |
+--------------------+

축하해요! Ubuntu 16.04 서버에 MariaDB Galera Cluster를 성공적으로 설치하고 구성했습니다.

결론

이제 Ubuntu 16.04에서 MariaDB Galera Cluster를 설치하고 구성할 수 있는 충분한 지식을 갖추셨기를 바랍니다. 이제 여러 개 또는 수십 개의 개별 노드로 쉽게 확장할 수 있습니다. 의심스럽거나 더 많은 질문이 있는 경우 Galera Cluster Doc 링크를 참조하십시오.