20150322

MariaDB 10 갤러라 클러스터 구축

MariaDB 10.0 + Galera 3개 노드로 멀티마스터 클러스터 구축. 주된 목적은 HA. 사이드카트 같은 자동 페일오버 편하게 가는거.

스펙: Ubuntu 14.04, MariaDB 10.0.17, galera-3 (wsrep provider). 3개 노드는 다른 가용영역에 뿌림.

부트스트랩 — 첫 노드만 galera_new_cluster 로 띄우고, 나머지는 일반 service 시작. wsrep_cluster_address 에 모든 노드 IP 넣어두면 자동으로 붙음.

[mariadb]
wsrep_on=ON
wsrep_provider=/usr/lib/galera/libgalera_smm.so
wsrep_cluster_address="gcomm://10.0.1.11,10.0.1.12,10.0.1.13"
wsrep_cluster_name="prod_cluster"
wsrep_node_address="10.0.1.11"
wsrep_node_name="db1"
binlog_format=ROW
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2

주의:
- 반드시 binlog_format=ROW 및 innodb_autoinc_lock_mode=2. STATEMENT 쓰면 wsrep 경고 뜸.
- auto_increment_increment / auto_increment_offset 은 자동으로 Galera가 관리함. 건드리지 말것.
- PK 없는 테이블은 갤러라에서 지원 불가. 모든 테이블 PK 있어야 함.

멀티마스터의 함정: 다른 노드에서 같은 row 건드리면 certification 실패로 커밋 시점에 deadlock found 에러. 재시도 로직 꼭 넣어야 함. 우리는 애플리케이션에서 라우팅을 한 노드에 고정(ProxySQL 앞단)해서 이 이슈 회피. 멀티마스터라기보다 HA용으로만 씀.

SST: 새 노드 올릴때 rsync 방식으로 전체 복제하는데 테이블 크면 오래 걸림. xtrabackup으로 바꾸면 nonblocking이라 훨씬 낫다. 설정은 wsrep_sst_method=xtrabackup-v2.

소감: 일반 master-slave보다 세팅이 좀 있지만 HA 관점에선 훨씬 편하다. 장애 발생시 수동 promote 안 해도 되는건 진짜 큼.

댓글 없음: