MySQL 8.0에서 추가된 모든 기능

MySQL 8.0에서 추가된 모든 기능 – 그룹 복제

Estimated reading: 2 minutes 33 views

1. 트랜잭션 세이브포인트 지원

[원본제공링크 1]

MySQL 8.0부터 Group Replication에서 트랜잭션 저장점(SAVEPOINT)을 지원합니다. 트랜잭션 저장점(SAVEPOINT)은 트랜잭션 내 특정 지점을 설정하여, 이후 발생하는 변경 사항을 선택적으로 롤백할 수 있게 해주는 기능입니다. 이 기능은 복잡한 트랜잭션 처리 중 일부 작업에 오류가 발생했을 때, 전체 트랜잭션을 롤백하지 않고도 부분적인 롤백을 가능하게 합니다. 이를 통해 복제 환경에서도 트랜잭션 내 특정 지점으로 롤백할 수 있어, 복잡한 트랜잭션 관리와 오류 복구가 용이해졌습니다.

2. 그룹 복제에서 격리된 멤버의 쓰기 작업 금지

[원본제공링크 1 2 3]

MySQL Group Replication에서는 네트워크 분할 등으로 인해 멤버가 그룹에서 격리되었을 때, 해당 멤버의 쓰기 작업을 자동으로 금지하여 데이터 일관성을 유지합니다. 이러한 격리된 멤버가 쓰기 작업을 수행하면, 그룹에 재합류할 때 데이터 충돌이 발생할 수 있습니다. 이를 방지하기 위해, MySQL은 격리된 멤버의 쓰기 작업을 자동으로 금지하여 데이터의 일관성을 유지합니다.

3. 그룹 전체 인증 및 적용기 통계 모니터링

[원본제공링크 1 2]

MySQL Group Replication에서는 각 멤버의 인증(Certifier)과 적용기(Applier) 모듈의 성능을 모니터링하기 위해 performance_schema.replication_group_member_stats 테이블을 제공합니다. 이를 통해 트랜잭션 대기열, 충돌 횟수, 인증된 트랜잭션 수 등 다양한 지표를 확인하여 그룹 복제의 상태를 효과적으로 관리할 수 있습니다.

4. 흐름 제어를 세밀하게 조정하는 옵션들

[원본제공링크 1 2 3 4 5 6 7 8]

MySQL Group Replication에서 흐름 제어(Flow Control)는 그룹 내 멤버들의 동기화를 유지하고 성능을 최적화하는 데 중요합니다. 이를 위해 다양한 시스템 변수를 제공하여 흐름 제어를 세밀하게 조정할 수 있습니다. 주요 변수로는 group_replication_flow_control_mode, group_replication_flow_control_min_quota, group_replication_flow_control_max_quota 등이 있으며, 이를 통해 그룹의 쓰기 속도와 동기화 상태를 효과적으로 관리할 수 있습니다.

5. 화이트리스트에서 호스트명 지원

[원본제공링크 1]

MySQL Group Replication은 8.0.4 버전부터 허용 목록(allowlist)에 호스트명을 지원합니다. 이를 통해 IP 주소뿐만 아니라 호스트명으로도 그룹에 참여할 수 있는 멤버를 지정할 수 있어, 특히 IP 주소가 동적으로 변경되는 환경에서 유용합니다. 이 기능은 5.7.21 버전에도 백포트되어 제공됩니다.

6. 그룹에서 제외될 경우 서버 자동 종료

[원본제공링크 1]

MySQL Group Replication에서 멤버가 그룹에서 비정상적으로 이탈할 경우, group_replication_exit_state_action 시스템 변수를 통해 서버의 동작을 제어할 수 있습니다. 이 변수를 ABORT_SERVER로 설정하면, 멤버가 그룹에서 이탈 시 MySQL 서버가 자동으로 종료되어 데이터 일관성을 유지하고 잠재적인 문제를 방지할 수 있습니다.

7. 온라인 및 사용자 주도 기본 노드 전환/선출

[원본제공링크 1 2]

MySQL Group Replication에서는 기본(primary) 노드를 온라인 상태에서 사용자 주도로 전환하거나 선출할 수 있는 기능을 제공합니다. 이를 통해 서비스 중단 없이 기본 노드를 변경하여 유지보수나 부하 분산을 효율적으로 수행할 수 있습니다. 주요 방법으로는 group_replication_set_as_primary() 함수를 사용하거나, group_replication_member_weight 변수를 조정하여 기본 노드를 지정하는 방식이 있습니다.

8. 온라인 및 사용자 주도 단일-다중 기본 노드 전환

[원본제공링크 1 2]

MySQL Group Replication에서는 단일 기본 모드에서 다중 기본 모드로의 전환을 온라인 상태에서 사용자 주도로 수행할 수 있습니다. 이를 통해 서비스 중단 없이 여러 노드에서 동시에 쓰기 작업을 처리할 수 있는 환경으로 변경할 수 있습니다. 이 작업은 group_replication_switch_to_multi_primary_mode() 함수를 사용하여 수행하며, 모든 멤버가 동일한 MySQL 버전을 사용해야 합니다. 또한, 멤버 간의 호환성을 확인하여 일부 멤버를 읽기 전용 모드로 설정할 수 있습니다.

9. 설정 가능한 메시지 파이프라이닝

[원본제공링크 1 2]

MySQL Group Replication에서 메시지 파이프라이닝은 트랜잭션의 전송 및 처리 효율을 높이기 위한 기술입니다. 이를 통해 여러 트랜잭션을 동시에 전송하고 처리하여 지연 시간을 줄이고 처리량을 향상시킬 수 있습니다. 이러한 파이프라이닝의 동작은 시스템 변수 group_replication_message_cache_size를 통해 조절할 수 있습니다. 이 변수를 적절히 설정하면 메시지 캐시의 크기를 조정하여 파이프라이닝의 효율성을 최적화할 수 있습니다.

10. 완화된 멤버 추방

[원본제공링크 1]

MySQL Group Replication에서 멤버가 그룹에서 제거되는 조건을 완화하여, 일시적인 네트워크 문제나 시스템 과부하로 인한 멤버 제거를 방지할 수 있습니다. 이를 통해 그룹의 안정성을 높이고, 불필요한 멤버 재가입 과정을 줄일 수 있습니다. 이러한 동작은 group_replication_member_expel_timeout 시스템 변수를 통해 제어되며, 이 변수를 적절히 설정하여 멤버 제거 전에 허용되는 최대 지연 시간을 지정할 수 있습니다. 기본값은 5초이며, 필요에 따라 이 값을 조정하여 멤버 제거 정책을 완화할 수 있습니다.

11. 일관된 읽기 지원

[원본제공링크 1]

MySQL Group Replication에서 일관된 읽기(Consistent Reads)는 트랜잭션이 데이터베이스의 특정 시점(snapshot)의 데이터를 읽도록 보장하는 기능입니다. 이를 통해 트랜잭션 중 다른 트랜잭션의 변경 사항이 보이지 않게 하여 데이터 일관성을 유지합니다. 이러한 일관된 읽기를 구현하기 위해 MySQL은 다중 버전 동시성 제어(MVCC)를 사용하며, 트랜잭션 격리 수준을 통해 제어할 수 있습니다. 특히, group_replication_consistency 시스템 변수를 설정하여 그룹 복제 환경에서의 일관성 수준을 조절할 수 있습니다. 이 변수는 EVENTUAL, BEFORE_ON_PRIMARY_FAILOVER, BEFORE, AFTER 등의 값을 가지며, 각 값은 트랜잭션이 읽기 및 쓰기 작업을 수행할 때 다른 멤버의 트랜잭션 적용 상태를 얼마나 기다릴지를 결정합니다. 예를 들어, BEFORE로 설정하면 트랜잭션이 시작되기 전에 모든 이전 트랜잭션이 적용될 때까지 기다리므로, 최신 데이터를 읽을 수 있습니다. 반면, EVENTUAL은 이전 트랜잭션의 적용을 기다리지 않으므로, 최신 데이터가 아닐 수 있습니다. 이러한 설정을 통해 애플리케이션의 요구사항에 맞는 일관성 수준을 선택할 수 있습니다.

12. 기본 노드 장애 조치 시 일관된 읽기

[원본제공링크 1]

MySQL Group Replication에서 주 노드(Primary)가 장애로 인해 교체될 때(failover), 새로운 주 노드가 이전 주 노드의 모든 트랜잭션을 적용하기 전까지 읽기 및 쓰기 작업을 지연시켜 데이터의 일관성을 유지할 수 있습니다. 이를 위해 group_replication_consistency 시스템 변수를 BEFORE_ON_PRIMARY_FAILOVER로 설정합니다. 이 설정은 주 노드 전환 시 데이터의 최신 상태를 보장하지만, 그 과정에서 지연이 발생할 수 있으므로 애플리케이션이 이러한 지연을 처리할 수 있도록 설계되어야 합니다.

13. IPv6 지원

[원본제공링크 1 2]

MySQL Group Replication은 버전 8.0.14부터 IPv6를 지원하여, 그룹 내 통신에 IPv6 주소를 사용할 수 있습니다. 이를 통해 더 많은 IP 주소 공간을 활용하고, 최신 네트워크 인프라와의 호환성을 높일 수 있습니다. IPv6 지원을 위해서는 group_replication_local_address, group_replication_group_seeds 등의 설정에서 IPv6 주소를 사용하며, 호스트명이 IPv4와 IPv6 모두로 해석될 경우 기본적으로 IPv4 주소를 사용합니다. 또한, 혼합된 IPv4 및 IPv6 환경에서도 그룹 복제가 가능하지만, 모든 멤버가 IPv6를 지원하는 MySQL 버전을 사용해야 합니다. 이러한 설정을 통해 MySQL Group Replication에서 IPv6를 효과적으로 활용할 수 있습니다.

14. 메시지 전달에 대한 추적

[원본제공링크 1]

MySQL Group Replication에서 메시지 전달 과정을 추적하려면 Performance Schema를 활용하여 관련 이벤트를 모니터링할 수 있습니다. 이를 통해 그룹 내 서버 간의 메시지 통신을 분석하고, 성능 최적화 및 문제 해결에 도움이 되는 데이터를 수집할 수 있습니다. 특히, group_replication_message_service_send와 같은 내부 서비스는 그룹 통신 계층을 통해 메시지를 전송하며, 이러한 서비스의 동작을 추적하여 메시지 전달 과정을 상세히 분석할 수 있습니다. 이를 위해 Performance Schema의 관련 테이블을 활성화하고, 필요한 이벤트를 수집하여 분석합니다. 이러한 추적 기능은 MySQL 8.0.18 버전부터 제공되며, 이를 통해 그룹 복제 환경에서 메시지 전달 과정을 효과적으로 모니터링할 수 있습니다.

15. 주 노드 장애 조치 후보 우선순위 구성

[원본제공링크 1 2]

MySQL Group Replication에서 주 노드(Primary) 장애 발생 시, 새로운 주 노드를 선택하는 과정에서 특정 서버를 우선적으로 선택하도록 우선순위를 설정할 수 있습니다. 이를 위해 각 멤버의 group_replication_member_weight 시스템 변수를 설정하여 우선순위를 지정합니다. 이 변수는 0에서 100까지의 값을 가지며, 값이 높을수록 우선순위가 높습니다. 예를 들어, 특정 서버의 우선순위를 높이려면 해당 서버에서 다음과 같이 설정합니다:

SET GLOBAL group_replication_member_weight = 90;

이 설정을 통해 주 노드 장애 시 지정된 우선순위에 따라 새로운 주 노드가 선출됩니다. 단, 모든 멤버의 우선순위가 동일한 경우, 기본 선출 알고리즘에 따라 주 노드가 선택됩니다. 따라서, 각 멤버의 역할과 중요도에 따라 적절한 우선순위를 설정하는 것이 중요합니다.

16. PFS: 계측된 스레드

[원본제공링크 1 2]

MySQL의 Performance Schema(PFS)는 서버의 성능을 모니터링하고 분석하기 위한 도구로, 서버 내의 각 스레드에 대한 상세한 정보를 제공합니다. 이를 통해 각 스레드의 상태, 리소스 사용량, 대기 이벤트 등을 모니터링하여 성능 최적화와 문제 해결에 활용할 수 있습니다. 특히, threads 테이블은 현재 활성화된 모든 스레드에 대한 정보를 담고 있으며, 각 스레드의 INSTRUMENTED 컬럼을 통해 해당 스레드의 계측 여부를 확인할 수 있습니다. 계측된 스레드의 이벤트는 Performance Schema의 다양한 이벤트 테이블에 기록되어 상세한 분석이 가능합니다. 이를 통해 시스템의 병목 현상이나 비효율적인 스레드 동작을 식별하고, 성능 개선을 위한 근거를 마련할 수 있습니다. Group Replication에서 중요한 역할을 하는 스레드(예: 복제 수행 스레드나 통신 스레드 등)에 대해 계측 정보를 수집하여 성능 최적화 및 문제 해결에 활용할 수 있습니다.

17. PFS: 계측된 뮤텍스와 조건 변수

[원본제공링크 1 2]

MySQL의 Performance Schema(PFS)는 서버의 성능을 모니터링하고 분석하기 위한 도구로, 뮤텍스(mutex)와 조건 변수(condition variable)의 계측을 지원합니다. 이를 통해 동시성 제어 메커니즘의 사용 현황을 모니터링하고, 잠재적인 병목 현상을 식별하여 성능 최적화에 활용할 수 있습니다. 특히, mutex_instancescond_instances 테이블은 각각 뮤텍스와 조건 변수의 인스턴스 정보를 제공하며, events_waits_current 테이블은 현재 대기 중인 이벤트에 대한 정보를 담고 있습니다. 이를 통해 각 뮤텍스와 조건 변수의 대기 시간, 대기 횟수 등을 분석하여 시스템의 동시성 제어 성능을 향상시킬 수 있습니다.

그룹 복제 관련 뮤텍스
Applier Thread Mutexes
Group Communication Mutexes
Transaction Coordination Mutexes

18. PFS: 메시지 캐시에 사용된 계측된 메모리

[원본제공링크 1 2]

MySQL 8.0의 Performance Schema(PFS)는 서버의 메모리 사용을 모니터링하고 분석하는 도구로, 다양한 내부 버퍼와 캐시의 메모리 소비를 추적합니다. 특히, memory/performance_schema/로 시작하는 계측기를 통해 Performance Schema 자체의 메모리 사용량을 모니터링할 수 있습니다. MySQL Group Replication은 멤버 간 통신 및 트랜잭션 복제를 위해 메시지 캐시(Message Cache)를 사용합니다. 이 캐시는 트랜잭션 데이터와 그룹 멤버 간의 메시지를 저장하며, 특히 대규모 트랜잭션이나 많은 메시지를 처리할 때 메모리 사용량이 증가할 수 있습니다. Performance Schema(PFS)를 활용하여 메시지 캐시의 메모리 소비를 계측하고 모니터링하면, Group Replication의 안정성과 성능을 유지하는 데 유용합니다.

19. GR에서 대용량 트랜잭션 지원 개선

[원본제공링크 1 2]

MySQL Group Replication은 대규모 트랜잭션을 안정적으로 처리하기 위해 여러 기능을 개선했습니다.
1. 메시지 단편화(Fragmentation)로 대형 메시지 처리 안정성을 향상.
2. 트랜잭션 크기 제한을 통해 과도한 자원 소비 방지.
3. 메시지 압축으로 네트워크 대역폭 최적화.
4. 멤버 추방 기준 조정을 통해 대형 트랜잭션 중단 방지.
이 설정은 네트워크 성능과 데이터 일관성을 유지하면서 대규모 트랜잭션 처리를 돕습니다.

20. GR 통신 프로토콜 구성 가능

[원본제공링크 1 2]

MySQL Group Replication은 멤버 간 통신을 위한 프로토콜을 설정할 수 있는 기능을 제공합니다. 이를 통해 그룹 내 다양한 MySQL 버전 간의 호환성을 유지하고, 통신 효율성을 최적화할 수 있습니다. 주요 설정 방법으로는 group_replication_set_communication_protocol() 함수를 사용하여 원하는 프로토콜 버전을 지정하는 것이 있습니다.

21. EXIT STATE ACTION 기본값을 READ_ONLY로 변경

[원본제공링크 1]

group_replication_exit_state_action 시스템 변수의 기본값이 ABORT_SERVER에서 READ_ONLY로 변경되었습니다. 이로 인해 멤버가 그룹에서 비정상적으로 탈퇴할 경우, 서버는 종료되지 않고 읽기 전용 모드로 전환되어 가용성이 향상됩니다.

22. 그룹 멤버의 자동 재가입 지원

[원본제공링크 1 2]

MySQL Group Replication은 멤버가 네트워크 문제나 일시적인 장애로 그룹에서 탈퇴한 후 자동으로 재가입할 수 있는 기능을 제공합니다. 이를 통해 관리자의 개입 없이도 그룹의 안정성과 가용성을 유지할 수 있습니다. 이 기능은 group_replication_autorejoin_tries 시스템 변수를 통해 설정되며, MySQL 8.0.21부터 기본값은 3으로 설정되어 있습니다.

23. 그룹 복제를 위한 새로운 격리 모드: OFFLINE_MODE

[원본제공링크 1 2]

MySQL 8.0.18부터 Group Replication에 OFFLINE_MODE라는 새로운 격리 모드가 도입되었습니다. 이 모드는 멤버가 그룹에서 비정상적으로 탈퇴할 경우, 서버를 오프라인 모드로 전환하여 모든 클라이언트 연결을 종료하고 새로운 연결을 차단합니다. 이를 통해 데이터 일관성을 유지하면서도 서버의 가용성을 관리할 수 있습니다.

24. 그룹 복제에서 자동 인스턴스 복제를 통한 분산 복구

[원본제공링크 1]

MySQL 8.0.17부터 Group Replication은 분산 복구 시 자동 인스턴스 클로닝 기능을 도입하여, 새로운 멤버가 그룹에 합류할 때 기존 멤버의 데이터를 효율적으로 복제할 수 있습니다. 이를 통해 수동 백업 및 복원 과정 없이도 빠르고 일관된 데이터 동기화가 가능합니다.

25. 그룹 복제의 향상된 버전 간 상호 운용성

[원본제공링크 1]

MySQL Group Replication은 다양한 버전의 서버 간 호환성을 개선하여, 업그레이드 과정에서의 유연성과 안정성을 높였습니다. 이를 통해 그룹 내 서로 다른 버전의 멤버들이 원활하게 상호 작용할 수 있으며, 업그레이드 시 서비스 중단을 최소화할 수 있습니다.

26. 그룹 커뮤니케이션 시스템(GCS/XCom)에서 TLS 1.3 지원

[원본제공링크 1 2]

MySQL 8.0.18부터 Group Replication의 그룹 통신 시스템(GCS/XCom)이 TLS 1.3을 지원합니다. 이를 통해 멤버 간 통신의 보안성이 향상되었으며, 최신 암호화 알고리즘을 활용할 수 있게 되었습니다. TLS 1.3을 사용하려면 서버가 OpenSSL 1.1.1 이상 버전으로 컴파일되어야 하며, tls_versiontls_ciphersuites 변수를 적절히 설정해야 합니다.

27. 그룹 전송 메시지 서비스

[원본제공링크 1]

MySQL 8.0.18부터 도입된 그룹 전송 메시지 서비스는 그룹 복제 내에서 플러그인 간의 메시지 송수신을 지원합니다. 이를 통해 그룹 내 모든 멤버에게 사용자 정의 메시지를 전달하거나 수신할 수 있으며, 플러그인 간의 통신을 효율적으로 관리할 수 있습니다. 메시지는 태그를 통해 식별되며, 송신자와 수신자는 메시지의 인코딩 및 디코딩을 담당합니다.

28. group_replication_message_cache_size의 최소값 하향 조정

[원본제공링크 1]

MySQL 8.0.21부터 group_replication_message_cache_size의 최소값이 1GB에서 128MB로 낮아졌습니다. 이를 통해 메모리가 제한된 환경에서도 그룹 복제를 효율적으로 구성할 수 있습니다. 그러나 캐시 크기를 너무 작게 설정하면 네트워크 불안정 시 멤버 재연결에 어려움이 발생할 수 있으므로 주의가 필요합니다.

29. group_replication_autorejoin_tries의 기본값 증가

[원본제공링크 1]

MySQL 8.0.21부터 group_replication_autorejoin_tries의 기본값이 0에서 3으로 증가했습니다. 이로 인해 그룹에서 일시적으로 탈퇴한 멤버는 관리자의 개입 없이 최대 3회 자동으로 재가입을 시도하게 되어, 그룹의 가용성과 안정성이 향상되었습니다.

30. group_replication_member_expel_timeout의 기본값 증가

[원본제공링크 1]

MySQL 8.0.21부터 group_replication_member_expel_timeout의 기본값이 0초에서 5초로 증가했습니다. 이로 인해 멤버가 의심 상태로 전환된 후 추방되기까지의 총 대기 시간이 5초에서 10초로 늘어나, 일시적인 네트워크 지연이나 장애로 인한 불필요한 멤버 추방을 줄이고 그룹의 안정성을 향상시킵니다.

31. GR 분산 복구 시 사용되는 IP 및 포트 지정 가능

[원본제공링크 1]

MySQL 8.0.21부터 group_replication_advertise_recovery_endpoints 시스템 변수를 통해 그룹 복제의 분산 복구 시 사용되는 IP 주소와 포트를 명시적으로 지정할 수 있습니다. 이를 통해 복구 트래픽을 별도의 네트워크 인터페이스로 분리하여 네트워크 효율성과 보안을 향상시킬 수 있습니다.

32. 중요한 GR 로그 메시지를 시스템 메시지로 분류

[원본제공링크 1]

MySQL 8.0.21부터 그룹 복제(Group Replication)의 주요 이벤트 로그 메시지가 시스템 메시지로 재분류되었습니다. 이로 인해 로그 레벨 설정과 관계없이 이러한 메시지가 항상 에러 로그에 기록되어, 관리자가 그룹의 주요 이벤트를 지속적으로 모니터링할 수 있게 되었습니다.

33. START GROUP_REPLICATION 명령어에서 파라미터로 자격 증명 지원

[원본제공링크 1]

MySQL 8.0.21부터 START GROUP_REPLICATION 명령어에서 USER, PASSWORD, DEFAULT_AUTH 옵션을 통해 분산 복구 시 사용할 사용자 인증 정보를 직접 지정할 수 있습니다. 이를 통해 보안이 강화되며, 복구 채널의 설정을 단순화할 수 있습니다. 단, 이러한 방식으로 지정된 인증 정보는 서버 재시작 시 유지되지 않으므로, 자동 시작 설정과 함께 사용할 수 없습니다.

34. GR에서 바이너리 로그 체크섬 지원 추가

[원본제공링크 1]

MySQL 8.0.21부터 그룹 복제(Group Replication)는 바이너리 로그 체크섬을 지원합니다. 이로 인해 데이터 무결성이 향상되었으며, 별도의 설정 없이 기본값인 binlog_checksum=CRC32를 사용할 수 있습니다. 이전 버전에서는 binlog_checksum=NONE으로 설정해야 했습니다.

Leave a Comment



이 문서 공유

MySQL 8.0에서 추가된 모든 기능 – 그룹 복제

링크 복사

CONTENTS