Master-Slave 구조 혹은 Write-Read 구조로 DB서버를 구성할 때 필요한 설정이 Replication(복제) 설정이다.
Master-Slave 구조냐 Write-Read 구조냐의 차이는 문장 하나로 나눠진다.
정보 : CentOS 7 운영체제에 MariaDB 10.3 버전
1. Master 서버 설정
1) server.cnf 수정
vi /etc/my.cnf.d/server.cnf
아래 내용을 추가한다.
# 데이터베이스 이중화설정 =======
[mysqld]
server_id=1
log-basename=masterdb
log-bin
# =======================
MariaDB 재시작
systemctl restart mariadb
2) 복제용 계정 생성 및 권한부여
mysql -uroot -p mysql
> create user '복제유저ID'@'HostIP' identified by 'Password';
> grant replication slave on *.* to '복제유저ID'@'HostIP' identified by 'Password';
> FLUSH PRIVILEGES;
3) Master Server 상태 확인
> show master status;
+------------------------+----------+----------------+--------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------------+----------+----------------+--------------------+
| masterdb-bin.000001 | 1607 | | |
+------------------------+----------+----------------+--------------------+
masterdb-bin.000001 값과 1607값을 기억!
> exit
방화벽 개방
firewall-cmd --permanent --zone=public --add-port=3306/tcp
2. Slave 서버 설정
1) server.cnf 수정
vi /etc/my.cnf.d/server.cnf
아래 내용을 추가한다.
# 데이터베이스 이중화설정 =======
[mysqld]
server_id=2
log-basename=masterdb
log-bin
report-host=slavedb
# ========================
MariaDB 재시작
systemctl restart mariadb
2) Master-Slave 연결 설정
mysql -uroot -p mysql
> show variables like 'server_id';
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| server_id | 2 |
+-----------------+-------+
> change master to master_host='Master IP', master_user='복제유저ID', master_password='Password', master_port=3306, master_log_file='masterdb-bin.000001', master_log_pos=1607, master_connect_retry=10;
> start slave;
> show slave status \G;
Slave_IO_State: Waiting for master to send event
Master_Host: Master IP
Master_User: 복제유저ID
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: masterdb-bin.000001
Read_Master_Log_Pos: 1607
Relay_Log_File: masterdb-relay-bin.000001
Relay_Log_Pos: 5830
Relay_Master_Log_File: masterdb-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
강조된 항목과 일치하는 지 확인
Slave_IO_Running과 Slave_SQL_Running 값이 반드시 Yes!
3. 이중화 여부 테스트
1) Master 서버에서 데이터베이스, 테이블 생성
-------------------------------------------------------------------------------------
# mysql -uroot -p mysql
> create database sync_db;
> use sync_db;
> create table users (id int(3) primary key, name varchar(20), country varchar(20));
> INSERT INTO users (id, name, country) VALUES (1, 'admin', 'Korea');
> select * from users;
-------------------------------------------------------------------------------------
2) Slave 서버에서 데이터 확인
mysql -uroot -p mysql
> show databases;
> use sync_db;
> show tables;
> select * from users;
Master 서버와 Slave 서버의 데이터가 동일한지 확인.
* Slave_SQL_RUNNING = NO 발생 시
SQL 연결이 끊어졌을 경우, Master DB에 넣은 데이터를 Slave가 가져오지 못함.
이러한 경우에는 Master DB의 데이터가져오는 행동을 스킵시켜야함.
set global sql_slave_skip_counter=1;
4. Slave 서버 Read Only 설정 (읽기모드)
1) 현재 MariaDB의 read_only 설정 확인
> show global variables like "%read_only%";
2) read_only 모드 설정
vi /etc/my.cnf.d/server.cnf
아래 내용 추가
#======Read_only 설정
[mysqld]
read_only
#================
3) 서버 설정 변경
> SET GLOBAL read_only = ON;
> FLUSH PRIVILEGES;
설정 변경여부 확인
> show global variables like "%read_only%";
'DB서버 > MariaDB' 카테고리의 다른 글
MariaDB 데이버베이스 백업 및 이동 (0) | 2021.06.08 |
---|---|
MariaDB 계정 생성·삭제·권한 관리 (0) | 2021.06.08 |