galera cluster 갈레라 클러스터
# 갈레라 클러스터란?
Galera Cluster, 갈레라 클러스터는 동기방식으로 데이터를 복제한다.
함께 묶여있는 클러스터 노드 중에 한군대에 업데이트가 발생하면 데이터를 쓰기 전에 다른 노드에 복제 요청을 보내고 모두 OK 응답을 받았을 때 데이터를 저장한다.
# 동작 방식
(1) 인증 기반 복제 작동 방식
MySQL-wsrep는 MySQL의 InnoDB스토리지 엔진 내부에서 Write Set(기록 집합 : 트랜잭션의 기록하는 모든 논리적인 데이터 집합)을 추출하고 적용된다. 노드 간 Write Set을 전송 및 통신을 위해서는 별도의 리플리케이션 플러그인을 사용하며, 리플리케이션 엔진은 wsrep에 정의된 Call/Callback 함수에 따라 동작한다.
인증 기반 복제는 일반적으로 트랜잭션이 충돌이 없다는 가정 하에 커밋에 도달할 때까지 실행된다. 이를 optimistic execution이라고 한다.
- 실제 커밋이 발생하기 전에 클라이언트가 commit 명령을 실행할 때, 데이터베이스의 모든 변경 사항트랜잭션 및 변경된 행의 기본 키는 write-set으로 수집 된다.
- 데이터베이스가 다른 모든 노드에 대해 write-set 메시지를 보낸다.
- 각 노드에서 기본키를 사용하여 write-set 가질 수 있는지 인증을 거친다
- 인증 테스트가 실패하면 노드가 write-set을 삭제하고 클러스터가 원래 트랜잭션을 롤백한다. 그러나 트랜잭션이 commit 되면 기록 집합이 클러스터의 나머지 부분에 적용한다.
(2) Galera 클러스터에서의 인증 기반 복제
Galera 클러스터에서 인증 기반 복제의 구현은 트랜잭션의 글로벌 순서에 따라 달라진다.
- Galera 클러스터는 복제 중에 각 트랜잭션에 글로벌 시퀀스 번호(seqno)를 할당한다
- 트랜잭션이 커밋 지점에 도달하면 노드는 마지막으로 성공한 트랜잭션과 시퀀스 번호를 비교한다.
- 모든 트랜잭션은 기본 키와 충돌하는지 확인하고, 충돌이 감지되면 인증 테스트가 실패한다.
모든 복제본은 동일한 순서로 트랜잭션을 수신하기 때문에 모든 노드는 트랜잭션 결과가 같다.
# 앤서블 설치
sudo apt update
sudo apt install -y software-properties-common
sudo apt-add-repository -y -u ppa:ansible/ansible
sudo apt install -y ansible
#쉘 자동완성
sudo apt install -y python3-argcomplete
sudo activate-gloval-python-argcomplete3
#문법 체크
sudo apt install -y ansible-lint
exec bash
# 들여쓰기
vi ~/.vimrc
syntax on
autocmd FileType yaml setlocal ts=2 sts=2 sw=2 expandtab autoindent
web1 ,web2,db1,db2 설정
# sudo -i
# sudo apt update
# sudo apt install -y openssh-server
# apt install vim
# vim /etc/ssh/sshd_config -> PermitRootLogin, PasswordAuthentication yes
# systemctl restart ssh / sshd
# sudo passwd
ans_main -> 192.168.100.69
db-1 → 192.168.100.107
db-2 → 192.168.100.130
web-1 → 192.168.100.92
web-2 → 192.168.100.52
# git clone https://github.com/DO-du/ansible-terraform.git
/etc/mysql/mariadb.conf.d/50-server.cnf
task 핸들러 mariadb
# ansible-playbook wpsite.yaml
ssh-keygen
ssh-copy-id local,web,db 전부
db 복제 -> db3
192.168.100.73
ssh-copy-id 102.168.100.73
mysql -u root -p
확인
# 앤서블 설치
sudo apt update
sudo apt install -y software-properties-common
sudo apt-add-repository -y -u ppa:ansible/ansible
sudo apt install -y ansible
#쉘 자동완성
sudo apt install -y python3-argcomplete
sudo activate-gloval-python-argcomplete3
#문법 체크
sudo apt install -y ansible-lint
exec bash
# 들여쓰기
vi ~/.vimrc
syntax on
autocmd FileType yaml setlocal ts=2 sts=2 sw=2 expandtab autoindent
web1 ,web2,db1,db2 설정
# sudo -i
# sudo apt update
# sudo apt install -y openssh-server
# apt install vim
# vim /etc/ssh/sshd_config -> PermitRootLogin, PasswordAuthentication yes
# systemctl restart ssh / sshd
# sudo passwd
ans_main -> 192.168.100.69
db-1 → 192.168.100.107
db-2 → 192.168.100.130
web-1 → 192.168.100.92
web-2 → 192.168.100.52
# git clone https://github.com/DO-du/ansible-terraform.git
/etc/mysql/mariadb.conf.d/50-server.cnf
task 핸들러 mariadb
# ansible-playbook wpsite.yaml
ssh-keygen
ssh-copy-id local,web,db 전부
db 복제 -> db3
192.168.100.73
ssh-copy-id 102.168.100.73
mysql -u root -p
확인
# galera cluster 설치
각 db에서 설정
# vi /etc/mysql/mariadb.conf.d/galera.cnf
[mysqld] bind-address=0.0.0.0
default_storage_engine=InnoDB
binlog_format=row
innodb_autoinc_lock_mode=2
# Galera cluster configuration
wsrep_on=ON
wsrep_provider=/usr/lib/galera/libgalera_smm.so wsrep_cluster_address="gcomm://192.168.100.107,192.168.100.130,192.168.100.73,"
wsrep_cluster_name="mariadb-galera-cluster"
wsrep_sst_method=rsync
# Cluster node configuration
wsrep_node_address="192.168.100.107"
wsrep_node_name="galera-db-01"
# sudo systemctl stop mariadb
# galera_new_cluster
# mysql -u root -p
mysql>>show status like 'wsrep_cluster_size';
공유 되는지 확인
mysql -u root -p
create database db1;