오늘 포스팅은 db 이중화에 사용되는 galera를 설치해보겠습니다.
galera는 database 동기화에 사용되는 서비스입니다.
각각의 노드를 묶어서 동기화를 수행합니다.
한 노드에 삽입/수정/삭제를 하면 모든 노드에 적용됩니다.
설치방법에 대해 알아보겠습니다.
3대의 장비를 galera로 설정 해보겠습니다.
저는 3대의 장비를 centos7.3 64bit로 설치했고, 소프트웨어 선택은 인프라서버-개발용도구로 설정했습니다.
또한, yum을 사용, rpm 다운로드를 위해서 인터넷이 되는 환경으로 세팅을 해뒀습니다.
설정, 설치법은 아래와 같습니다.
1. selinux 해제, 방화벽해제
-장비끼리 통신을 하기 위해서 아래의 작업을 수행합니다.
1) selinux 해제
]# vi /etc/selinux/config
...
SELINUX=disabled
...
2) 방화벽 해제
]# systemctl stop firewalld
]# systemctl disable firewalld
3) 리부팅
]# reboot
2. Maria DB, galera, rsync 패키지 설치
-galera를 사용하기 위해서 필요한 패키지를 설치합니다.
MariaDB 버젼은 10.3 버젼을 사용합니다.
데이터 복제용으로 rsync를 사용합니다.
Mariadb를 설치 하기 위해서는 yum repository를 설정하여 다운을 받습니다.
1) yum 설정
]# vi /etc/yum.repos.d/MariaDB.repo
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.3/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
2) yum으로 설치
]# yum -y install mariadb-server galera rsync
3. galera cluster 설정
-설정은 3대의 장비 똑같이 맞춰줍니다.
]# vi /etc/my.cnf.d/server.cnf
장비 #1
...
[galera]
# Mandatory settings
wsrep_on=ON
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_cluster_address='gcomm://장비#1IP,장비#2IP,장비#3IP'
wsrep_node_address='장비#1IP'
wsrep_node_name='장비#1hostname'
wsrep_sst_method=rsync
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
#
# Allow server to accept connections on all interfaces.
#
bind-address=0.0.0.0
장비 #2
...
[galera]
# Mandatory settings
wsrep_on=ON
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_cluster_address='gcomm://장비#1IP,장비#2IP,장비#3IP'
wsrep_node_address='장비#2IP'
wsrep_node_name='장비#2hostname'
wsrep_sst_method=rsync
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
#
# Allow server to accept connections on all interfaces.
#
bind-address=0.0.0.0
장비 #3
...
[galera]
# Mandatory settings
wsrep_on=ON
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_cluster_address='gcomm://장비#1IP,장비#2IP,장비#3IP'
wsrep_node_address='장비#3IP'
wsrep_node_name='장비#3hostname'
wresp_sst_method=rsync
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
#
# Allow server to accept connections on all interfaces.
#
bind-address=0.0.0.0
...
4. mysql 실행
1번 장비는 아래의 명령어로 실행합니다.
]# galera_new_cluster
2,3번 장비는 mariadb 실행를 실행합니다.
]# systemctl start mariadb
5. mariadb 상태 확인
]# mysql
*명령어 복사를 할 경우, '<- 따옴표가 `<-이걸로 복사되니 주의하시기 바랍니다.
MariaDB [(none)]> show status like 'wsrep_cluster_size';
+--------------------+-------+
| Variable_name | Value |
+--------------------+-------+
| wsrep_cluster_size | 3 |
+--------------------+-------+
1 row in set (0.001 sec)
MariaDB [(none)]> show status like 'wsrep_incoming_addresses';
+--------------------------+-------------------------------------------------+
| Variable_name | Value |
+--------------------------+-------------------------------------------------+
| wsrep_incoming_addresses | 장비#1IP:3306,장비#2IP:3306,장비#3IP:3306 |
+--------------------------+-------------------------------------------------+
1 row in set (0.000 sec)
-위와 같이 나오면 3대의 장비가 정상적으로 구성된 것입니다.
6. db 동기화 확인
장비#1 로 접속합니다.
]#mysql
MariaDB [(none)]> CREATE DATABASE galera_test;
Query OK, 1 row affected (0.310 sec)
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| galera_test |
| information_schema |
| mysql |
| performance_schema |
| test |
+--------------------+
5 rows in set (0.000 sec)
장비 #2, #3로 접속합니다
]# mysql
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| galera_test |
| information_schema |
| mysql |
| performance_schema |
| test |
+--------------------+
5 rows in set (0.000 sec)
장비 #1에서 Database를 추가한 후, 장비 #2, #3에서 확인 해보면 추가된 Database 를 확인할 수 있습니다.
이상입니다.
감사합니다.