오늘은 실험적인 포스팅을 하려고 한다.
mariadb galera다.
사실 aws에 galera를 셋팅하는것은…RDS때문에 아이러니한 선택일수 있으나,
온프레미스에서 쉽사리 셋팅하기 어려운 구성인 galera를 테스트 해보기로 하였다.
사실 이글을 쓰는 지금은 이미..블로그가 galera 위에서 돌고있다.
준비물을 챙겨보자.
galera의 구성에는 multi-AZ를 위한 여러개의 서브넷이 필요하다.
한국리전의 A/B/C zone 을 모두 사용한다.
그리고 인스턴스를 생성한다.
인스턴스는 t3.nano를 활용하였다. 사용자가 많지 않아서 nano로 버틸수 있을거라 생각했다.
이과정에서 인스턴스만 5번이상을 만들었다 지웠다를 반복했는데 그이유는 B영역 때문이었다. 처음엔 t2.nano를 사용하려했으나 B영역에서 not support 발생으로 평소 사용해보고 싶었던 t3a 계열을 사용해 보려고 했으나, 마찬가지로 not support상태.. 결국 돌아서 t3.nano를 사용하게 되었다.
사용한 ami는 amazon linux 2 다.
인스턴스 생성후 보안 그룹은 따로 galera-sg를 생성하여 galera 인스턴스 끼리는 통신이 되도록 설정하고 웹서버 내부 IP로 3306만 열어 주었다.
인스턴스 셋팅할때는 EIP를 붙이고 작업하였다.
galera 셋팅은 아래와 같다.
#vi /etc/yum.repos.d/mariadb.repo
아래내용 삽입
설치할 mariadb 는 10.4 버전이다.
#MariaDB 10.4 CentOS repository list - created 2019-09-10 11:12 UTC
#http://downloads.mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.4/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
:wq 후에 정상적으로 repo를 생성했다면 아래 설치명령어가 정상적으로 작동한다.
#yum install MariaDB-server MariaDB-client
정상적으로 설치가 되면 아래 패키지가 설치된다. yum.log에서 확인했다.
Sep 10 11:37:04 Installed: perl-Data-Dumper-2.145-3.amzn2.0.2.x86_64
Sep 10 11:37:04 Installed: MariaDB-common-10.4.7-1.el7.centos.x86_64
Sep 10 11:37:05 Installed: MariaDB-compat-10.4.7-1.el7.centos.x86_64
Sep 10 11:37:05 Installed: boost-program-options-1.53.0-27.amzn2.0.3.x86_64
Sep 10 11:37:06 Installed: galera-4-26.4.2-1.rhel7.el7.centos.x86_64
Sep 10 11:37:06 Installed: perl-Compress-Raw-Bzip2-2.061-3.amzn2.0.2.x86_64
Sep 10 11:37:06 Installed: ncurses-compat-libs-6.0-8.20170212.amzn2.1.2.x86_64
Sep 10 11:37:08 Installed: MariaDB-client-10.4.7-1.el7.centos.x86_64
Sep 10 11:37:08 Installed: perl-Net-Daemon-0.48-5.amzn2.noarch
Sep 10 11:37:08 Installed: 1:perl-Compress-Raw-Zlib-2.061-4.amzn2.0.2.x86_64
Sep 10 11:37:08 Installed: perl-IO-Compress-2.061-2.amzn2.noarch
Sep 10 11:37:08 Installed: perl-PlRPC-0.2020-14.amzn2.noarch
Sep 10 11:37:08 Installed: perl-DBI-1.627-4.amzn2.0.2.x86_64
Sep 10 11:37:25 Installed: MariaDB-server-10.4.7-1.el7.centos.x86_64
설치가 완료되면 클러스터 설정을 한다.
#vi /etc/my.cnf.d/server.cnf
간단하게 테스트하기 위해 아래내용을 붙여 넣어도 좋다.
[mysql]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
bind-address=0.0.0.0
user=mysql
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
innodb_flush_log_at_trx_commit=0
innodb_buffer_pool_size=128M
binlog_format=ROW
log-error=/var/log/mysqld.logdatadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
bind-address=0.0.0.0
user=mysql
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
innodb_flush_log_at_trx_commit=0
innodb_buffer_pool_size=128M
binlog_format=ROW
log-error=/var/log/mysqld.log
같은파일 하단에 [galera] 탭에 아래 내용을 설정한다.
[galera]
wsrep_on=ON
wsrep_provider=/usr/lib64/galera-4/libgalera_smm.so
wsrep_node_name='galera1'
wsrep_node_address="10.0.4.27"
wsrep_cluster_name='linuxer-galera'
wsrep_cluster_address="gcomm://10.0.4.9,10.0.4.27,10.0.4.43"
wsrep_provider_options="gcache.size=300M; gcache.page_size=300M"
wsrep_slave_threads=4
wsrep_sst_method=rsync
여기서 수정할 내용은
wsrep_node_name='galera1'
wsrep_node_address="10.0.4.27"
wsrep_cluster_address="gcomm://10.0.4.9,10.0.4.27,10.0.4.43"
이 세부분이다. node name 은 노드를 분류할 이름으로 나는 galera1/2/3으로 넣었다.
address 는 IP 인스턴스 각각 내부 IP를 넣어주고 클러스터 address는 클러스터 node address 를 나열한다.
여기까지 완료됬다면 galera 기본설정은 완료이다.
새로 만드는 클러스터일경우
#galera_new_cluster
명령어를 쳐주자. 이미 사용중이던 db를 클러스터로 만든다면 각각 mysql data를 클론뜨거나 dump 하여 데이터의 무결성을 검증할수 있도록 만들어준다음 클러스터로 엮어야한다.
이후 NLB를 추가하여
사용한 A/B/C 영역을 넣어주었고, 대상그룹에 galera cluster 를 넣어주었다.
상태가 healthy로 정상적으로 상태검사를 통과하는것을 확인할수 있었다.
이부분에서 확인할수 있었는데 상태검사를 통과하기 위해선 galera 보안그룹에 NLB가 위치한 subnet의 포트에 대해서 인바운드를 허용해 주어야지만 상태검사가 정상적으로 이루어 지는것을 확인하였다.
나는 이후에 NLB end point 로 rds 에서 db를 dump 하여 부어넣었다.
#mysqldump -h linuxer-blog-rds.com -u user -p DB > /home/linuxer-blog-db.sql
덤프후에 galrera cluster 로 접근하여 grant 권한을 웹서버에 맞춰서 설정해 주었다.
mysql>GRANT ALL PRIVILEGES ON db.* TO user@webserver_internal_ip IDENTIFIED BY 'password';
이후에 웹서버에서 밀어 넣었다.
mysql -h linuxer-galera-nlb.com -u user -p < /home/linuxer-blog-db.sql
Enter password:
정상적으로 데이터를 복구하였고 이후에 디비커넥션을 수정하여 rds 에서 galera로 접속되도록 설정하였다.
rds t2.micro
mariadb galera
평균 0.20s 정도 불러오는 속도 차이가 난다.
일주일간 galera cluster를 유지할 생각이다.
galera cost
rds cost
9$정도의 차이이며 아직 file over 테스트는 진행하지 않았다.
multi-AZ활성화 시에 rds 비용이 추가되는것을 생각하면 큰비용은 아니라 생각되지만..기본적으로 multi-AZ로 구성되는 galera의 경우엔 어떤것이 좋다 나쁘다는 아직 결정할수 있느 근거가 부족하였다.
일주일간의 시험테스트와 트러블슈팅 튜닝을 진행하면서 추가 포스팅을 진행하겠다. 읽어 주셔서 감사하다!
포스팅이 슬슬 마르기 시작한 이 시험에 흥미로운 주제를 만들어 주신 바다진주님께 감사를 드린다!
The EC2 instances gives you more versatility to run other services on them. Additionally, you could use HAProxy as load balancers and KeepAlive to reduce the Amazon ELB $16.47 cost.