[MySQL] MySQL Percona XtraDB Cluster 소개 및 설정 변수 알아보기
l Version : MySQL Percona 8.X
Percona XtraDB Cluster는 MySQL을 위한 완전한 오픈 소스 고가용성 솔루션으로 MySQL용 Percona Server 및 Percona XtraBackup을 Galera 라이브러리와 통합하여 동기식 다중 소스 복제를 가능하게 한다. Galera 라이브러리에 대한 내용은 아래 링크를 참고한다.
l MySQL/MariaDB 환경에서 다중 마스터 복제를 지원하는 Galera Cluster 알아보기 : https://sungwookkang.com/entry/MySQLMariaDB-%ED%99%98%EA%B2%BD%EC%97%90%EC%84%9C-%EB%8B%A4%EC%A4%91-%EB%A7%88%EC%8A%A4%ED%84%B0-%EB%B3%B5%EC%A0%9C%EB%A5%BC-%EC%A7%80%EC%9B%90%ED%95%98%EB%8A%94-Galera-Cluster-%EC%95%8C%EC%95%84%EB%B3%B4%EA%B8%B0
l MySQL Galera Cluster + ProxySQL에서 Galera Cluster 특성을 고려한 R/W 호스트 그룹 설정 하기 : https://sungwookkang.com/entry/MySQL-Galera-Cluster-ProxySQL%EC%97%90%EC%84%9C-Galera-Cluster-%ED%8A%B9%EC%84%B1%EC%9D%84-%EA%B3%A0%EB%A0%A4%ED%95%9C-RW-%ED%98%B8%EC%8A%A4%ED%8A%B8-%EA%B7%B8%EB%A3%B9-%EC%84%A4%EC%A0%95-%ED%95%98%EA%B8%B0
클러스터는 노드로 구성되며, 각 노드에는 노드 전체에 걸쳐 동기화된 동일한 데이터 세트가 포함되어 있다. 권장되는 구성은 3개 이상의 노드를 보유하는 것이지만 2개의 노드를 보유할 수도 있다. 각 노드는 일반 MySQL Server 인스턴스(예: Percona Server)이다. 기존 MySQL Server 인스턴스를 노드로 변환하고 이 노드를 기본으로 사용하여 클러스터를 실행할 수 있다. 클러스터에서 노드를 분리하여 일반 MySQL Server 인스턴스로 사용할 수도 있다.
Percona XtraDB Cluster 장점은 쿼리를 실행하면 노드에서 로컬로 실행된다. 모든 데이터는 로컬에서 사용할 수 있으므로 원격 액세스가 필요하지 않다. 중앙 관리 시스템이 아니므로 언제든지 노드를 유연하게 구성할 수 있으며 클러스터는 데이터 손실 없이 계속 작동한다. 읽기 작업 부하를 확장하는 데 적합한 솔루션이며 모든 노드에 읽기 쿼리를 호출할 수 있다.
단점으로는 노드 프로비저닝의 오버헤드가 있다. 새 노드를 추가하면 기존 노드 중 하나에서 전체 데이터 세트를 복사해야 한다. 예를 들어 노드가 100GB이면 100GB를 복사하는 방식이다. 이러한 특징 때문에 쓰기 확장 솔루션으로는 사용할 수 없다. 전체 트래픽을 1개 노드에 실행하는 경우에 비해 2개 노드에 쓰기 트래픽을 실행하는 경우 쓰기 처리량이 약간 향상될 수 있지만 많은 것을 기대할 수는 없다. 모든 쓰기는 여전히 모든 노드에서 진행되기 때문이다.
Percona XtraDB Cluster 구성요소는 XtraDB 스토리지 엔진으로 실행되는 MySQL용 Percona 서버를 기반으로 하며, Codership Oy에서 개발한 쓰기 세트 복제(wsrep) API의 구현인 Galera 라이브러리를 사용한다. 기본 및 권장 데이터 전송 방법은 Percona XtraBackup을 사용한다.
[XtraDB Cluster제약 사항]
l 복제는 InnoDB 스토리지 엔진에서만 작동한다.
l 다른 유형의 테이블에 대한 쓰기는 복제되지 않는다.
l LOCK TABLES 및 UNLOCK TABLES는 다중 소스 설정에서 지원되지 않는다.
n GET_LOCK(), RELEASE_LOCK() 등과 같은 잠금 함수
l 쿼리 로그를 테이블로 보낼 수 없다. 쿼리 로깅을 활성화하는 경우 로그를 파일로 전달해야 한다. 쿼리 로깅 및 로그 파일 이름을 선택하려면 General_log 및 General_log_file을 사용해야 한다.
log_output = FILE |
l 허용되는 최대 트랜잭션 크기는 wsrep_max_ws_rows 및 wsrep_max_ws_size 변수에 의해 정의된다.
l LOAD DATA INFILE 처리는 10,000개 행마다 커밋된다. 따라서 LOAD DATA로 인한 대규모 트랜잭션은 일련의 작은 트랜잭션으로 분할된다.
l COMMIT를 발행하는 트랜잭션은 해당 단계에서 여전히 중단될 수 있다.
l 클러스터 수준의 낙관적 동시성 제어로 인해 동일한 행에 쓰고 별도의 Percona XtraDB 클러스터 노드에서 커밋하는 두 개의 트랜잭션이 있을 수 있으며 그 중 하나만 성공적으로 커밋할 수 있다. 실패한 항목은 중단되며, 클러스터 수준 중단의 경우 Percona XtraDB Cluster는 교착 상태 오류 코드를 반환한다.
(Error: 1213 SQLSTATE: 40001 (ER_LOCK_DEADLOCK)). |
l XA 트랜잭션은 지원되지 않는다. 커밋시 롤백이 가능하기 때문이다.
l 전체 클러스터의 쓰기 처리량은 가장 약한 노드에 의해 제한된다. 한 노드가 느려지면 전체 클러스터도 느려진다.
l 최소 권장 클러스터 크기는 노드 3개이다. 세 번째 노드는 중재자가 될 수 있다.
l enforce_storage_engine=InnoDB는 wsrep_replicate_myisam=OFF와 호환되지 않는다. wsrep_replicate_myisam은 기본적으로 OFF로 설정된다.
l 클러스터 모드에서 Percona XtraDB Cluster를 실행할 때 ALTER TABLE ... IMPORT/EXPORT 워크로드를 가급적 사용하지 않도록 한다. 모든 노드에서 동기화되어 실행되지 않으면 노드 불일치가 발생할 수 있다.
l 모든 테이블에는 기본 키가 있어야 합니다. 이렇게 하면 동일한 행이 다른 노드에서 동일한 순서로 표시된다. 기본 키가 없는 테이블에서는 DELETE 문이 지원되지 않는다.
l 임시 테이블에 영구 테이블 이름을 재사용하지 않도록 한다. MySQL은 영구 테이블과 동일한 이름의 임시 테이블을 허용하지만 이 접근 방식은 권장되지 않는다. Galera Cluster는 이름이 임시 테이블의 이름과 일치하는 영구 테이블의 복제를 차단한다.
l wsrep_debug를 1로 설정하면 오류 로그에 다음 메시지가 포함될 수 있다.
... [Note] WSREP: TO BEGIN: -1, 0 : create table t (i int) engine=innodb ... [Note] WSREP: TO isolation skipped for: 1, sql: create table t (i int) engine=innodb.Only temporary tables affected. |
l 버전 8.0.21부터 INPLACE ALTER TABLE 쿼리는 쿼리 실행 중에 테이블에 대한 내부 공유 잠금을 사용한다. 이 변경으로 인해 모든 INPLACE ALTER TABLE 쿼리에 대해 LOCK=NONE 절이 더 이상 허용되지 않는다. 이 변경 사항은 다음 시나리오에서 클러스터 노드가 중단될 수 있는 교착 상태를 해결한다.
n 한 세션에 있거나 TOI(Total Order Isolation)로 적용되는 INPLACE ALTER TABLE 쿼리
n 다른 세션의 동일한 테이블에 있는 DML
n log_bin, log_bin_index 값을 정의할 때 하나 이상의 점 문자(.)를 사용하지 않는다.
n MySQL과 XtraBackup은 서로 다른 방식으로 값을 처리하며 이러한 차이로 인해 예측할 수 없는 동작이 발생한다.
[Percona 버전 번호이해]
버전 번호는 제품 릴리스를 식별한다. 제품에는 해당 릴리스 당시의 최신 GA(일반 출시) 기능이 포함되어 있다.
Percona는 기본 버전, 마이너 빌드 및 선택적 사용자 정의 빌드 패턴을 따르는 의미 체계 버전 번호 지정을 사용한다. Percona는 각 마이너 빌드 릴리스에 대해 음수가 아닌 고유한 정수를 오름차순으로 할당한다. 버전 번호는 필요한 경우 기본 Percona Server for MySQL 버전 번호, 마이너 빌드 버전 및 사용자 정의 빌드 버전을 결합한다.
l Base Version : 기본으로 사용되는 Percona Server for MySQL 버전을 나타내는 가장 왼쪽 숫자 집합으로, 베이스 버전이 이 증가하면 마이너 빌드 버전과 사용자 정의 빌드 버전이 0으로 재설정된다.
l Minor Build : Percona XtraDB 클러스터가 릴리스 될 때마다 증가하는 내부 번호이며 사용자 정의 빌드 번호는 0으로 재설정된다.
l Customer Build : 버그 수정에 사용되는 사용자 정의 빌드에 할당된 선택적 번호이다. 수정 사항에 해당 기능이 포함되지 않는 한 기능은 변경되지 않는다. 예를 들어 Percona XtraDB Cluster 8.0.20-11.1, 8.0.20-11.2 및 8.0.20-11.3은 동일한 Percona Server for MySQL 버전 및 마이너 빌드 버전을 기반으로 하지만 사용자 정의 빌드 버전이다.
[wsrep status variables]
wsrep status variables | Comments |
wsrep_apply_oooe | 병렬화 효율성, 쓰기가 순서 없이 적용되는 빈도. |
wsrep_apply_oool | 더 높은 시퀀스 번호를 가진 쓰기 세트가 더 낮은 시퀀스 번호를 가진 쓰기 세트보다 먼저 적용되는 빈도. |
wsrep_apply_window | 동시에 적용된 최고 및 최저 시퀀스 번호 사이의 평균 거리. |
wsrep_causal_reads | wsrep_causal_reads 변수가 ON으로 설정된 동안 처리된 쓰기 세트 수. |
wsrep_cert_bucket_count | 인증 색인 해시 테이블의 셀 수. |
wsrep_cert_deps_distance | 병렬로 적용될 수 있는 가장 높은 시퀀스 번호와 가장 낮은 시퀀스 번호 사이의 평균 거리. |
wsrep_cert_index_size | 인증 색인의 항목 수. |
wsrep_cert_interval | 트랜잭션이 복제되는 동안 수신된 평균 쓰기 세트 수. |
wsrep_cluster_conf_id | 발생한 클러스터 멤버십 변경 수. |
wsrep_cluster_size | 클러스터의 현재 노드 수. |
wsrep_cluster_state_uuid | 클러스터의 UUID 상태로, 이 값이 wsrep_local_state_uuid의 값과 동일하면 노드가 클러스터와 동기화상태임. |
wsrep_cluster_status | 클러스터 구성 요소의 상태로 Primary, Non-Primary, Disconnected가 있음. |
wsrep_commit_oooe | 트랜잭션이 순서 없이 커밋된 빈도. |
wsrep_commit_oool | 이 변수는 현재 사용하지 않음. |
wsrep_commit_window | 동시에 커밋된 최고 시퀀스 번호와 최저 시퀀스 번호 사이의 평균 거리. |
wsrep_connected | 노드가 클러스터에 연결되어 있는지 여부를 표시. 값이 OFF이면 노드가 아직 클러스터 구성 요소에 연결되지 않은 상태로, 이는 잘못된 구성으로 인한 것일 수 있음. |
wsrep_evs_delayed | 지연된 것으로 간주되는 쉼표로 구분된 노드 목록. 노드 형식은 <uuid>:<address>:<count>로, <count>는 해당 노드에 대한 지연 목록의 항목 수. |
wsrep_evs_evict_list | 제거된 노드의 UUID 목록. |
wsrep_evs_repl_latency | 그룹 통신 복제 대기 시간에 관한 정보를 제공. 이 대기 시간은 메시지가 전송된 시점부터 메시지가 수신될 때까지 초 단위로 측정. 출력 형식: <min>/<avg>/<max>/<std_dev>/<sample_size> |
wsrep_evs_state | 내부 EVS 프로토콜 상태. |
wsrep_flow_control_interval | Galera 흐름 제어의 하한 및 상한을 표시. 상한은 대기열에 허용되는 최대 요청 수이며, 대기열이 상한에 도달하면 새 요청이 거부된다. 기존 요청이 처리되면 대기열이 줄어들고, 하한에 도달하면 새 요청이 다시 허용된다. |
wsrep_flow_control_interval_high | 트리거할 흐름 제어의 상한을 표시. |
wsrep_flow_control_interval_low | 흐름 제어를 정지하는 하한값을 표시. |
wsrep_flow_control_paused | 흐름 제어로 인해 일시 중지된 마지막 상태 쿼리 이후의 시간. |
wsrep_flow_control_paused_ns | 일시 중지된 상태에서 소요된 총 시간은 나노초 단위로 측정. |
wsrep_flow_control_recv | 마지막 상태 쿼리 이후 수신된 FC_PAUSE 이벤트 수. 대부분의 상태 변수와 달리 이 카운터는 쿼리를 실행할 때마다 재설정되지 않으며, 서버가 다시 시작되면 재설정된다. |
wsrep_flow_control_requested | 노드가 복제 일시 중지를 요청했는지 여부를 반환. |
wsrep_flow_control_sent | 마지막 상태 쿼리 이후 전송된 FC_PAUSE 이벤트 수. 대부분의 상태 변수와 달리 이 카운터는 쿼리를 실행할 때마다 재설정되지 않으며, 서버가 다시 시작되면 재설정된다. |
wsrep_flow_control_status | 노드에 일반 트래픽에 대해 흐름 제어가 활성화되어 있는지 여부를 표시. SST 중에는 흐름 제어 상태를 나타내지 않는다. |
wsrep_gcache_pool_size | GCache에 할당된 페이지 풀 및 동적 메모리의 크기(바이트)를 표시. |
wsrep_gcomm_uuid | Galera 보기 ID(따라서 클러스터 상태 UUID와 관련 없음)인 gvwstate.dat의 UUID를 노출. 이 UUID는 각 노드마다 고유하며, 수동 제거 기능을 사용할 때 이 값을 알아야 한다. |
wsrep_incoming_addresses | 클러스터에 있는 수신 노드 주소의 쉼표로 구분된 목록을 표시. |
wsrep_ist_receive_status | JOIN 노드에 대한 IST 진행 상황을 표시. IST가 실행 중이 아닌 경우 값은 비어 있으며, IST가 실행 중인 경우 값은 완료된 전송 비율. |
wsrep_ist_receive_seqno_end | IST의 마지막 트랜잭션의 시퀀스 번호. |
wsrep_ist_receive_seqno_current | IST에서 현재 트랜잭션의 시퀀스 번호. |
wsrep_ist_receive_seqno_start | IST의 첫 번째 트랜잭션의 시퀀스 번호. |
wsrep_last_applied | 마지막으로 적용된 트랜잭션의 시퀀스 번호. |
wsrep_last_committed | 마지막으로 커밋된 트랜잭션의 시퀀스 번호. |
wsrep_local_bf_aborts | 실행되는 동안 복제본 트랜잭션에 의해 중단된 로컬 트랜잭션 수. |
wsrep_local_cached_downto | GCache에서 가장 낮은 시퀀스 번호. 이 정보는 IST 및 SST를 결정하는 데 도움이 될 수 있다. 값이 0이면 GCache에 쓰기 세트가 없음을 의미 (일반적으로 단일 노드의 경우). |
wsrep_local_cert_failures | 인증 테스트에 실패한 쓰기 세트 수. |
wsrep_local_commits | 노드에 커밋된 쓰기 세트 수. |
wsrep_local_index | 클러스터에 있는 노드의 인덱스. |
wsrep_local_recv_queue | 수신 대기열의 현재 길이(즉, 적용을 기다리는 쓰기 세트 수). |
wsrep_local_recv_queue_avg | 마지막 상태 쿼리 이후 수신 대기열의 평균 길이. 이 숫자가 0보다 크면 노드가 쓰기 세트를 수신하는 속도만큼 빠르게 적용할 수 없음을 의미. 이는 노드가 과부하되어 복제 제한이 발생할 수 있다는 신호일 수 있다. |
wsrep_local_replays | 비대칭 잠금 세분성으로 인한 트랜잭션 재생 횟수. |
wsrep_local_send_queue | 전송 대기열의 현재 길이(즉, 전송 대기 중인 쓰기 세트 수). |
wsrep_local_send_queue_avg | 마지막 상태 쿼리 이후 전송 대기열의 평균 길이. 클러스터에서 네트워크 처리량 문제나 복제 제한이 발생하는 경우 이 값은 0보다 훨씬 커진다. |
wsrep_local_state | 내부 Galera 클러스터 FSM 상태 번호. |
wsrep_local_state_comment | 노드 상태에 대한 내부 번호 및 사람이 읽을 수 있는 해당 설명. 1 : Joining - Node is joining the cluster 2 : Donor/Desynced - Node is the donor to the node joining the cluster 3 : Joined - Node has joined the cluster 4 : Synced-Node is synced with the cluster |
wsrep_local_state_uuid | 노드에 저장된 상태의 UUID. |
wsrep_monitor_status | 로컬 모니터(로컬 및 복제 작업), 적용 모니터(쓰기 세트의 적용 작업) 및 커밋 모니터(쓰기 세트의 커밋 작업)의 상태. 이 변수의 값에서 각 모니터(L: Local, A: Apply, C: Commit)는 last_entered 및 last_left 쌍으로 표시. wsrep_monitor_status (L/A/C) [ ( 7, 5), (2, 2), ( 2, 2) ] |
wsrep_protocol_version | 사용된 wsrep 프로토콜의 버전. |
wsrep_provider_name | wsrep 공급자의 이름(일반적으로 Galera). |
wsrep_provider_vendor | wsrep 공급자 공급업체의 이름(일반적으로 Codership Oy). |
wsrep_provider_version | wsrep 공급자의 현재 버전. |
wsrep_ready | 노드가 쿼리를 수락할 준비가 되었는지 표시. 상태가 OFF이면 거의 모든 쿼리가 ERROR 1047(08S01) 알 수 없는 명령 오류로 인해 실패한다. (wsrep_on 변수가 0으로 설정되지 않은 경우). |
wsrep_received | 다른 노드에서 수신된 총 쓰기 세트 수. |
wsrep_received_bytes | 다른 노드에서 수신된 쓰기 세트의 총 크기(바이트). |
wsrep_repl_data_bytes | 복제된 데이터의 총 크기(바이트). |
wsrep_repl_keys | 복제된 총 키 수. |
wsrep_repl_keys_bytes | 복제된 키의 총 크기(바이트). |
wsrep_repl_other_bytes | 복제된 다른 비트의 총 크기. |
wsrep_replicated | 다른 노드로 전송된 총 쓰기 세트 수. |
wsrep_replicated_bytes | 복제된 쓰기 세트의 총 크기. 네트워크를 통해 클러스터 피어로 전송된 실제 바이트 크기를 계산하려면 이 변수의 값에 지정된 네트워크 세그먼트의 클러스터 피어 수를 곱한다. |
[wsrep system variables]
wsrep system variables | Comments |
pxc_encrypt_cluster_traffic | SSL 암호화의 자동 구성을 활성화 유무. l ON, 1, true : Enabled(default). l OFF, 0, false : Disabled. |
pxc_maint_mode | ProxySQL의 설정을 조정하지 않고 노드를 종료하기 위한 유지 관리 모드를 지정. l DISABLED : ProxySQL에게 평소와 같이 트래픽을 노드로 라우팅하도록 지시하는 기본 상태. l SHUTDOWN: 노드 종료를 시작할 때 자동으로 설정. l MAINTENANCE: 노드를 종료하지 않고 유지 관리를 수행해야 하는 경우 이 상태를 수동으로 변경할 수 있다. |
pxc_maint_transition_period | pxc_maint_mode를 SHUTDOWN 또는 MAINTENANCE로 변경할 때 전환 기간을 정의. 기본적으로 기간은 10초로 설정. 장기 실행 트랜잭션을 수용하도록 값을 늘릴 수 있다. |
pxc_strict_mode | Percona XtraDB Cluster에서 실험적 기능과 지원되지 않는 기능의 사용을 피하기 위해 검증을 실행하는 PXC Strict 모드를 제어. 선택한 실제 모드에 따라 유효성 검사에 실패하면 서버에서 오류가 발생하거나(시작 중지 또는 작업 거부) 경고를 기록하고 정상적으로 계속 실행. |
wsrep_applier_FK_checks | Percona XtraDB Cluster 8.0.26-16부터 wsrep_slave_FK_checks 변수는 이 변수를 위해 더 이상 사용되지 않음. |
wsrep_applier_threads | Percona XtraDB Cluster 8.0.26-16부터 wsrep_slave_threads 변수는 더 이상 사용되지 않으며, wsrep_applier_threads 변수를 사용한다. |
wsrep_applier_UK_checks | Percona XtraDB Cluster 8.0.26-16부터 wsrep_slave_UK_checks 변수는 더 이상 사용되지 않으며, wsrep_applier_UK_checks 변수를 사용한다. |
wsrep_auto_increment_control | 클러스터 크기에 따라 자동 증가 시스템 변수의 자동 조정을 활성화. l auto_increment_increment : 연속적인 AUTO_INCREMENT 열 값 사이의 간격을 제어. l auto_increment_offse : AUTO_INCREMENT 열 값의 시작점을 결정. |
wsrep_causal_reads | 경우에 따라 소스가 복제본보다 더 빠르게 이벤트를 적용할 수 있으며, 이로 인해 소스와 복제본이 잠시 동안 동기화되지 않을 수 있다. 이 변수가 ON으로 설정되면 복제본은 다른 쿼리를 수행하기 전에 해당 이벤트가 적용될 때까지 기다린다. 이 변수를 활성화하면 대기 시간이 길어진다. |
wsrep_certification_rules | 클러스터에서 인증이 수행되는 방식을 제어하며, 특히 외래 키가 처리되는 방식에 영향을 미친다. |
wsrep_certify_nonPK | 기본 키가 없는 행에 대해 기본 키 자동 생성을 활성화. |
wsrep_cluster_address | 클러스터에 연결할 때 노드가 사용하는 백엔드 스키마, IP 주소, 포트 및 옵션을 정의. 이 변수는 활성 상태이고 클러스터의 구성원인 다른 노드의 주소를 하나 이상 지정해야 한다. 실제로는 가능한 모든 클러스터 노드의 전체 목록을 제공하는 것이 가장 좋다(필수는 아님). |
wsrep_cluster_name | 클러스터의 이름을 지정하며 모든 노드에서 동일해야 한다. 노드는 클러스터에 연결을 시도할 때 값을 확인한다. 이름이 일치하면 노드가 연결됩니다. |
wsrep_data_home_dir | wsrep 공급자가 해당 파일(예: grastate.dat)을 저장하는 디렉터리의 경로를 지정. |
wsrep_dbug_option | wsrep 공급자에게 전달할 DBUG 옵션을 정의. |
wsrep_debug | 데이터베이스 서버 및 wsrep-lib에 대한 디버그 수준 로깅을 활성화(기본적으로 --wsrep-debug 변수는 비활성화되어 있음). 이 변수는 문제를 진단하거나 버그를 제출할 때 사용할 수 있다. |
wsrep_desync | 노드가 흐름 제어에 참여해야 하는지 여부를 정의 (비활성화 기본값). 수신 대기열이 너무 커지면 노드가 흐름 제어에 참여한다. 이 변수를 활성화하면 노드에 대한 흐름 제어가 비활성화된다. 적용할 수 없는 쓰기 세트를 계속 수신하고 수신 대기열은 계속 증가하며 노드는 계속해서 클러스터 뒤처지게 된다. 이를 다시 OFF로 전환하려면 비동기화 기간에 따라 IST 또는 SST가 필요하다. 이는 RSU TOI 중에 발생하는 클러스터 비동기화와 유사하다. 이 때문에 wsrep_desync를 오랜 기간 동안 활성화하거나 여러 노드에 대해 동시에 활성화하는 것은 좋은 생각이 아니다. |
wsrep_dirty_reads | 노드가 비작동 상태, 즉 기본 구성요소에 대한 연결이 끊어졌을 때 읽기 쿼리를 수락할지 여부를 정의. 기본적으로 이 변수는 비활성화되어 있으며 데이터가 올바른지 알 수 있는 방법이 없기 때문에 노드는 모든 쿼리를 거부한다. 이 변수를 활성화하면 노드는 읽기 쿼리(USE, SELECT, LOCK TABLE 및 UNLOCK TABLES)를 허용하지만 작동하지 않는 노드에서 데이터베이스를 수정하거나 업데이트하는 모든 명령은 계속 거부된다(DDL 및 DML 문 포함). INSERT, DELETE, UPDATE 등). 교착 상태 오류를 방지하려면 wsrep_dirty_reads를 활성화한 경우 wsrep_sync_wait 변수를 0으로 설정한다. Percona XtraDB Cluster 8.0.26-16부터 set_var 힌트를 사용하여 변수를 업데이트할 수 있다. |
wsrep_drupal_282555_workaround | Drupal에 영향을 미치는 MySQL InnoDB 버그(Drupal 버그 #282555 및 MySQL 버그 #41984)에 대한 해결 방법을 활성화한다. 경우에 따라 AUTO_INCREMENT 열에 DEFAULT 값을 삽입할 때 중복 키 오류가 발생한다. |
wsrep_forced_binlog_format | 클라이언트 세션 binlog_format 변수 값에 관계없이 항상 유효한 바이너리 로그 형식을 정의한다. l ROW: Force row-based logging format l STATEMENT: Force statement-based logging format l MIXED: Force mixed logging format l NONE: Do not force the binary log format and use whatever is set by the binlog_format variable (default) |
wsrep_ignore_apply_errors | 오류에 대한 wsrep 적용자 동작 규칙을 정의. |
wsrep_min_log_verbosity | wsrep/Galera의 최소 로깅 상세 수준을 정의하고 log_error_verbosity 변수와 함께 작동. wsrep_min_log_verbosity는 log_error_verbosity와 동일한 값을 갖는다. log_error_verbosity가 wsrep_min_log_verbosity보다 큰 경우 wsrep/Galera의 실제 로그 상세 수준은 wsrep_min_log_verbosity 값보다 클 수 있다. |
wsrep_load_data_splitting | 노드가 대규모 LOAD DATA 트랜잭션을 분할해야 하는지 여부를 정의. 이 변수는 기본적으로 활성화됩니다. 즉, LOAD DATA 명령은 10,000행 이하의 트랜잭션으로 분할된다. 이 변수를 비활성화하면 막대한 데이터 로드로 인해 충돌 발생 시 노드가 작업을 완전히 롤백하지 못할 수 있으며 커밋된 내용은 커밋된 상태로 유지된다. |
wsrep_log_conflicts | 노드가 충돌에 대한 추가 정보를 기록해야 하는지 여부를 정의. 기본적으로 이 변수는 비활성화되어 있으며 Percona XtraDB Cluster는 MySQL의 표준 로깅 기능을 사용. 이 변수를 활성화하면 충돌이 발생한 테이블과 스키마뿐만 아니라 충돌을 일으킨 키의 실제 값도 기록된다. |
wsrep_max_ws_rows | 각 쓰기 세트에 포함될 수 있는 최대 행 수를 정의. 기본적으로 쓰기 세트의 최대 행 수에는 제한이 없다. 허용되는 최대 값은 1048576이다. |
wsrep_max_ws_size | 최대 쓰기 세트 크기(바이트)를 정의. 지정된 값보다 큰 값은 거부된다. 1024와 기본값 2147483647 사이의 값으로 설정할 수 있다. |
wsrep_mode | Percona XtraDB Cluster 8.0.31에서 구현되었으며, 지정된 값에 따라 노드 동작을 정의. 값은 기본적으로 비어 있거나 비활성화되어 있음. l 비어 있음 - 노드 동작을 변경하지 않음. l IGNORE_NATIVE_REPLICATION_FILTER_RULES - 기본 복제 필터 규칙을 무시하도록 wsrep 동작을 변경. |
wsrep_node_address | 노드의 네트워크 주소를 지정. 기본적으로 이 변수는 첫 번째 네트워크 인터페이스(일반적으로 eth0 또는 enp2s0)의 IP 주소와 기본 포트(4567)로 설정. |
wsrep_node_incoming_address | 노드가 클라이언트 연결을 예상하는 네트워크 주소를 지정. 기본적으로 wsrep_node_address의 IP 주소와 포트 번호 3306을 사용. |
wsrep_node_name | 노드의 고유 이름을 정의. 기본값은 호스트 이름. 이 변수의 값을 클러스터에서 지정된 노드를 식별하는 수단으로 사용할 수 있다. |
wsrep_notify_cmd | 클러스터 멤버십이나 로컬 노드 상태가 변경될 때마다 노드가 실행해야 하는 알림 명령을 지정. 이는 경고를 보내거나 로드 밸런서를 재구성하는 데 사용될 수 있다. |
wsrep_on | 노드의 현재 세션 트랜잭션 변경 사항이 클러스터에 복제되는지 정의. 세션을 OFF로 설정하면 해당 세션에 트랜잭션 변경 사항이 복제되지 않는다. 설정으로 인해 노드가 클러스터를 떠나지 않으며 노드가 다른 노드와 통신한다. |
wsrep_OSU_method | 노드가 DDL 문을 복제하는 데 사용하는 온라인 스키마 업그레이드 방법을 정의. |
wsrep_provider | Galera 라이브러리의 경로를 지정. 경로를 지정하지 않거나 값이 유효하지 않은 경우 노드는 MySQL의 독립 실행형 인스턴스로 작동. |
wsrep_provider_options | wsrep_provider옵션 인덱스에 설명된 복제 공급자에 대한 선택적 설정을 지정. 이러한 옵션은 복제 중에 다양한 상황이 처리되는 방식에 영향을 준다. |
wsrep_recover | 로그에서 GTID를 구문 분석하여 충돌 후 데이터베이스 상태를 복구. GTID가 발견되면 서버의 초기 위치로 지정된다. |
wsrep_reject_queries | 노드가 클라이언트의 쿼리를 거부해야 하는지 여부를 정의. 쿼리 거부는 업그레이드 중에 쿼리를 수락하지 않고 노드를 유지하고 쓰기 세트를 적용하려는 경우 유용할 수 있다. |
wsrep_replicate_myisam | MyISAM 테이블에 대한 DML 문을 복제해야 하는지 여부를 정의. 기본적으로 비활성화되어 있다. 전역 수준에서 wsrep_replicate_myisam은 시작 중에만 설정할 수 있다. 세션 수준에서는 런타임 중에도 변경할 수 있다. |
wsrep_restart_replica | Percona XtraDB Cluster 8.0.26-16부터 더 이상 사용되지 않음. |
wsrep_restart_slave | Percona XtraDB Cluster 8.0.26-16부터 더 이상 사용되지 않음. |
wsrep_retry_autocommit | 인증 오류가 발생할 경우 클러스터에서 자동 커밋 트랜잭션을 다시 시도할 횟수를 지정. 충돌이 있는 경우 클러스터 노드는 클라이언트에 오류를 반환하지 않고 명령문을 다시 시도하여 다음에 통과할 수 있기를 바라면 안전하다. 이는 복제 충돌로 인해 발생할 수 있는 교착 상태 오류를 방지하기 위해 자동 커밋을 사용하는 애플리케이션을 돕는 데 유용할 수 있다. 이 변수가 0으로 설정되면 자동 커밋 트랜잭션이 다시 시도되지 않는다. |
wsrep_RSU_commit_timeout | RSU를 시작하기 전에 활성 연결이 COMMIT 작업을 완료할 수 있도록 허용하는 시간 제한(마이크로초)을 지정. RSU를 실행하는 동안 사용자가 노드를 격리했고 노드에서 실행 중인 활성 트래픽이 없을 것으로 예상된다. RSU는 이를 확인하고 RSU를 시작하기 전에 COMMIT 상태의 활성 연결을 기다린다. 기본적으로 이 검사의 시간 제한은 5밀리초이지만 어떤 경우에는 COMMIT가 더 오래 걸린다. 이 변수는 제한 시간을 설정하며 (5밀리초, 365일) 범위의 값을 허용한다. 값은 마이크로초 단위로 설정된다. 변수의 단위는 마이크로초 단위이므로 그에 맞춰 설정한다. |
wsrep_slave_FK_checks | Percona XtraDB Cluster 8.0.26-16부터 이 변수는 더 이상 사용되지 않음. |
wsrep_slave_threads | Percona XtraDB Cluster 8.0.26-16부터 이 변수는 더 이상 사용되지 않음. |
wsrep_slave_UK_checks | Percona XtraDB Cluster 8.0.26-16부터 이 변수는 더 이상 사용되지 않음. |
wsrep_SR_store | 스트리밍 복제 조각을 위한 스토리지를 정의. 사용 가능한 값은 기본값인 table과 변수를 비활성화하는 none이다. |
wsrep_sst_allowed_methods | wsrep_sst_method 변수에 대해 서버에서 허용하는 SST 방법을 제한. 기본값은 xtrabackup-v2이다. |
wsrep_sst_donor | 현재 노드가 SST 및 IST에 대한 기증자로 선호해야 하는 노드 목록(wsrep_node_name 값 사용)을 지정. |
wsrep_sst_method | SST(상태 스냅샷 전송)에 대한 방법 또는 스크립트를 정의. |
wsrep_sst_receive_address | 기증자 노드가 상태 전송을 보내야 하는 네트워크 주소를 지정. 기본적으로 이 변수는 AUTO로 설정되며 wsrep_node_address의 IP 주소가 사용됩니다. |
wsrep_start_position | 노드의 시작 위치를 UUID:seqno로 지정. 이 변수에 대해 모든 노드가 동일한 값을 갖도록 설정하면 상태 전송 없이 클러스터를 설정할 수 있다. |
wsrep_sync_wait | 특정 명령문에 대한 클러스터 전체의 인과성 검사를 제어한다. 클러스터와 완전히 동기화된 노드에서 명령문이 실행되는지 확인한다. Percona XtraDB Cluster 8.0.26-16부터 set_var 힌트를 사용하여 변수를 업데이트할 수 있다. |
wsrep_trx_fragment_size | 스트리밍 복제 조각 크기를 정의한다. 이 변수는 wsrep_trx_fragment_unit에 의해 정의된 값으로 측정된다. 최소값은 0이고 최대값은 2147483647이다. Percona XtraDB Cluster for MySQL 8.0.26-16부터 set_var 힌트를 사용하여 변수를 업데이트할 수 있다. |
wsrep_trx_fragment_unit | wsrep_trx_fragment_size에 대한 측정 유형을 정의. 가능한 값은 바이트, 행, 명령문이다. Percona XtraDB Cluster for MySQL 8.0.26-16부터 set_var 힌트를 사용하여 변수를 업데이트할 수 있다. |
[참고자료]
l About Percona XtraDB Cluster : https://docs.percona.com/percona-xtradb-cluster/8.0/intro.html
2023-09-27 / Sungwook Kang / http://sungwookkang.com
MySQL Percona, XtraDB, XtraBackup, XtraDB Cluster, 퍼코나 클러스터, 퍼코나 데이터베이스
'MySQL, MariaDB' 카테고리의 다른 글
[MySQL] MySQL 오류 로그 이해 (0) | 2023.10.16 |
---|---|
[MySQL] ProxySQL 연결이 실패할 때 확인해야 할 기본 체크리스트 (0) | 2023.10.11 |
[MySQL] MySQL 5.7에서 8.0으로 업그레이드시 변경되는 설정 및 옵션 정리 (0) | 2023.09.13 |
[MySQL] 성능 모니터링을 위한 Performance_Schema 개념 (0) | 2023.09.02 |
[MySQL] “innodb_table_stats” not found 오류와 예상하지 못한 사이드 이펙트 (0) | 2023.09.01 |