본문으로 바로가기

[Mysql] Galera 설치

category Database/Mysql 2020. 3. 17. 21:18
728x90
반응형

오늘 포스팅은 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 를 확인할 수 있습니다.

이상입니다.

감사합니다.

728x90
반응형

'Database > Mysql' 카테고리의 다른 글

[Mysql] InnoDB란  (0) 2020.05.13
[Mysql] JOIN 이란?  (0) 2020.04.22
[Mysql] GRANT, REVOKE란?  (0) 2020.04.08
[Mysql] DB, Table 생성 삭제 조회  (0) 2017.12.14
[Mysql]문자열 길이 구하기  (0) 2017.08.02