Download presentation
Presentation is loading. Please wait.
1
DRBD 세미나 리눅스 데이터 시스템 황세원
2
개요 특징 구성방식 인스톨과 설정 DRBD의 운용과 트러블 슈팅 사용사례와 효과
목차 개요 특징 구성방식 인스톨과 설정 DRBD의 운용과 트러블 슈팅 사용사례와 효과
3
개요 1-1.DRBD란 DRBD(Distributed Replicated Block Device)는, TCP/IP네트워크 를 통해서, 복수의 서버간의 HDD(파티션)를 미러링(복제)하는 소프트 웨어입니다. 간단히말하면, 네트워크를 통해서 Raid1의 환경을 구축하는 것이 가 능합니다. Raid-1의 일반적인 구성은 데이터 백업(실시간)미러링하는 구성이지 만 여기서는 Network를 통해 미러링하게 된다. 보통 DRBD는 HA-Cluster 시스템의 Heartbeat를 통해 제어되는것이 일반적, 8.0.x대 버젼으로넘어오면서 OFCS,GFS등 HA-Cluster에서 의 확장된 기능이 추가
4
개요 1-2.DRBD의 동작환경 DRBD는Linux OS상에서 동작하는 소프트웨어입니다.Linux의 커널 모 듈이 필요하기 때문에, 같은 유닉스 계OS인 Open Solaris와 FreeBSD에서는 동작 할수 없습니다. 현재 패키지가 제공되는 디스트리뷰션은 이하와 같습니다. Red Hat Enterprise Linux 5 & 6(Cent OS 5) SUSE Linux Enterprise Server 10 & 11 Debian GNU/Linux5 & 6 Ubuntu Server Edition10.04 LTS 패키지가 제공되지 않더라도, 소스코드가 공개되어있기 때문에, Linux 디스크리뷰션이라면, 컴파일 해서 인스톨하는 것이 가능합니다.
5
개요 1.3 필요한 하드웨어 DRBD는 2대의 서버간의 파티션을 네트워크를 통해 replication 하는 소프트웨어이기 때문에, 같은 스펙의 서버가 2대이상 필요하 게 됩니다.
6
2.특징 2.1 네트워크 레플리케이션 DRBD의 최대의 특징은, HDD(파티션)의 복제를 TCP/IP 네트워크를 이용해서 실행하는 것입니다. 네트워크를 이용하는 것으로, 특별한 하 드웨어를 필요로 하지 않습니다.리눅스 환경과 미러링으로 사용하기 위 한 네트워크카드가 있다면, 바로 DRBD의 기능을 체험할 수 있습니다.
7
2.특징 2-2 블럭디바이스로 동작 DRBD는 파일 시스템보다도 낮은 레이어에서 동작해서, replication된 HDD를 블럭 디바이스로써 사용하는 것이 가능 합니다. 쉬게 말하면,복제되어 있는 DRBD디바이스를 보통의 HDD와 같은 느낌으로 사용하는 것이 가능합니다. 보통의 HDD를 같은 느낌으로 사용하는 것이 가능하기 때문에, 데이터를 보존하는 어플리케이션이 미러링에 대응할 필요는 없습니다. 거의 모든 어플리케이션이 DRBD에 의해 실시간으로 데이터 를 복제해가면서, 동작가능합니다.
8
2.특징 2-3. Shared-nothing DRBD와 Pacemaker를 결합하면, 간단하고 안전한 고가용성 환경(HA클라스 터 환경)을 구축하는 것이 가능합니다. DRBD를 사용하지않는 많은 HA클라스터 환경은 데이터 영역을 복제서버에 공 유하는 [공유스토리지]를 이용해서 실현되고 있습니다. 이것은 공유 스토리지에 장애가 발생한 경우에 서비스가 계속 되지 않을 뿐만 아니라, 중요한 데이터의 손실로 연결될 가능성이 있습니다. DRBD는 여러 서버에 네트워크를 통해 미러링을 제공하고 있기 때문에, 공유 스토리지를 사용하지 않습니다. 이것이 DRBD가 제공하는 "shared-nothing" 의 HA 클러스터 환경입니다. DRBD는 서버 수 감소, 공유 스토리지란 단일 장 애 지점 (Single point of failer)을 없앨 수있는 저비용으로 안전한 HA 클러스 터 환경을 제안합니다.
9
3.기본 구성 3-1 구성개요 DRBD의 기본구성은, 2대의 서버간 하드디스크(파티션)의 복제 환경입니다. 2대의 서버간은, DRBD전용으로 준비한 네트워크 카드를 사용해서, LAN케이블에 직접 연결합니다. DRBD로 미러링된 디바이스는 통상의 HDD와 같이 취급하는 것 이 가능하기 때문에, DRBD디바이스(/dev/drbd0)로 파일 시스 템을 작성해서 마운트합니다. DRBD디바이스의 관리는 관리 툴에서 전부 행해지며, 접속의 제 어와 디바이스의 상태의 제어를 행합니다.
10
3.기본 구성 3-2 하드웨어 구성 서버 2대 미러링에 사용하는 네트워크 카드 LAN케이블(직결용)
하드디스크( 비어있는 파티션) 3-3 소프트웨어 구성 Linux계OS DRBD커널모듈 DRBD유틸리티군(관리tool)
11
구성 방식 DRBD/Heartbeat + MySQL -DRBD프로세스는 두 노드간 Data(Disk)를 블록 디바이스로 동기화
-Heartbeat 프로세스는 Active-Standby로 운영할수 있도록 하는 프로그램 -한 노드에서 장애 발생시 Heartbeat프로세스에 의해 다른 노드로 fail-over DRBD Data 동기화 방식
12
3.구성 방식 ★주요 장비 CCP MySQL DB(성수) BVMDB(성수) NISPDB1,2(성수) GXGWDB1,2(성수)
NFCGW_DB1,2(보라매) Heartbeat failover방식 ※ 주요 이슈 사항 1. Slave 구성 할 때 Heartbeat line 추가 시 이슈 사항 (gxgwdb) gxgwdb 대상으로 서비스망과 heartbeat 망 분리 작업 시 데이터 동기화 실패 현상 발생 - heartbeat과 Slave 구성 시 NISPDB 와 같이 하나의 네트워크 망으로 구성 권고 2. DB I/O로 인하여 heartbeat failover 발생 - XenServer의 Hypervisor 버그로 인한 것으로 확인되었고으며 월 패치 후 재발 현상 없음 3. RHEL 6.0 이상 버전에서는 Heartbeat 이 pacemaker로 변경되어 Heartbeat 업그레이드가 불가
13
구성방식
14
4.인스톨과 설정 4-1 DRBD package 설치 4-1-1 설치 packages
1. drbd el5_3.i386.rpm 2. kmod-drbd el5_3.i386.rpm 설치 예 # rpm -Uvh drbd el5_3.i386.rpm kmod-drbd el5_3.i386.rpm --- Primary node --- # modprobe drbd # drbdadm create-md mardrbd # drbdadm primary mardrbd #mkfs -t ext3 /dev/drbd0 #mount /dev/drbd0 /drbd # /etc/init.d/drbd start --- Secondary node ---
15
4-2-1 DRBD설정확인(drbd.conf)
4.인스톨과 설정 4-2-1 DRBD설정확인(drbd.conf) global { # DRBD 사용률 count 설정 (활성화로 설정) usage-count yes; } common { syncer { # bandwidth 제한 설정 (512로 설정) rate 512M; resource mardrbd { # TCP/IP link에서 사용할 protocol 설정 (Protoco C 로 설정) # Protocol A: write IO is reported as completed, if it has reached local disk and local TCP send buffer. # Protocol B: write IO is reported as completed, if it has reached local disk and remote buffer cache. # Protocol C: write IO is reported as completed, if it has reached both local and remote disk. protocol C;
16
4-2-2 DRBD설정확인(drbd.conf)
4.인스톨과 설정 4-2-2 DRBD설정확인(drbd.conf) handlers { # Local로 copy된 data가 불일치 할 때 Primary node에서 불려지는 handler pri-on-incon-degr "echo o > /proc/sysrq-trigger ; halt -f"; # Split brain auto recovery procedure 수행 후 primary node를 잃었을 때 불려지는 handler pri-lost-after-sb "echo o > /proc/sysrq-trigger ; halt -f"; # Local IO subsystem으로부터 IO error를 받으면 불려지는 handler local-io-error "echo o > /proc/sysrq-trigger ; halt -f"; # 각 node의 disk가 보호가 필요한 경우 불려지는 handler outdate-peer "/usr/lib/heartbeat/drbd-peer-outdater -t 5"; } startup { # cluster로부터 connection이 떨어진 후 wait timeout 설정 (2분으로 설정) degr-wfc-timeout 120; # 2 minutes. disk { # lower level device가 io-error를 상위 layer로 report하는 옵션 (detach : 에러 발생시 disk 분리) on-io-error detach;
17
4-2-3 DRBD설정확인(drbd.conf)
4.인스톨과 설정 4-2-3 DRBD설정확인(drbd.conf) net { # node fail 체크 시간 설정 (6초로 설정 : 60) timeout ; # 6 seconds (unit = 0.1 seconds) connect-int 10; # 10 seconds (unit = 1 second) # keep-alive 체크 간격 설정 (1초로 설정 : 10) ping-int ; # 10 seconds (unit = 1 second) # keep-alive 체크 timeout 설정 (0.5초로 설정 : 5) ping-timeout 5; # 500 ms (unit = 0.1 seconds) # 허용되는 request 수 설정 (2048 로 설정) max-buffers ; # pending되어 기다리는 write request 수 설정 (128로 설정) unplug-watermark 128; # 두 write 경계 사이의 Data block의 최고 수 (2048로 설정) max-epoch-size 2048; # split brain 이후의 작업 설정 (split brain 발생시 작업 절차) after-sb-0pri disconnect; after-sb-1pri disconnect; after-sb-2pri disconnect; rr-conflict disconnect; }
18
4-2-4 DRBD설정확인(drbd.conf)
4.인스톨과 설정 4-2-4 DRBD설정확인(drbd.conf) syncer { rate 512M; al-extents 257; } on mardb1 { # 동기화 될 device명 device /dev/drbd0; # 동기화 될 disk명 (DRBD 에 참여시킬 disk 설정) disk /dev/xvde1; # node IP 및 port (DRBD 동기화에 사용할 IP 및 Port 설정) address :7791; # disk 위치 (로컬디스크 사용시는 internal 외부디스크 사용시는 external 로 설정) flexible-meta-disk internal; on mardb2 { device /dev/drbd0; disk /dev/xvde1; address :7791; meta-disk internal;
19
5.DRBD의 운용과 트러블 슈팅 5.DRBD의 운용과 트러블 슈팅
#drbd-overview(정상 커넥션의 경우) 0:sktdrbd Connected Primary/Secondary UpToDate/UpToDate C r----- /MYSQL/DATA ext3 9.9G 3.7G 5.8G 39%
20
Case1. DRBD 커넥션이 끊어진 상태이지만 link down 및 drbd crash 상태는 아닌 경우 (정상리부팅)
~]# drbd-overview 0:sktdrbd WFConnection Primary/Unknown UpToDate/DUnknown C r----- /MYSQL/DATA ext3 9.9G 3.7G 5.8G 39% # drbd-overview 0:sktdrbd StandAlone Secondary/Unknown UpToDate/DUnknown r----- ** 해결방법:StandAlone 상태인 DB에서 아래 명령어 실행 ~]# drbdadm connect all ~]# drbd-overview 0:sktdrbd Connected Secondary/Primary UpToDate/UpToDate C r-----
21
Case2. 모든 DB가 StandAlone 인 경우 (Split-brain은 아닌 상황)
5.DRBD의 운용과 트러블 슈팅 Case2. 모든 DB가 StandAlone 인 경우 (Split-brain은 아닌 상황) ~]# drbd-overview 0:sktdrbd StandAlone Primary/Unknown UpToDate/DUnknown r----- /MYSQL/DATA ext3 9.9G 3.7G 5.8G 39% ~]# drbd-overview 0:sktdrbd StandAlone Secondary/Unknown UpToDate/DUnknown r----- **해결방법 : 모든 DB에서 아래 명령어 실행 ~]# drbdadm connect all ~]# drbd-overview 0:sktdrbd WFConnection Primary/Unknown UpToDate/DUnknown C r----- /MYSQL/DATA ext3 9.9G 3.7G 5.8G 39% ~]# drbdadm connect all ~]# drbd-overview 0:sktdrbd Connected Secondary/Primary UpToDate/UpToDate C r-----
22
5.DRBD의 운용과 트러블 슈팅 Case3. Split-brain 현상일 경우
#Split-brain: DRBD(또는 다른 이중화 솔루션)으로 데이터가 싱크되는 중에 외부요인으로 인하여 두 데이터가 다르게 되어 데이터 싱크가 실패된 경우를 말 함 현상: 위의 drbdadm connect all 명령어로도 StandAlone 인 상태로 나옴 해결방법 ** Secondary의 데이터를 모두 지우고 다시 싱크를 해야 한다. 1. 모든 DB에서 drbdadm disconnect all 실행 2. Secondary DB에서 아래 명령어 실행하여 Data delete drbdadm -- --discard-my-data connect all 3. 모든 DB에서 drbdadm connect all --> 이 경우 Secondary DB의 Data를 지우게 되므로 주의 요망
23
5-2. heartbeat 상태 확인 ** 정상 커넥션의 경우
5.DRBD의 운용과 트러블 슈팅 5-2. heartbeat 상태 확인 ** 정상 커넥션의 경우 ~]# crm_mon Defaulting to one-shot mode You need to have curses available at compile time to enable console mode ============ Last updated: Mon Nov 26 10:56: Current DC: mysql_02 (bad978b b49e-f6edb0f50e44) 2 Nodes configured. 1 Resources configured. Node: mysql_01 (ad6f9cc ad6-bcce-ad4c074821e4): online Node: mysql_02 (bad978b b49e-f6edb0f50e44): online Resource Group: group_1 IPaddr_200_200_200_ (heartbeat::ocf:IPaddr): Started mysql_01 IPaddr_172_18_79_ (heartbeat::ocf:IPaddr): Started mysql_01 drbddisk_3 (heartbeat:drbddisk): Started mysql_01 Filesystem_ (heartbeat::ocf:Filesystem): Started mysql_01 mysql_5 (heartbeat::ocf:mysql): Started mysql_01
24
5.DRBD의 운용과 트러블 슈팅 Case1. mysql 정지 및 재기동 명령어
~]# crm_resource -r mysql_5 -p target_role -v stopped ~]# crm_mon Defaulting to one-shot mode You need to have curses available at compile time to enable console mode ============ Last updated: Mon Nov 26 10:58: Current DC: mysql_02 (bad978b b49e-f6edb0f50e44) 2 Nodes configured. 1 Resources configured. Node: mysql_01 (ad6f9cc ad6-bcce-ad4c074821e4): online Node: mysql_02 (bad978b b49e-f6edb0f50e44): online Resource Group: group_1 IPaddr_200_200_200_ (heartbeat::ocf:IPaddr): Started mysql_01 IPaddr_172_18_79_ (heartbeat::ocf:IPaddr): Started mysql_01 drbddisk_3 (heartbeat:drbddisk): Started mysql_01 Filesystem_ (heartbeat::ocf:Filesystem): Started mysql_01 mysql_5 (heartbeat::ocf:mysql): Stopped
25
5.DRBD의 운용과 트러블 슈팅 ** mysql 재기동
~]# crm_resource -r mysql_5 -p target_role -v started ~]# crm_mon Defaulting to one-shot mode You need to have curses available at compile time to enable console mode ============ Last updated: Mon Nov 26 10:59: Current DC: mysql_02 (bad978b b49e-f6edb0f50e44) 2 Nodes configured. 1 Resources configured. Node: mysql_01 (ad6f9cc ad6-bcce-ad4c074821e4): online Node: mysql_02 (bad978b b49e-f6edb0f50e44): online Resource Group: group_1 IPaddr_200_200_200_ (heartbeat::ocf:IPaddr): Started mysql_01 IPaddr_172_18_79_ (heartbeat::ocf:IPaddr): Started mysql_01 drbddisk_3 (heartbeat:drbddisk): Started mysql_01 Filesystem_ (heartbeat::ocf:Filesystem): Started mysql_01 mysql_5 (heartbeat::ocf:mysql): Started mysql_01
26
Case2. Heartbeat 절체 시 mysql 기동 실패 (에러메시지가 발생시)
5.DRBD의 운용과 트러블 슈팅 Case2. Heartbeat 절체 시 mysql 기동 실패 (에러메시지가 발생시) ~]# crm_mon Defaulting to one-shot mode You need to have curses available at compile time to enable console mode ============ Last updated: Mon Nov 26 11:01: Current DC: mysql_02 (bad978b b49e-f6edb0f50e44) 2 Nodes configured. 1 Resources configured. Node: mysql_01 (ad6f9cc ad6-bcce-ad4c074821e4): online Node: mysql_02 (bad978b b49e-f6edb0f50e44): online Resource Group: group_1 IPaddr_200_200_200_ (heartbeat::ocf:IPaddr): Started mysql_01 IPaddr_172_18_79_ (heartbeat::ocf:IPaddr): Started mysql_01 drbddisk_3 (heartbeat:drbddisk): Stopped Filesystem_ (heartbeat::ocf:Filesystem): Stopped mysql_5 (heartbeat::ocf:mysql): Stopped Failed actions: mysql_5_start_0 (node=mysql_01, call=38, rc=-2): Timed Out
27
5.DRBD의 운용과 트러블 슈팅 해결방법 ~]# crm_resource -H mysql_01 -r mysql_5 -C //에러메시지 삭제 ~]# crm_mon Defaulting to one-shot mode You need to have curses available at compile time to enable console mode ============ Last updated: Mon Nov 26 11:02: Current DC: mysql_02 (bad978b b49e-f6edb0f50e44) 2 Nodes configured. 1 Resources configured. Node: mysql_01 (ad6f9cc ad6-bcce-ad4c074821e4): online Node: mysql_02 (bad978b b49e-f6edb0f50e44): online Resource Group: group_1 IPaddr_200_200_200_ (heartbeat::ocf:IPaddr): Started mysql_01 IPaddr_172_18_79_ (heartbeat::ocf:IPaddr): Started mysql_01 drbddisk_3 (heartbeat:drbddisk): Started mysql_01 Filesystem_ (heartbeat::ocf:Filesystem): Started mysql_01 mysql_5 (heartbeat::ocf:mysql): Started mysql_01
28
5.DRBD의 운용과 트러블 슈팅 Case3. Heartbeat 절체 시 mysql 기동 실패 (에러메시지를 삭제하여 도 계속 DB 기동 실패) => 이 경우 DB를 싱글모드로 기동 시킨 후 DB 리커버리를 시도한 후 다시 H/B을 기동하여 DB정상화 시도 ~]# /etc/init.d/heartbeat stop 또는 killall heartbeat (heartbeat이 정상적으로 stop되지 않을 경우 강제로 heartbeat 관련 데몬을 kill) ~]# drbdadm primary all ~]# mount /dev/drbd0 /MYSQL_DATA ~]# /MYSQL/mysql/bin/mysqld_safe --user=mysql& (InnoDB가 자동으로 recovery 시도 후 DB 정상 기동 확인) ~]# /MYSQL/mysql/bin/mysqladmin -uroot -p shutdown ~]# umount /MYSQL_DATA ~]# drbdadm secondary all ~]# /etc/init.d/heartbeat start
Similar presentations