MariaDB 이중화(Galera Cluster) 구성

개요

  • 노드 이중화를 통하여 장애 시 가용성과 무중단성을 확보하기 위함입니다.
  • 기존 Active 노드가 구성되어 있을 때 Standby노드 추가를 가정으로 합니다.
  • Standby 노드의 MariaDB 설치 및 OS 구성은 기존 Active 노드와 동일합니다.
  • HA 구성을 통한 VIP 설정은 연관 문서 가이드를 참고합니다.

:light_bulb: 사전 유의 사항

  • mariadb-backup rpm이 사전에 설치되어야 합니다.

정책 추가

  • Active 노드 진행

    #firewall-cmd --permanent --add-port={4444,4567,4568}/tcp
    #firewall-cmd --reload
    
  • Standby 노드 진행

    - #firewall-cmd --permanent --add-port={443,3306,8443,44300,7140,4444,4567,4568,8888}/tcp
    - #firewall-cmd --permanent --add-port={514,162}/udp
    - #firewall-cmd --reload
    

커널 파일 수정

  • vi /etc/sysctl.conf에 아래 5줄 추가 ( 커널 유실 방지 )

    vm.max_map_count=10000000
    net.core.rmem_max=52428800
    net.core.rmem_default=52428800
    net.ipv4.udp_rmem_min=8192
    net.ipv4.ipfrag_high_thresh=16777216
    

MariaDB 설정파일 수정

  • Active / Standby 노드 각각 수정

  • 경로 : /etc/my.cnf.d/server.cnf

  • Active 노드 추가

    [galera]
    
    wsrep_on=ON  // 갈레라 실행 여부
    
    wsrep_provider=/usr/lib64/galera-4/libgalera_smm.so  // 갈레라 플러그인 위치
    
    wsrep_cluster_name=galera  // 갈레라 클러스터 이름 ( Active / standby 노드의 이름을 동일하게 설정 )
    
    wsrep_node_address=1.1.1.1  // 현재 자신의 IP
    
    wsrep_node_name=server1  // 현재 실행하는 노드의 이름 ( Active / standby 노드의 이름을 다르게 설정 )
    
    wsrep_sst_auth=mysql:  // ( rsync를 사용할 때 인증할 유저의 계정과 패스워드 )
    
    wsrep_cluster_address="gcomm://2.2.2.2, 1.1.1.1"  // 클러스터 리스트 ( 설정하는 노드의 IP가 가장 뒤에 있어야 함 )
    
    binlog_format=row  // ( 로그 형식 지정 )
    
    default_storage_engine=innoDB  // Galera에서 사용하는 엔진 ( innoDB만 사용 가능 )
    
    innodb_autoinc_lock_mode=2  // 락 매커니즘 지정
    
    wsrep_sst_method=mariabackup  // 노드 간 전송방법
    
  • Standby 노드 추가

    [galera]
    
    wsrep_on=ON  // 갈레라 실행 여부
    
    wsrep_provider=/usr/lib64/galera-4/libgalera_smm.so  // 갈레라 플러그인 위치
    
    wsrep_cluster_name=galera  // 갈레라 클러스터 이름 ( Active / standby 노드의 이름을 동일하게 설정 )
    
    wsrep_node_address=2.2.2.2  // 현재 자신의 IP
    
    wsrep_node_name=server2  // 현재 실행하는 노드의 이름 ( Active / standby 노드의 이름을 다르게 설정 )
    
    wsrep_sst_auth=mysql:  // ( rsync를 사용할 때 인증할 유저의 계정과 패스워드 )
    
    wsrep_cluster_address="gcomm://1.1.1.1, 2.2.2.2"  // 클러스터 리스트 ( 설정하는 노드의 IP가 가장 뒤에 있어야 함 )
    
    binlog_format=row  // ( 로그 형식 지정 )
    
    default_storage_engine=innoDB  // Galera에서 사용하는 엔진 ( innoDB만 사용 가능 )
    
    innodb_autoinc_lock_mode=2  // 락 매커니즘 지정
    
    wsrep_sst_method=mariabackup  // 노드 간 전송방법
    

서비스 기동

  • Active 노드 기동 시

    galera_new_cluster  // Active 노드 기동
    
  • Standby 노드 기동 시

    systemctl start mariadb
    
  • 기동 및 동기화 확인

    - MariaDB 접속
    - > show status like 'wsrep_%'; // Galera cluster sync 여부 확인
    - wsrep_cluster_size : 2 // 2개의 클러스터로 구성
    - wsrep_connected : ON // 연결 여부
    - wsrep_local_state_comment : Synced // 동기화 여부
    - wsrep_ready : ON
    

주의 사항

  • 반드시 Active 노드 먼저 구동
  • 기동 시 (트러블슈팅 시) 확인 사항 : vi /var/lib/mysql/grastate.dat
    • Safe_to_bootstrap: 0 // 구동 중인 서버가 0, 가장 마지막에 서비스가 종료된 노드가 1을 남기고 종료 됨, 해당 옵션 값 확인

Sonar 설치

  • Sonar UI에서 클러스터 노드 추가

  • Active 노드의 인증서를 Standby 노드에 적용

    • [data경로]/logpresso-ca/certs/ 하위 인증서 파일
  • Standby 노드 서비스 기동 후 ENT 및 쉘 접속하여 아래 항목 설정

  • 쉘 설정

    • Sonar UI 의 클러스터 노드에서 생성된 Guid 값 확인
    logdb.useAuthService sonar dom
    sonar.setCipherKey [Active 노드의 cipherkey]
    sonar.setGuid [복사한 control_2 의 guid]
    sonar.setControlGuid [복사한 control_2 의 guid]
    sonar.setMaster
    logpresso.setActiveNode control_1
    logpresso.enablePlanner
    
  • 라이선스 재 발급 및 적용

    • Active 노드와 Standby 노드의 하드웨어 키로 재 발급
  • 설정 완료 후 재기동