ID 값을 숫자가 아닌 다양한 방식으로 저장하고 싶은 경우 사용합니다. Thread-safety 하게 ID를 발급 받을 수 있으며, AUTO_INCREMENT 대신 사용할 수 있습니다. Sequence는 값을 캐시하므로 경우에 따라 AUTO_INCREMENT 보다 빠를 수 있다고 합니다.
#시작값이 1이고 1씩 증가하는 "my_seq" Sequence를 생성
CREATE SEQUENCE my_seq START WITH 1 INCREMENT BY 1;
2) NEXTVAL
# 다음 sequence를 반환한다.
# 처음 생성 한 것이면 start 값을 반환
# thread-safety
SELECT NEXTVAL(my_seq);
3) LASTVAL
# 현재 sequence를 반환
# NEXTVAL을 한번도 실행시키지 않았다면 NULL 반환
SELECT LASTVAL(my_seq);
4) Sequence 초기화
# my_seq Sequence를 1로 초기화 한다.
# nextval를 실행하지 않은 상태로 lastval를 실행하면 초기화 전 값이 반환된다.
# 즉 한번이라도 nextval을 실행해야지 sequence가 초기화된다.
ALTER SEQUENCE my_seq RESTART 1;
safe_to_bootstrap 값이 1인 경우 마지막으로 죽은 노드를 의미하기 때문에 해당 기준 노드로 실행합니다.
galera_new_cluster
실행이 완료 되면 나머지 노드도 실행해줍니다.
systemctl start mariadb
여기까지 완료되었다면 모든 노드에서 MariaDB 로그인 후 연결된 노드 개수가 맞는지 확인합니다.
> show global status like 'wsrep_cluster_size';
각 노드에서 위 명령어 입력 시, 예상했던 노드 개수와 일치하지 않다면, 해당 노드는 동기화 상태가 아닐 확률이 높습니다. 이때, 사용하고 있는 DB의 테이블을 SELECT 해봅니다.
WSREP has not yet prepared node for application use
위와 같은 오류가 발생하면 동기화 상태가 아니므로 WSREP의 pc.bootstrap 옵션을 YES로 바꾸어주어야 합니다.
> SET GLOBAL wsrep_provider_options='pc.bootstrap=YES'; Query OK, 0 rows affected (0.000 sec)
위 옵션을 적용하고 나서 MariaDB를 옵션을 적용한 노드를 재시작해주어야 합니다. 재시작 후에 test_tb가 잘 조회되는지 확인해주고 show global status like 'wsrep_cluster_size'; 명령어를 입력하여 클러스터 사이즈가 3인지 확인해줍니다.
모든 복구가 완료되면 setenforce 1 명령어를 실행해줍니다.
8. gelera Cluster Test
테스트 환경
HostName
galera03
galera04
galera05
IP Address
192.168.152.143
192.168.152.144
192.168.152.145
OS
CentOS 7
CentOS 7
CentOS 7
MariaDB Version
MariaDB 10.4
MariaDB 10.4
MariaDB 10.4
테스트 설명
Case 1 로그 데이터 10만건 삽입 테스트
Case 2 새로운 노드 추가 및 동기화 테스트
Case 1 - 로그 데이터 10만건 삽입 테스트
테스트 방법
Java에서 Galera Cluster로 이중화된 galera03, galera04을 JDBC를 이용해 연결한다.