Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
J
joohanhong
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
JooHan Hong
joohanhong
Commits
de486174
Commit
de486174
authored
Mar 02, 2021
by
nuxer
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
DBMS Replication 구성
parent
ad39a229
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
391 additions
and
0 deletions
+391
-0
README.md
DBMS/DOCKER/SLAVE/README.md
+391
-0
No files found.
DBMS/DOCKER/SLAVE/README.md
0 → 100644
View file @
de486174
[
![logo
](
https://www.hongsnet.net/images/logo.gif
)
](https://www.hongsnet.net)
# MariaDB Slave의 Dockerize 구성
> 이미 DBMS Zone 시스템에 Dockerize MariaDB가 운용중이다. 아래의 과정은 DBMS Replication의 적용 및 현황을 확인하는 과정이다.
# Docker 이미지 Build
*
[
Skip
]
Dockerfile을 이용한 Image Build
*
[
Skip
]
Build된 이미지의 Container Registry 등록
*
[
]
docker-compose를 이용한 컨테이너 실행
*
[
]
mariabackup을 이용한 Replication 구성 (
`Docker Host`
에서 수행필요)
*
[
]
Portainer를 이용한 관리
## docker-compose를 이용한 컨테이너 실행
```
bash
# cat docker-compose.yml
version:
'3'
services:
hongsnet-centos76-mariadb103:
image: registry.hongsnet.net/joohan.hong/docker/mariadb:centos7-10.3_20201211
#image: centos7.6-mariadb10.3-hongsnet
restart: always
hostname
:
'centos7-mariadb103'
container_name: hongsnet-centos7.6-mariadb10.3
environment:
-
MYSQL_ROOT_PASSWORD
=
패스워드
volumes:
-
"/PDS/DOCKERS/mariadb/centos7-mariadb-10.3/DB:/var/lib/mysql"
-
"/PDS/DOCKERS/mariadb/centos7-mariadb-10.3/CONFIG/my.cnf:/etc/my.cnf"
-
"/PDS/DATABASE_BACKUP:/BACKUP"
ports:
-
"3306:3306"
#- "2225:22"
extra_hosts:
-
"localhost:127.0.0.1"
-
"mariadb.hongsnet.net:127.0.0.1"
```
## MariaDB 10.3 설정 내역
```
bash
# cat CONFIG/my.cnf
[
client]
port
=
3306
socket
=
/var/lib/mysql/mysql.sock
[
mysqld_safe]
socket
=
/var/lib/mysql/mysql.sock
nice
=
0
[
mysqld]
log-error
=
/var/lib/mysql/mysql.err
init_connect
=
'SET collation_connection = utf8_unicode_ci'
init_connect
=
'SET NAMES utf8'
character-set-server
=
utf8
collation-server
=
utf8_unicode_ci
skip-character-set-client-handshake
default-storage-engine
=
InnoDB
max_allowed_packet
=
1024M
net_read_timeout
=
120
net_write_timeout
=
120
#wait_timeout=86400
wait_timeout
=
30
user
=
mysql
port
=
3306
basedir
=
/usr
datadir
=
/var/lib/mysql
tmpdir
=
/tmp
skip-external-locking
skip-name-resolve
key_buffer_size
=
64M
max_allowed_packet
=
1024M
thread_stack
=
192K
thread_cache_size
=
256
max_connections
=
4096
table_cache
=
1024
tmp_table_size
=
32M
max_heap_table_size
=
32M
query_cache_size
=
128M
query_cache_type
=
1
sort_buffer_size
=
256K
read_buffer_size
=
256K
read_rnd_buffer_size
=
512K
long_query_time
=
2
server-id
=
135
log_bin
=
mysql-bin
expire_logs_days
=
3
max_binlog_size
=
1024M
read_only
=
1
innodb_buffer_pool_size
=
4096M
innodb_flush_log_at_trx_commit
=
0
innodb_lock_wait_timeout
=
50
innodb_thread_concurrency
=
8
innodb_log_buffer_size
=
8M
innodb_log_file_size
=
64M
innodb_log_files_in_group
=
2
innodb_file_per_table
=
1
[
mysqldump]
quick
quote-names
max_allowed_packet
=
1024M
[
mysql]
max_allowed_packet
=
1024M
[
isamchk]
key_buffer_size
=
16M
[
client-server]
```
`!중요`
: 다음의 설정은 반드시 Master와 다른 값으로 설정되어야 한다.
-
**read_only = 1**
-
**server-id = 135**
## mariabackup을 이용한 Replication 구성
`컨테니어 내부`
에서 작업을 진행하며, 다음과 같이 NFS로 파티션이 Export 되어 있다.
```
bash
# docker exec -it centos7.6-mariadb10.3 /bin/bash
```
```
bash
# df -h
Filesystem Size Used Avail Use% Mounted on
overlay 200G 7.4G 193G 4% /
tmpfs 64M 0 64M 0% /dev
tmpfs 32G 0 32G 0% /sys/fs/cgroup
192.168.200.62:/PDS/DATABASE_BACKUP 2.3T 1.8T 525G 78% /BACKUP
/dev/mapper/DATABASE-VIRT 3.0T 987G 2.0T 33% /etc
/dev/sda3 200G 7.4G 193G 4% /etc/hosts
shm 64M 0 64M 0% /dev/shm
tmpfs 32G 0 32G 0% /proc/acpi
tmpfs 32G 0 32G 0% /proc/scsi
tmpfs 32G 0 32G 0% /sys/firmware
```
NFS로 마운트 된 파티션에 백업을 수행할 디렉토리를 생성한다.
```
bash
# mkdir /BACKUP/2021-01-03
```
`!중요`
: mariabackup 시 서비스 디렉토리에 지정할 수는 없고, 반드시 백업되는 용량보다 같거나 큰 용량의 파티션이 필요하다.
준비가 되었으면, mariabackup을 이용해서 백업을 진행한다.
-
maraiabackup의 백업 옵션은 두 가지가 존재하며,
-
--no-lock : Master 시스템에서 백업을 수행하며, Table Locking을 수행하지 않는다. 즉, Live로 백업을 수행할 수 있다.
-
--slave-info : Slave 시스템에서 백업을 수행하며, 백업 시점까지의 Replication 정보를 그대로 유지한다.
!참고 : mariabackup 진행 과정
*
[
STEP 1
]
: mariabackup을 이용한 백업을 수행한다.
*
[
STEP 2
]
: 데이터복원(prepared)을 준비한다.
*
[
STEP 3
]
: mariabackup의 copy-back 옵션을 통해 MariaDB $DATADIR 위치에 복사한다.
*
[
STEP 4
]
: 백업 DATA를 참조하여, Replication을 구성한다.
-
[
**STEP 1**
]
: mariabackup을 이용한 백업을 수행한다.
```
bash
[
MASTER 또는 Slave]# mariabackup
--backup
--no-lock
--target-dir
/BACKUP/2021-01-03
--user
아이디
--password
패스워드
...하략
[
00] Redo log
(
from LSN 123437010701 to 123438091183
)
was copied.
[
00] completed OK!
```
-
[
**STEP 2**
]
: 데이터복원(prepared)을 준비한다.
```
bash
[
MASTER 또는 Slave]# mariabackup
--prepare
--target-dir
/BACKUP/2021-01-03
--user
아이디
--password
패스워드
...하략
[
00] Last binlog file ./mysql-bin.000032, position 283375354
[
00] completed OK!
```
-
[
**STEP 3**
]
: mariabackup의
`copy-back`
옵션을 통해 MariaDB $DATADIR 위치에 복사한다.
먼저 신규 Slave의 NFS 마운트 포인트를 확인한다.
```
bash
# df
Filesystem 1K-blocks Used Available Use% Mounted on
overlay 209612800 42476840 167135960 21% /
tmpfs 65536 0 65536 0% /dev
tmpfs 32895784 0 32895784 0% /sys/fs/cgroup
/dev/mapper/HONGSNET-PDS 2410700800 1864705512 545995288 78% /BACKUP
/dev/sda3 209612800 42476840 167135960 21% /etc/hosts
shm 65536 0 65536 0% /dev/shm
tmpfs 32895784 0 32895784 0% /proc/acpi
tmpfs 32895784 0 32895784 0% /proc/scsi
tmpfs 32895784 0 32895784 0% /sys/firmware
```
다시 한버 백업된 내역을 확인한다.
```
bash
# ls -al /BACKUP/2021-01-03/
total 144748
drwxr-xr-x 12 root root 4096 Mar 2 14:09
.
drwxr-xr-x 7 root root 92 Mar 2 14:00 ..
-rw-r-----
1 root root 32768 Mar 2 14:09 aria_log.00000001
-rw-r-----
1 root root 52 Mar 2 14:09 aria_log_control
-rw-r-----
1 root root 324 Mar 2 14:09 backup-my.cnf
drwx------ 2 root root 8192 Mar 2 14:09 edu
drwx------ 2 root root 8192 Mar 2 14:09 hjh
-rw-r-----
1 root root 1268090 Mar 2 14:09 ib_buffer_pool
-rw-r-----
1 root root 146800640 Mar 2 14:13 ibdata1
-rw-r-----
1 root root 0 Mar 2 14:13 ib_logfile0
drwx------ 2 root root 4096 Mar 2 14:09 ldswork
drwx------ 2 root root 8192 Mar 2 14:09 MATTERMOST
drwx------ 2 root root 4096 Mar 2 14:09 mysql
drwx------ 2 root root 16384 Mar 2 14:09 newhongsystem
drwx------ 2 root root 20 Mar 2 14:09 performance_schema
drwx------ 2 root root 8192 Mar 2 14:09 tech
drwx------ 2 root root 28 Mar 2 14:09
test
-rw-r-----
1 root root 42 Mar 2 14:09 xtrabackup_binlog_info
-rw-r-----
1 root root 85 Mar 2 14:13 xtrabackup_checkpoints
-rw-r-----
1 root root 583 Mar 2 14:09 xtrabackup_info
drwx------ 2 root root 12288 Mar 2 14:09 ZABBIXDB
```
위와 같이 정상적으로 확인되었으면,
**copy-back 옵션이 아닌**
컨테이너 볼륨을 기준으로 작업한다.
**!참고**
: mariabackup의 --copy-back이나 hot-copy 방식이나 결과는 서로 동일하다.
먼저, 컨테이너 볼륨의 디렉토리가
`비어있는지(empty)를 확인`
한다.
```
bash
# ls /PDS/DOCKERS/mariadb/centos7-mariadb-10.3/DB/
#
```
`호스트에서 컨테이너 볼륨경로에 Hot Copy를 수행한다.`
```
bash
# cp -rf /PDS/DATABASE_BACKUP/2021-01-03/* .
```
-
[
**STEP 4**
]
: 백업 DATA를 참조하여, Replication을 구성한다.
컨테이너로 접속한 후 다음과 같이 Replication을 설정한다.
```
bash
# cat /var/lib/mysql/xtrabackup_binlog_info
mysql-bin.000032 283375354 0-250-25082472
```
```
bash
# mysql -u root -p
Enter password:
Welcome to the MariaDB monitor. Commands end with
;
or
\g
.
Your MariaDB connection
id
is 11
Server version: 10.3.27-MariaDB-log MariaDB Server
Copyright
(
c
)
2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type
'help;'
or
'\h'
for
help. Type
'\c'
to clear the current input statement.
MariaDB
[(
none
)]>
```
Replication 구성 시 다음과 같이 두 가지 로그를 기준으로 설정할 수 있다.
-
binlog의 Position 설정
-
**GTID 설정**
여기서는 GTID 기반으로 설정한다.
```
bash
MariaDB
[(
none
)]>
SET GLOBAL
gtid_slave_pos
=
'0-250-25082472'
;
Query OK, 0 rows affected
(
0.025 sec
)
```
위의 설정한 gtid_slave_pos 값이 제대로 적용되었는지를 검증한다.
```
bash
MariaDB
[(
none
)]>
show variables like
'Gtid%'
;
+------------------------+----------------+
| Variable_name | Value |
+------------------------+----------------+
| gtid_binlog_pos | |
| gtid_binlog_state | |
| gtid_current_pos | 0-250-25082472 |
| gtid_domain_id | 0 |
| gtid_ignore_duplicates | OFF |
| gtid_pos_auto_engines | |
| gtid_seq_no | 0 |
| gtid_slave_pos | 0-250-25082472 |
| gtid_strict_mode | OFF |
+------------------------+----------------+
9 rows
in
set
(
0.039 sec
)
```
마지막 단계로써 CHANGE MASTER 쿼리문을 적용하고, Replication을 시작한다.
```
bash
MariaDB
[(
none
)]>
CHANGE MASTER TO
MASTER_HOST
=
'180.180.180.250'
,
MASTER_USER
=
'hongsrepl'
,
MASTER_PASSWORD
=
'패스워드'
,
MASTER_USE_GTID
=
slave_pos
;
Query OK, 0 rows affected
(
0.004 sec
)
```
```
bash
MariaDB
[(
none
)]>
start slave
;
Query OK, 0 rows affected
(
0.003 sec
)
```
최종적으로 MASTER -> SLAVE 간의 Replication 상태 및 데이터가 정상적으로 동기화되는 것을 확인할 수 있다.
```
bash
MariaDB
[(
none
)]>
show slave status
\G
***************************
1. row
***************************
Slave_IO_State: Waiting
for
master to send event
Master_Host: 180.180.180.250
Master_User: hongsrepl
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000032
Read_Master_Log_Pos: 302848024
Relay_Log_File: centos7-mariadb103-relay-bin.000002
Relay_Log_Pos: 19353534
Relay_Master_Log_File: mysql-bin.000032
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 302848024
Relay_Log_Space: 19353856
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 250
Master_SSL_Crl:
Master_SSL_Crlpath:
Using_Gtid: Slave_Pos
Gtid_IO_Pos: 0-250-25098799
Replicate_Do_Domain_Ids:
Replicate_Ignore_Domain_Ids:
Parallel_Mode: conservative
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has
read
all relay log
;
waiting
for
the slave I/O thread to update it
Slave_DDL_Groups: 0
Slave_Non_Transactional_Groups: 0
Slave_Transactional_Groups: 16327
1 row
in
set
(
0.000 sec
)
```
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment