MariaDB: Galera 클러스터 구축 🚀
안녕, 친구들! 오늘은 정말 흥미진진한 주제로 찾아왔어. 바로 MariaDB의 Galera 클러스터 구축에 대해 함께 알아볼 거야. 😎 데이터베이스 세계의 슈퍼히어로라고 할 수 있는 Galera 클러스터, 어떻게 하면 이 강력한 녀석을 우리 편으로 만들 수 있을지 함께 파헤쳐보자고!
🔍 잠깐! 혹시 데이터베이스에 대해 잘 모르는 친구가 있다면 걱정하지 마. 우리 함께 천천히, 쉽게 알아갈 거니까. 그리고 이런 지식들은 나중에 재능넷에서 다른 사람들과 공유할 수 있는 멋진 재능이 될 수도 있어!
1. Galera 클러스터란 뭐야? 🤔
자, 먼저 Galera 클러스터가 뭔지부터 알아보자. 간단히 말하면, Galera 클러스터는 여러 대의 MariaDB 서버를 하나로 묶어서 초강력 데이터베이스 슈퍼팀을 만드는 거야! 😮
생각해봐. 혼자서 일하는 것보다 여러 명이 팀을 이뤄 일하면 더 효율적이고 안전하지? Galera 클러스터도 똑같아. 여러 대의 서버가 협력해서 일하니까 속도도 빠르고, 한 대가 문제가 생겨도 다른 서버들이 바로 대신 일할 수 있어. 완전 든든하지?
💡 재미있는 사실: Galera라는 이름은 스페인어로 '갤러리'라는 뜻이야. 마치 여러 작품이 모여 하나의 갤러리를 이루듯, 여러 서버가 모여 하나의 클러스터를 이루는 거지!
이제 Galera 클러스터의 주요 특징들을 살펴볼까?
- 🔄 동기식 복제: 모든 서버가 항상 같은 데이터를 가지고 있어. 완전 싱크로나이즈!
- 🚫 무중단 운영: 한 서버가 다운되어도 다른 서버들이 계속 일해. 24/7 풀가동!
- 🔀 다중 마스터: 모든 서버가 읽기와 쓰기 작업을 할 수 있어. 진정한 팀워크의 결정체!
- 🔒 강력한 일관성: 데이터가 항상 정확하고 일관되게 유지돼. 믿음직스러워!
이렇게 보니까 Galera 클러스터가 얼마나 대단한 녀석인지 알겠지? 이제 우리가 이 슈퍼 영웅을 어떻게 우리 편으로 만들 수 있는지 자세히 알아보자고!
2. Galera 클러스터 구축 준비하기 🛠️
자, 이제 본격적으로 Galera 클러스터를 구축해볼 거야. 하지만 그전에 우리가 준비해야 할 것들이 있어. 마치 요리를 시작하기 전에 재료와 도구를 준비하는 것처럼 말이야! 😋
2.1 시스템 요구사항
Galera 클러스터를 구축하려면 최소한 3대의 서버가 필요해. 왜 3대일까? 2대만 있으면 안 될까? 🤔
🌟 재미있는 비유: Galera 클러스터를 3명의 친구가 함께 공부하는 스터디 그룹이라고 생각해봐. 2명만 있으면 한 명이 결석했을 때 스터디가 어려워지지만, 3명이면 한 명이 빠져도 나머지 두 명이 서로 도와가며 공부할 수 있지!
각 서버는 다음과 같은 사양을 갖추고 있어야 해:
- 🖥️ CPU: 최소 2코어 이상 (4코어 이상 추천)
- 🧠 RAM: 최소 4GB 이상 (8GB 이상 추천)
- 💾 저장공간: SSD 100GB 이상 (데이터 크기에 따라 조절)
- 🌐 네트워크: 1Gbps 이상의 빠른 네트워크 연결
이 정도면 Galera 클러스터가 신나게 춤출 수 있는 무대가 준비된 거야! 🕺💃
2.2 운영체제 선택
Galera 클러스터는 리눅스 환경에서 가장 잘 동작해. 우리는 이번에 Ubuntu 20.04 LTS를 사용할 거야. 왜 Ubuntu일까?
- 🐧 안정적이고 신뢰할 수 있는 운영체제야.
- 🔧 패키지 관리가 쉽고 편리해.
- 🌍 커뮤니티 지원이 활발해서 문제 해결이 쉬워.
- 🆓 무료로 사용할 수 있어!
물론 다른 리눅스 배포판을 사용해도 돼. CentOS, Debian 등도 좋은 선택이 될 수 있어. 하지만 우리는 Ubuntu로 예제를 진행할 거니까 참고해줘!
2.3 필요한 소프트웨어
Galera 클러스터를 구축하려면 다음과 같은 소프트웨어가 필요해:
- 🐬 MariaDB: 우리의 주인공! 데이터베이스 서버야.
- 🔗 Galera 라이브러리: MariaDB를 클러스터로 만들어주는 마법 지팡이 같은 존재지.
- 🔒 rsync: 서버 간 데이터 동기화를 위해 필요해.
- 🛡️ 방화벽 (예: ufw): 보안을 위해 꼭 필요해.
이 소프트웨어들은 나중에 설치 과정에서 하나씩 설치할 거야. 걱정하지 마!
2.4 네트워크 설정
Galera 클러스터가 제대로 작동하려면 서버들 사이의 네트워크 설정이 중요해. 다음 포트들을 열어줘야 해:
- 🚪 3306: MySQL 기본 포트
- 🚪 4567: Galera Cluster 통신 포트
- 🚪 4568: Incremental State Transfer (IST) 포트
- 🚪 4444: State Snapshot Transfer (SST) 포트
이 포트들은 서버들이 서로 대화하고 데이터를 주고받는 데 사용돼. 마치 친구들끼리 카톡방을 만들어 대화하는 것처럼 말이야! 📱💬
⚠️ 주의사항: 이 포트들을 외부에 공개하면 보안 위험이 있어. 꼭 필요한 IP 주소에서만 접근할 수 있도록 설정하는 게 좋아!
2.5 호스트 이름 설정
각 서버에 고유한 호스트 이름을 설정하는 것도 중요해. 이렇게 하면 서버들을 쉽게 구분할 수 있지. 예를 들어:
- 🏷️ 서버1: galera-node1
- 🏷️ 서버2: galera-node2
- 🏷️ 서버3: galera-node3
이렇게 설정하면 나중에 로그를 확인하거나 문제를 해결할 때 어떤 서버에서 일어난 일인지 쉽게 알 수 있어.
2.6 시간 동기화
마지막으로, 모든 서버의 시간을 정확하게 맞추는 것도 중요해. 이를 위해 NTP(Network Time Protocol)를 사용할 거야. 시간이 맞지 않으면 데이터 동기화에 문제가 생길 수 있거든.
💡 팁: NTP 설정은 간단해. Ubuntu에서는 다음 명령어로 쉽게 설정할 수 있어:
sudo apt-get install ntp
sudo systemctl start ntp
sudo systemctl enable ntp
자, 이제 Galera 클러스터를 위한 무대가 거의 다 준비됐어! 🎭 다음 섹션에서는 실제로 MariaDB와 Galera를 설치하고 설정하는 방법을 알아볼 거야. 기대되지 않아? 😃
3. MariaDB와 Galera 설치하기 🛠️
자, 이제 진짜 재미있는 부분이 시작됐어! 우리의 Galera 클러스터를 위한 핵심 재료인 MariaDB와 Galera를 설치해볼 거야. 마치 레고 블록을 조립하는 것처럼, 하나씩 차근차근 해보자고! 🧱
3.1 MariaDB 저장소 추가하기
먼저, 최신 버전의 MariaDB를 설치하기 위해 공식 MariaDB 저장소를 추가해야 해. 이건 마치 새로운 장난감 가게의 위치를 알아내는 것과 같아! 🏪
터미널을 열고 다음 명령어를 입력해봐:
sudo apt-get install software-properties-common
sudo apt-key adv --fetch-keys 'https://mariadb.org/mariadb_release_signing_key.asc'
sudo add-apt-repository 'deb [arch=amd64,arm64,ppc64el] https://mirrors.aliyun.com/mariadb/repo/10.5/ubuntu focal main'
이 명령어들은 MariaDB의 공식 저장소를 우리 시스템에 추가하는 거야. 이제 우리는 최신 버전의 MariaDB를 설치할 준비가 됐어!
💡 알아두면 좋은 점: 여기서 우리는 MariaDB 10.5 버전을 사용하고 있어. 이 버전은 안정적이고 Galera와 잘 호환돼. 하지만 항상 최신 버전을 확인하고 사용하는 게 좋아!
3.2 MariaDB 설치하기
자, 이제 진짜로 MariaDB를 설치해볼 거야. 준비됐어? 가즈아~! 🚀
sudo apt-get update
sudo apt-get install mariadb-server mariadb-client
이 명령어를 실행하면 MariaDB 서버와 클라이언트가 설치돼. 설치가 완료되면 MariaDB 서비스가 자동으로 시작될 거야.
설치가 잘 됐는지 확인하고 싶다면 다음 명령어를 입력해봐:
sudo systemctl status mariadb
만약 "active (running)"이라고 뜨면 성공이야! 🎉
3.3 MariaDB 보안 설정하기
MariaDB를 설치했다고 해서 끝난 게 아니야. 보안 설정도 해야 해. 이건 마치 집에 도어락을 설치하는 것과 같아. 안전이 최고니까! 🔒
다음 명령어를 실행해서 MariaDB 보안 설정을 시작해보자:
sudo mysql_secure_installation
이 명령어를 실행하면 여러 가지 질문이 나올 거야. 각 질문에 대해 어떻게 대답해야 할지 알아보자:
- 🔑 root 비밀번호 설정: 강력한 비밀번호를 설정해. 비밀번호는 복잡할수록 좋아!
- 🚫 익명 사용자 제거: 보안을 위해 'Y'를 선택해.
- 🏠 원격 root 로그인 비활성화: 'Y'를 선택해. root는 로컬에서만 접속하도록 하는 게 안전해.
- 🧹 테스트 데이터베이스 제거: 'Y'를 선택해. 필요 없는 건 지우는 게 좋아!
- 🔄 권한 테이블 리로드: 'Y'를 선택해. 변경사항을 바로 적용하기 위해서야.
이렇게 하면 기본적인 보안 설정이 완료돼. 이제 우리의 MariaDB는 훨씬 더 안전해졌어! 👍
3.4 Galera 클러스터 패키지 설치하기
이제 Galera 클러스터를 위한 추가 패키지를 설치할 차례야. 이건 마치 MariaDB에게 슈퍼 파워를 주는 거나 다름없어! 💪
sudo apt-get install mariadb-server-10.5 galera-4 mariadb-plugin-connect
이 명령어로 Galera 클러스터에 필요한 모든 패키지가 설치돼. 특히 galera-4
는 Galera 클러스터의 핵심 라이브러리야.
⚠️ 주의: 패키지 버전은 시간이 지나면서 변경될 수 있어. 항상 최신 버전을 확인하고 사용하는 게 좋아!
3.5 rsync 설치하기
Galera 클러스터가 제대로 작동하려면 rsync
라는 도구도 필요해. 이 녀석은 서버들 사이에서 데이터를 효율적으로 복사하는 데 사용돼. 마치 서버들 사이의 택배 서비스 같은 거지! 📦
sudo apt-get install rsync
이렇게 하면 rsync가 설치돼. 간단하지?
3.6 설치 확인하기
자, 이제 모든 것을 설치했어. 잘 설치됐는지 확인해볼까? 다음 명령어들을 하나씩 실행해봐:
mariadb --version
galera_new_cluster --version
rsync --version
각 명령어를 실행하면 설치된 버전 정보가 나올 거야. 만약 오류 없이 버전 정보가 잘 나온다면, 우리의 설치 작업은 성공한 거야! 🎊
💡 꿀팁: 이 과정을 클러스터의 모든 노드(서버)에서 반복해야 해. 각 서버마다 같은 버전의 소프트웨어가 설치되어 있어야 Galera 클러스터가 제대로 작동한다는 걸 잊지 마!
여기까지 왔다면 정말 대단해! 🌟 우리는 이제 Galera 클러스터의 기본 재료들을 모두 준비했어. 다음 단계에서는 이 재료들을 가지고 실제로 클러스터를 구성하는 방법을 알아볼 거야. 기대되지 않아? 😃
4. Galera 클러스터 설정하기 ⚙️
자, 이제 정말 흥미진진한 부분이 왔어! 우리가 설치한 MariaDB와 Galera를 이용해 실제로 클러스터를 구성해볼 거야. 마치 퍼즐 조각을 맞추는 것처럼, 하나씩 차근차근 해나가보자! 🧩
4.1 MariaDB 설정 파일 수정하기
먼저, MariaDB의 설정 파일을 수정해야 해. 이 파일은 MariaDB에게 "너는 이제 혼자가 아니라 팀으로 일할 거야!"라고 알려주는 역할을 해. 😉
다음 명령어로 설정 파일을 열어보자:
sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
이 파일에 다음 내용을 추가하거나 수정해야 해:
[mysqld]
bind-address=0.0.0.0
default_storage_engine=InnoDB
binlog_format=row
innodb_autoinc_lock_mode=2
innodb_flush_log_at_trx_commit=0
wsrep_on=ON
wsrep_provider=/usr/lib/galera/libgalera_smm.so
wsrep_cluster_name="my_galera_cluster"
wsrep_cluster_address="gcomm://192.168.1.1,192.168.1.2,192.168.1.3"
wsrep_node_name="Node1"
wsrep_node_address="192.168.1.1"
wsrep_sst_method=rsync
여기서 몇 가지 중요한 설정을 살펴보자:
- 🌐 bind-address=0.0.0.0: 모든 네트워크 인터페이스에서 연결을 받아들이도록 설정
- 🔀 wsrep_on=ON: Galera 복제를 활성화
- 🏷️ wsrep_cluster_name: 클러스터의 이름 설정 (모든 노드가 같아야 함)
- 🔗 wsrep_cluster_address: 클러스터에 속한 모든 노드의 IP 주소 목록
- 📛 wsrep_node_name: 현재 노드의 이름 (각 노드마다 다르게 설정)
- 🏠 wsrep_node_address: 현재 노드의 IP 주소
⚠️ 주의: IP 주소는 예시일 뿐이야. 실제 서버의 IP 주소로 바꿔줘야 해! 그리고 각 노드마다 wsrep_node_name
과 wsrep_node_address
를 해당 노드에 맞게 설정해야 해.
4.2 방화벽 설정하기
Galera 클러스터가 제대로 작동하려면 노드들 사이에 특정 포트가 열려있어야 해. 마치 친구들끼리 대화할 수 있는 통로를 만들어주는 거지! 🚪
Ubuntu의 기본 방화벽인 UFW를 사용해서 필요한 포트를 열어줄 거야:
sudo ufw allow 3306/tcp
sudo ufw allow 4567/tcp
sudo ufw allow 4568/tcp
sudo ufw allow 4444/tcp
sudo ufw reload
이렇게 하면 MariaDB와 Galera에 필요한 모든 포트가 열려. 각 포트의 역할을 간단히 설명하자면:
- 🔢 3306: MySQL/MariaDB의 기본 포트
- 🔢 4567: Galera Cluster 통신용 포트
- 🔢 4568: Incremental State Transfer (IST) 포트
- 🔢 4444: State Snapshot Transfer (SST) 포트
4.3 첫 번째 노드 시작하기
자, 이제 설정도 다 했으니 클러스터를 시작해볼 차례야! 첫 번째 노드를 특별한 방법으로 시작해야 해. 이건 마치 팀의 리더가 먼저 나서서 "자, 우리 시작하자!"라고 말하는 것과 같아. 😎
첫 번째 노드에서 다음 명령어를 실행해:
sudo galera_new_cluster
이 명령어는 새로운 클러스터를 시작하는 특별한 명령어야. 첫 번째 노드에서만 사용해야 해!
4.4 나머지 노드 시작하기
첫 번째 노드가 잘 시작됐다면, 이제 나머지 노드들을 하나씩 시작해볼 거야. 다른 노드들에서는 그냥 일반적인 방법으로 MariaDB를 시작하면 돼:
sudo systemctl start mariadb
이렇게 하면 나머지 노드들이 자동으로 첫 번째 노드에 연결되어 클러스터를 형성할 거야. 마치 친구들이 하나둘씩 모여 팀을 이루는 것처럼 말이야! 👥
4.5 클러스터 상태 확인하기
모든 노드를 시작했다면, 클러스터가 제대로 작동하고 있는지 확인해볼 차례야. 이건 정말 중요해! 마치 롤러코스터를 타기 전에 안전벨트를 확인하는 것과 같지. 🎢
MariaDB에 접속해서 다음 명령어를 실행해봐:
SHOW STATUS LIKE 'wsrep_%';
이 명령어를 실행하면 클러스터의 상태 정보가 주르륵 나올 거야. 그 중에서 특히 중요한 몇 가지를 살펴보자:
- 🔍 wsrep_cluster_size: 클러스터에 연결된 노드의 수 (우리의 경우 3이어야 해)
- 🔍 wsrep_cluster_status: 'Primary'여야 정상이야
- 🔍 wsrep_connected: 'ON'이어야 해
- 🔍 wsrep_ready: 'ON'이어야 해
이 값들이 모두 예상대로라면, 우리의 Galera 클러스터가 제대로 작동하고 있다는 뜻이야! 🎉
💡 팁: 클러스터의 상태를 주기적으로 확인하는 것이 좋아. 문제가 생겼을 때 빨리 발견하고 해결할 수 있거든!
4.6 테스트해보기
마지막으로, 우리의 클러스터가 정말로 잘 작동하는지 간단한 테스트를 해볼 거야. 이건 마치 새로 산 자전거를 타보는 것과 같아! 🚲
첫 번째 노드에서 다음과 같이 테스트 데이터베이스와 테이블을 만들어봐:
CREATE DATABASE test_db;
USE test_db;
CREATE TABLE test_table (id INT PRIMARY KEY, name VARCHAR(50));
INSERT INTO test_table VALUES (1, 'Galera is awesome!');
그리고 나서 다른 노드에 접속해서 다음 명령어를 실행해봐:
USE test_db;
SELECT * FROM test_table;
만약 첫 번째 노드에서 입력한 데이터가 다른 노드에서도 보인다면, 우리의 Galera 클러스터가 완벽하게 작동하고 있다는 뜻이야! 🎊
와우! 🎉 우리가 해냈어! Galera 클러스터를 성공적으로 구축했어. 이제 우리는 고가용성과 확장성을 갖춘 강력한 데이터베이스 시스템을 가지게 됐어. 이걸로 뭘 할 수 있을지 상상해봐. 웹 애플리케이션? 빅데이터 분석? 가능성은 무궁무진해! 🚀
물론 여기서 끝이 아니야. 클러스터 관리, 백업, 모니터링 등 아직 배울 게 많아. 하지만 오늘 우리가 이룬 성과를 자랑스럽게 여겨도 좋아. 넌 이제 데이터베이스 마스터의 길에 한 걸음 더 가까워졌어! 👨🔬👩🔬
다음에는 더 심화된 주제로 만나자. 그때까지 열심히 공부하고, 실험하고, 즐기는 것 잊지 마! 화이팅! 💪😄