DRBD 필요조건
1. 2 개의 디스크 (같은 크기) . 다른 영역
2. 네트워크가 같은 대역대어야 함
3. 작동중인 DNS 확인 (/etc/hosts 파일)
4. 두 노드의 NTP 동기화 시간
5. Selinux Permissive => setenforce 0
6. Iptables ports (7788) 허용
참고 사이트 : https://www.unixmen.com/configure-drbd-centos-6-5/
https://www.yongbok.net/blog/how-to-configure-drbd-on-centos/
참고사이트
http://blog.naver.com/PostView.nhn?blogId=oxcow119&logNo=221116122082&categoryNo=0&parentCategoryNo=10&viewDate=¤tPage=1&postListTopCurrentPage=1&from=postView
테스트 환경 및 서버 구성
CentOS 6.9
HostName Type IP Storage
DRBD1 Primary 172.16.1.158 10G SSD
DRBD2 Secondary 172.16.1.159 10G SSD
□ Host Name 별칭 설정
# vi /etc/hosts ( DRBD1 , DRBD2 같은 위치내용 복사)
# DRBD
172.16.1.158 DRBD1
172.16.1.159 DRBD2
# vi /etc/sysconfig/network (호스트 네임 변경)
HOSTNAME=DRBD1
HOSTNAME=DRBD2
# vi /etc/resolv.conf (네임서버 등록)
nameserver 168.126.63.1
nameserver 8.8.8.8
□ NTP 동기화 (Both)
서버의 날짜 및 시간이 맞지 않으면 동기화가 되지 않을수 있기 때문에
crontab을 이용하여 주기 적으로 동기화 될수 있도록 설정 합니다.
매 1분마다 동기화를 진행 하므로 NTP서버를 직접 구축해서 사용하는 것을 권장합니다
# crontab -e
# DATA SYNC
1 0 * * * rdate -s time.bora.net
rdate: timeout for time.bora.net (타임아웃 에러 발생시 보라넷 아이피로 시간 업데이트)
# rdate -s 203.248.240.140
서울시간 동기화
# ln -s /usr/share/zoneinfo/Asia/Seoul /etc/localtime
date 시간 확인
□ SELinux 모드 변경 (해제)
# vi /etc/sysconfig/selinux
SELINUX=disabled
□ DRBD 설치
cd /root
# rpm -ivh http://elrepo.org/elrepo-release-6-5.el6.elrepo.noarch.rpm
rpm -Uvh http://www.elrepo.org/elrepo-release-6-8.el6.elrepo.noarch.rpm (에러발생)
* 설치되지않으면 http://dl.fedoraproject.org/pub/epel/6/x86_64로 접속해서 최신 버전을 다운로드 받는다
□ 파일 업로드후
# rpm -Uvh elrepo-release-6-8.el6.elrepo.noarch.rpm (패키지 설치)
# yum install -y kmod-drbd84 drbd84-utils
□ iptables 해제
# iptables -F (방화벽 끄기)
□ 수동으로 DRBD Module을 커널에 적재 시킵니다.
# modprobe drbd
FATAL: Module drbd not found. (에러발생)
-> 리부팅
□ /dev/sdb1 디바이스는 mount 하지 않는다.
□ DRBD1, DRBD2 서버 다이렉트 케이블 연결
□ DRBD 복제 된 블록 장치 리소스 파일 만들기 ( DRBD1 , DRBD2 같은 위치내용 복사)
# cp /etc/drbd.d/global_common.conf /etc/drbd.d/global_common.conf_ori ( 파일 원본 백업 )
# vi /etc/drbd.d/global_common.conf
resource clusterdb
{
startup {
wfc-timeout 30;
outdated-wfc-timeout 20;
degr-wfc-timeout 30;
}
#net {
#cram-hmac-alg sha1;
#shared-secret sync_disk;
#}
#syncer {
#rate 10M;
#al-extents 257;
#on-no-data-accessible io-error;
#}
on DRBD1 {
device /dev/drbd0;
disk /dev/sdb1;
address 100.100.100.1:7788;
meta-disk internal;
}
on DRBD2 {
device /dev/drbd0;
disk /dev/sdb1;
address 100.100.100.2:7788;
meta-disk internal;
}
}
global { usage-count no; }
common {
syncer {
c-plan-ahead 10;
c-min-rate 50M;
c-max-rate 100M;
c-fill-target 2M;
verify-alg md5;
al-extents 3389;
}
net {
ko-count 10;
max-buffers 128k;
max-epoch-size 16000;
sndbuf-size 8m;
rcvbuf-size 8m;
unplug-watermark 16001;
}
disk {
no-md-flushes;
no-disk-barrier;
no-disk-flushes;
}
}
--------------------------------------------------------------
vi /etc/drbd.d/global_common.conf
#include "drbd.d/global_common.conf";
#include "drbd.d/*.res";
global {
usage-count no;
}
common {
# Speed of syncronization. Speed of the dedicated link:
syncer {rate 100M;}
}
resource clusterdb {
# transfer protocol to use.
# C: write IO is reported as completed, if we know it has
# reached _both_ local and remote DISK.
# * for critical transactional data.
# B: write IO is reported as completed, if it has reached
# local DISK and remote buffer cache.
# * for most cases.
# A: write IO is reported as completed, if it has reached
# local DISK and local tcp send buffer. (see also sndbuf-size)
# * for high latency networks
protocol C;
startup {
wfc-timeout 15;
degr-wfc-timeout 60;
}
net {
cram-hmac-alg sha1;
shared-secret "secret";
#allow-two-primaries;
}
on DRBD1 {
device /dev/drbd0;
disk /dev/sdb1;
address 172.16.1.158:7788;
meta-disk internal;
}
on DRBD2 {
device /dev/drbd0;
disk /dev/sdb1;
address 172.16.1.159:7788;
meta-disk internal;
}
---------------------------------------------------------------------------------
□ 두 시스템에서 DRBD 메타 데이터 저장 영역을 초기화하십시오. ( DRBD 1 , DRBD 2번 서버 동시 실행 )
# drbdadm create-md clusterdb / # drbdadm create-md all
# /etc/init.d/drbd status (drbd 상태보기)
※주의※ 에러 발생시
만약 백업용으로 추가한 디스크 /dev/sdb를 마운트시켰다면 이 부분에서 아무 반응이 없을 것이다.
DRDB는 os 레벨이 아닌 커널 레벨에서 동작하므로 마운트를 하지 않아도 디스크를 인식할 수 있다.
따라서 추가한 디스크는 마운트 하지 않고 그냥 둔다
오류 1. 'xxx' not defined in your config (for this host)
xxx.res 파일 안에 있는 host를 찾지 못해서 발생하는 에러, host명이 정확한지 확인 필요
오류 2. 'access beyond end of device'
오류 메시지 중에 위의 메시지가 포함된 메시지가 있다면 디스크를 초기화 해주어야 한다
# dd if=/dev/zero of=/dev/sda2 bs=500M (/dev/sdb는 설정한 디바이스명)
# dd if=/dev/zero of=/dev/sdb1 bs=1024 count=20000
cd
dd if=/dev/zero of=/dev/sda3
You need to either
* use external meta data (recommended)
* shrink that filesystem first
* zero out the device (destroy the filesystem)
Operation refused.
Command 'drbdmeta 0 v08 /dev/sdb1 internal create-md' terminated with exit code 40
---------------------------------------------------------------------------------------------
□ DRBD 시작 - master/slave 모두
두 노드 모두에서 drbd를 시작하십시오.
# service drbd start
or
# /etc/init.d/drbd start
오류3. 오류메시지에 degr-wfc-timeout 이 포함된 에러
동기화하려는 서버와 연결을 맺을 시간을 초과했다는 의미로 양 서버를 30초이내에 시작해주면 된다
(wfc-timeout에서 설정한 시간)
Starting DRBD resources: [
adjust disk: clusterdbOperation canceled.
:failed(apply-al:20)
Command 'drbdsetup-84 primary 0' terminated with exit code 17
---------------------------------------------------------------------------------------
□ DRBD 프로세스 확인
[root@DRBD1 network-scripts]# ps -ef | grep drbd
root 9511 2 0 16:17 ? 00:00:00 [drbd-reissue]
root 9710 2 0 16:33 ? 00:00:00 [drbd_submit]
root 9718 2 0 16:33 ? 00:00:00 [drbd_w_clusterd]
root 9723 2 0 16:33 ? 00:00:00 [drbd_r_clusterd]
root 9732 2 0 16:33 ? 00:00:00 [drbd_a_clusterd]
root 9733 2 0 16:33 ? 00:00:00 [drbd_ack_sender]
root 9738 9482 0 16:33 pts/0 00:00:00 grep drbd
□ PRIMARY 노드에서 drbdadm 명령을 실행합니다.
drbdadm primary --force clusterdb // DRBD V8.4 이후 (t
drbdadm secondary clusterdb
*slave 서버에서의 별도의sync 작업은 필요가 없습니다.
진행상황은 "drbd-overview" 명령으로 확인 가능, 혹은 "cat /proc/drbd"로도 확인 가능
이후 Primary와 Secondary의 동기화가 완료 될때까지 기다립니다.
# drbd-overview (Sync완료 확인)
0:drbd_disk1/0 SyncSource Primary/Secondary UpToDate/Inconsistent C r-----
[=================>..] sync'ed: 92.2% (800/10236)M
# cat /proc/drbd (Sync완료 확인)
에러메세지 발생
Excess arguments: overwrite-data-of-peer
Command 'drbdsetup-84 primary 0 overwrite-data-of-peer' terminated with exit code 20
---------------------------------------------------------------------------------------
□ DRBD Device 파일 시스템 포멧 (Both) , Sync완료 후 미러링 여부 확인하기
clusterdb.res 에서 지정한 “/dev/drbd0″를 ext4 파일 시스템으로 포멧 합니다.
(primary에서만 된다. secondary는 파일 포맷이 안된다. slave니까)
# mkfs.ext4 /dev/drbd0
or
# mkfs -t ext4 -j /dev/drbd0
mkdir /mnt
mount /dev/drbd0 /mnt
# mount
/dev/drbd0 on /data type ext4
---------------------------------------------------------------------------------------
□ 분산 된 복제 된 블록 장치 장치에 파일 시스템 만들기
/sbin/mkfs.ext4 /dev/drbd0
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
131072 inodes, 524007 blocks
26200 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=536870912
16 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912
Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 26 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
mke2fs 1.41.12 (17-May-2010) => 테스트 명령어 실행시 서버 표시
mkfs.ext4: Wrong medium type while trying to determine filesystem size
---------------------------------------------------------------------------------------
□ 확인
[root@node1 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg_unixmencentos65-lv_root 19G 3.6G 15G 20% /
tmpfs 1.2G 44M 1.2G 4% /dev/shm
/dev/sda1 485M 80M 380M 18% /boot
/dev/drbd0 2.0G 36M 1.9G 2% /data
참고 : 보조 컴퓨터에서 디스크를 마운트 할 필요가 없습니다. / data 폴더에
쓰는 모든 데이터는 machine2에 동기화됩니다.
이를 확인하려면 기본 노드에서 / data 폴더를 마운트 해제하고 보조 노드를
기본 노드로 만들고 / data를 두 번째 시스템에 마운트하면 / data 폴더에 동일한
내용이 표시됩니다
□Mysql datadir 변경
아래 항목을 추가해줍니다.
#vi /etc/my.cnf
datadir=/data
---------------------------------------------테스트-----------------------------------------------------------------------------------
1. 파일 시스템으로 포맷하고 mount 하기
primary 노드에서 디바이스를 ext3 로 포맷팅하고 mount
* 주의 : /dev/sdb 를 포맷팅하는 것이 아니라 이를 대신 처리해주는 drbd 논리 디바이스인 /dev/drbd0에 수행해야한다.
DRBD1# mkfs.ext4 /dev/drbd0
DRBD1# mount /dev/drbd0 /mnt
* 주의 : secondary 노드의 블록 디바이스는 mirroring 만 되는 것이다. mount 되지 않는다.
secondary 노드의 블록 디바이스를 mount 하기 위해서는 primary를 secondary 로 만들고 secondary 를 primary 로 만들어야한다.
2. mirroring 확인
primary 노드에서 마운트 진행하였고 여기에 파일을 하나 만든다.
DRBD1# touch /mnt/test
secondary 에 mirroring 되는지 확인하기 위해 secondary를 primary로 만들 것이다.
primary 노드는 하나밖에 지정못하므로 primary 를 우선 secondary 로 만들어야한다. secondary 로 만들기 전에 우선 umount 해야한다.
# primary를 secondary 만들기
DRBD1# umount /mnt
------------강제 umount--------------------------------
umount -v /mnt
umount: /mnt/mymount: device is busy.
(In some cases useful info about processes that use
the device is found by lsof(8) or fuser(1))
fuser -ck /mnt
--------------------------------------------------------
# primary 를 secondary 만들기
DRBD1# drbdadm secondary test01 #test01은 resource_name이다.
DRBD1# drbdadm secondary clusterdb
# secondary를 primary 만들기
DRBD2# drbdadm primary clusterdb
DRBD2# drbdadm primary --force clusterdb
# secondary 노드 였던 drbd-2에서 마운트하여 확인하기
DRBD2# mount /dev/drbd0 /mnt
DRBD2# ls -al /mnt
확인해보면 drbd-1에서 생성했던 test 란 파일이 보일 것이다.
# drbd-overview (Sync완료 확인)
0:drbd_disk1/0 SyncSource Primary/Secondary UpToDate/Inconsistent C r-----
[=================>..] sync'ed: 92.2% (800/10236)M
# cat /proc/drbd (Sync완료 확인)
-------------------------------------------------------------------------------------------------------------------------
====================================================================
8-16일 DRDB 테스트 결과
가상화 서버 (172.16.1.158) 리부팅후
/dev/sda5 (DRBD 공유된 디바이스) 날라감
linux read-only file system 에러발생
가상서버 말고 물리서버로 테스트 해봐야 할꺼 같습니다.
창고 쓸만한 서버 알려주시면 OS 인스톨후 테스트 진행하도록 하겠습니다.
====================================================================
'리눅스' 카테고리의 다른 글
리눅스 기본 시스템 확인 명령어 (0) | 2019.01.08 |
---|---|
서버 ssh 접속이 느린 경우 해결방법 (0) | 2019.01.08 |
리눅스 6버전 CLI 모드 진입 방법 (0) | 2018.11.24 |
CentOS 6.X GIT 서버 설치 (0) | 2018.11.14 |
SSH, SFTP port 변경하기 (0) | 2018.11.14 |