DB/MariaDB

[MariaDB] Galera Clustering

Dev.Congsik 2024. 8. 26. 15:33
728x90

  • Galera 클러스터링은 MySQL 데이터베이스의 고가용성 및 확장성을 제공하는 동기화 복제 클러스터링 기술입니다.
  • Galera 클러스터는 여러 개의 MySQL 노드로 구성되며, 모든 노드가 동일한 데이터를 가지고 있습니다.
  • 데이터베이스에 대한 읽기 및 쓰기 작업을 모든 노드에서 수행할 수 있으며, 데이터의 일관성을 유지할 수 있습니다.
  • 클러스터의 장애 발생 시 다른 노드가 자동으로 역할을 대신하므로 고가용성을 보장할 수 있습니다.

 

  • Bootstrap
    • 새로운 클러스터를 형성하고 초기화하는 역할
    • 이 노드가 galera_new_cluster 라는 명령으로 실행되어야만 다른 노드들도 참여 가능
    • 또한, Bootstrap 은 새로 참여하는 멤버에 대한 상태 관리 역할

 

  • 주요 구성 파일
  • grastate.dat
    • galera cluster 의 노드가 종료될 때 생성되는 파일
    • version, uuid, seqno, sate_to_bootstrap 정보 포함
    version            //grastate.dat 파일의 버전입니다.
    
    uuid               //cluster 구성을 위한 해당 노드의 uuid 입니다.
    
    seqno              //해당 노드가 마지막으로 인증한(데이터를 반영한) 트랜잭션의 Global Sequence Number 를 나타냅니다. 
                       즉, 복제를 통해 어디까지 데이터 변경을 반영했는지를 나타내는 값입니다. (실행되고 있을 때에는 -1 로 표시됩니다.)
    
    safe_to_bootstrap  //이 값이 1로 설정되면, 해당 노드를 부트스트랩으로 시작할 수 있다는 것을 의미합니다.
    
  • galera.cache
    • galera replication 에 대한 중간 상태 정보를 저장
  • gvwstate.dat
    • Node에 대한 클러스터 정보 포함
    • Bootstrap 노드, 참여 노드 수, 진행한 트랜잭션 수에 대한 정보 포함

Galera Cluster 구성방법

  • 클러스터 DB서버 정보
    • 1번 서버 - 192.168.59.134 maria1
    • 2번 서버 - 192.168.59.135 maria2
    • 3번 서버 - 192.168.59.136 maria3
  • vi /etc/my.cnf.d/galera.cnf 내용 추가 (1~3번서버)
vi /etc/my.cnf.d/galera.cnf
[galera]
wsrep_on=ON
wsrep_provider=/usr/lib64/galera-4/libgalera_smm.so    //플러그인 위치
wsrep_cluster_name='galera'                //클러스터의 이름을 지정. 일반적으로 같은 네트워크 서브넷에 여러개의 서버가 있을 때 사용, 원치 않는 노드가 잘못된 클러스터로 들어가는 것을 방지
wsrep_cluster_address='gcomm://192.168.59.134,192.168.59.135,192.168.59.136'   //galera 클러스터에 포함된 노드들의 ip 주소
wsrep_node_address='192.168.59.134'        //현재 서버 노드 ip 주소
wsrep_node_name='maria1'        //현재 서버의 노드명
wsrep_sst_method=rsync          //노드간 전송방법, rsync, xtrabackup(MariaDB 10.4 이상 버전부터는 mariabackup으로 대체)
binlog_format=row               //로그 형식을 정의
default_storage_engine=InnoDB   //디폴트 저장소 구동방식
innodb_autoinc_lock_mode=2      //락 메커니즘 설정
bind-address=0.0.0.0
wsrep_provider_options="gcache.size = 512M; gcache.name = /tmp/galera.cache; gcache.page_size = 100M"
//gcache.size: 갈레라를 위한 전용 캐시이며 복제요청이 들어오고 적용하는 등의 작업을 할 때 저장하기 위해 사용한다. 높은 트래픽 부하에서도 항상 모든 노드를 동기화 하고 싶다면 이 값을 키워야함
//gcache.name: gcache가 저장될 위치와 이름
//gcache.page_size: 페이지 스토리지에 있는 페이지 파일의 크기


find / -name 'libgalera_smm.so' //galera 플러그인 위치 확인

 

** 1~3 서버 mysql 서비스 모두 중지한 상태에서 진행

 

  • 1번 노드 start
galera_new_cluster &  //1번 노드 클러스터 생성 및 서비스 start

systemctl status mysql //1번 노드 상태 확인

 

  • 2,3번 노드 start
systemctl start mysql  //2,3번 서버 서비스 시작

2번서버 정상 기동
3번서버 정상 기동

  • 클러스터 상태 확인
mysql -u root -p  //mysql root 접속

show status like 'wsrep_cluster_size'; //클러스터 연결 확인 (클러스터 노드 수만 확인)

-> 1~3번 서버의 galera 클러스터이므로 value값은 3이 정상

 

show status like '%wsrep_%'; //클러스터 연결 확인 (전체)

 

  • 2번 노드에서 data insert 테스트

 

 

  • 1번 노드에서 data 조회

 

 

  • 6-1 3번 노드(maria3)에서 data 확인

** 모든 노드에서 data insert 확인됨에 따라 galera 클러스터 구축 완료 확인

 

 

728x90