MariaDB Galera Cluster Variables #1
1. MariaDB Galera Cluster Variables
wsrep_auto_increment_control
wsrep_causal_reads
wsrep_certify_nonPK
wsrep_cluster_address
wsrep_cluster_name
wsrep_convert_LOCK_to_trx
이 문서는 위 Variables 에 대해 다루고 있다.
테스트에 사용한 MariaDB 는 5.5.39 이며, wsrep_provider_version 은 내장되어
있던 25.3.5(r178) 를 사용하였다.
문서에서 언급 한 각 Variables 의 default, Introduced, deprecated 의 정보는 8.A 를 확인한 내용이며, 이는 wsrep API patch v0.8 를 기준으로 한다.
2. wsrep_auto_increment_control
Default = on
Introduced = 1
Cluster membership 에 변화가 있을 때
auto_increment_increment 와 auto_increment_offset system variables 을 자동으로 조정한다.
Cluster Membership 의 변화란 클러스터를 구성하는 노드에 변화가 있어 클러스터 사이즈가 커지거나 작아지는 경우를 말한다.
계획 된 작업으로 신규 노드를 추가하는 일도, 장애가 발생해 노드가 클러스터 구성에서 빠지는 일도 Cluster Membership 의 변화이다.
wsrep_auto_increment_control = on 사용으로 INSERT 구문으로 인한 충돌을 줄여준다고 한다.
여기서 말하는 충돌은 MariaDB 의 Duplicate entry 에러를 의미하며, pk 로 auto_increment 를 사용하는 경우를 말한다.
auto_increment_increment
Default = (wsrep_cluster_size)
auto_increment_offset
Default = (Cluster 를 구성하는 노드 1, 2, 3, … 순차적으로 값을 가져간다.)
위의 두 파라미터는 Galera cluster 이전에도 존재하던 Variables 이다.
특히 매뉴얼을 보면 MASTER – TO MASTER Replication (DUAL MASTER) 셋팅에서 사용한다고 한다.
3 node Galera Cluster 를 구성하면 다음과 같이 System Variable 값을 가져간다. ( wsrep_auto_increment_control = on )
전 노드 공통으로 auto_increment_increment = 3
각 노드는 auto_increment_offset = [1|2|3]
auto_increment_offset 의 값이 auto_increment_increment 의 값보다 큰 경우 auto_increment_offset 의 값은 무시되며,
이외의 경우 auto_increment 의 기대되는 값은 다음의 공식을 따른다.
(현재의 auto_increment 보다 큰 가장 작은 값 ) = auto_increment_offset + N * auto_increment_increment
wsrep_auto_increment_control = on 을 사용하는 3 NODE CLUSTER 에서 A 라는 테이블이 AUTO_INCREMENT 를 사용하는 B 라는 컬럼을 가진다고 가정하자.
A 테이블의 B 컬럼의 AUTO_INCREMENT 로 할당 된 가장 큰 값이 20 이라고 할 때 기대되는 다음 AUTO_INCREMENT 는 다음과 같다.
auto_increment_increment = 3
auto_increment_offset = 1
ð 22
auto_increment_increment = 3
auto_increment_offset = 2
ð 23
auto_increment_increment = 3
auto_increment_offset = 3
ð 24
결과적으로 auto_increment_offset = on 의 사용으로 AUTO_INCREMENT 를 PKEY 로 사용하는 경우에 대해
INSERT 시 DUPLICATE ENTRY 에러를 줄일 수 있다.
3. wsrep_causal_reads
Default = off
Introduced = 1
Deprecated = 3.6
이 기능은 3.6 에서 deprecated 되었으며, wsrep_sync_wait 로 대체되었다.
wsrep_sync_wait
Introduced = 3.6
아래 값을 지정하면 해당하는 오퍼레이션을 수행하기 전에 동기화 된 읽기 view 를 보장한다.
1 – SELECT, SHOW, BEGIN / START TRANSACTION 을 포함한 READ Statement 를 검사
2 – UPDATE, DELETE statements 를 검사
3 – 1, 2 를 포함한다.
4 – INSERT, REPLACE statement 를 검사
4. wsrep_certify_nonPK
Default = on
Introduced = 1
wsrep_certify_nonPK = on 인 경우 PK 없는 테이블에 대해 DML 을 허용한다.
(내부적으로 pk 를 생성하는 듯 함 – 확인할 것…)
wsrep_certify_nonPK = off 인 경우 PK 없는 테이블에 DML 을 사용하는 경우 다음과 같은 에러가 발생한다.
ERROR 1213 (40001): Deadlock found when trying to get lock; try restarting transaction
5. wsrep_cluster_address
Cluster Membership 을 구성하는데 사용되는 System Variable 이다.
클러스터의 최초 노드를 구성하는 경우 gcomm:// 셋팅으로 startup 한다.
이 의미는 다른 클러스터 노드에 접속하지 않는다란 뜻이다.
이후 해당 vriable 을 클러스터를 구성하는 전 노드로 업데이트 한다.
A, B, C 라는 3개의 Address 가 있다고 하면 gcomm:// 셋팅으로 인스턴스를 시작한 이후,
gcomm://A,B,C 로 변경한다.
사실 위 과정 없이도 Joiner 노드의 올바른 wsrep_cluster_name 구성과 wsrep_cluster_address 구성이 있다면
startup 하는데 문제가 없다.
6. wsrep_cluster_name
Default = my_wsrep_cluster
Introduced = 1
Logical 한 Cluster name 을 지정한다.
Cluster name 이 다르면 Cluster Membership 참가가 실패한다.
이를 테면 Donor node 에서는 다음과 같은 에러가 발생하다 Joiner node 프로세스가 죽는다.
[Note] WSREP: handshake failed, my group: 'mariatest', peer group: 'my_wsrep_cluster'
이 Variable 셋팅으로 하나의 장비에 여러 서비스 목적의 Cluster 를 구성하는 경우나,
wsrep_cluster_address 를 실수로 잘못 지정한 경우에 데이터를 보호할 수 있다.
7. wsrep_convert_LOCK_to_trx
Default = off
Introduced = 1
LOCK / UNLOCK TABLES 를 BEGIN / COMMIT statements 로 바꿔준다.
암묵적으로 locking sessions 을 transactions 을 사용하도록 변환한다.
이 옵션이 off 인 상태에서는
NODE #1 – lock table test [ read | write ]
NODE #1 – Insert : Waiting
NODE #2 – No Waiting
NODE #3 – No Waiting
on 인 경우에는 같은 테스트에서 NODE #1 에서의 Insert : Waiting 이 없다.
8. REFERENCE
A.
wsrep 파라미터
http://galeracluster.com/documentation-webpages/mysqlwsrepoptions.html
B.
mariadb 파라미터
https://mariadb.com/kb/en/mariadb/documentation/optimization-and-tuning/system-variables/server-system-variables/
C.
wsrep_auto_increment_control
http://www.percona.com/blog/2011/01/12/conflict-avoidance-with-auto_increment_incremen-and-auto_increment_offset/
D.
16.1.2.2
Replication Master Options and Variables
http://dev.mysql.com/doc/refman/5.0/en/replication-options-master.html
E.
Bootstrapping
the cluster
http://www.percona.com/doc/percona-xtradb-cluster/5.5/manual/bootstrap.html