문제 해결
DRX를 구성하는 절차상에서 발생할 수 있는 문제들에 대한 해결 가이드들 제공합니다.
설치 오류
- Windows 용 DRX 설치 시 Visual Studio 2013용 Visual C++ 재배포 가능 패키지 (이하 VS2013 재배포 패키지) 설치 관련 문제
- 문제 현상
- DRX 설치 후 자동 추가 설치하는 "VS2013 재배포 패키지" 설치 오류 현상
- 원인: VS2013 재배포 패키지 관련 자체 결함.
해결 방법
Windows Server 2012 R2
- 설명 : "VS2013 재배포 패키지"는 Windows Server 2012 R2의 경우 KB2883200(Windows Update)이 필요합니다.
- 해결 방법: 윈도우 업데이트 KB2883200가 설치되어 있는지 확인합니다. 설치가 안되어 있다면 윈도우 업데이트를 통해서 추가 설치 합니다.
- Windows Server 2008 R2 SP1
- 설명 : 0x800b010a 에러가 발생합니다.
[0AD8:05C0][2018-07-26T15:33:04]e000: Error 0x800b010a: Failed authenticode verification of payload: C:\ProgramData\Package Cache\.unverified\vcRuntimeMinimum_x64 [0AD8:05C0][2018-07-26T15:33:04]e000: Error 0x800b010a: Failed to verify signature of payload: vcRuntimeMinimum_x64 [0AD8:05C0][2018-07-26T15:33:04]e310: Failed to verify payload: vcRuntimeMinimum_x64 at path: C:\ProgramData\Package Cache\.unverified\vcRuntimeMinimum_x64, error: 0x800b010a. Deleting file.
- 해결 방법: 윈도우 업데이트에서 ".NET Framwork 3.5.1"항목을 추가 업데이트 합니다.
- 설명 : 0x800b010a 에러가 발생합니다.
- 문제 현상
리소스 시작 불가
- UTF-8 with BOM으로 인한 설정 읽기 실패
문제 현상
drx.conf 읽기 실패
DRX 로그E1120 16:37:02.690660 t42053 config] Failed to load [/opt/DRX/drx.conf]. /opt/DRX/drx.conf(1): '=' character not found in line
bsr 설정 읽기 실패
DRX 로그E1120 16:37:52.810044 t42132 config] Failed to get drbd configuration: Can't get drbd configuration. (exit_code: 2560) E1120 16:37:52.810068 t42132 config] Output: drbd.d/1/r0.res:1: Parse error: 'global | common | resource | skip | include' expected, E1120 16:37:52.810070 t42132 config] Output: but got '▒'
- 원인: BOM 정보로 인해 설정 파일 파싱에 실패함.
해결 방법
- Centos 6, 7
file 명령을 통해 파일의 인코딩을 확인합니다.
[root@drxdev1 test]# file r1.res r1.res: UTF-8 Unicode (with BOM) text, with CRLF line terminators
- vi 를 통한 수정
- vi로 파일을 열고 다음을 입력한 뒤 저장합니다.
:set nobomb
- vi로 파일을 열고 다음을 입력한 뒤 저장합니다.
- Windows
- 메모장(notepad)로 파일을 열고 '다른이름으로 저장'을 통해 인코딩을 'ANSI'로 변경합니다.
- Centos 6, 7
연결 불가
다음은 복제 연결 구성 절차의 순서를 따라가며 세부적으로 점검하는 과정을 설명했습니다(Linux 기준으로 설명했지만 Windows 도 과정은 동일합니다).
네트워크 환경
- 노드의 방화벽 정책 허용 목록에 bsr의 IP와 drx의 ip가 설정되어 있는지 확인 합니다.
- 루프백 ping확인
- 루프백 주소(127.0.0.1)로는 ping 응답이 있지만 로컬 ip 주소로는 ping 응답이 없을 경우 네트워크 환경 구성에 문제가 있는 상태 입니다. 이럴 경우 네트워크 관리자에게 문의해야 합니다.
버전
버전 호환성을 확인합니다.
- drbd 8.4.8 이상
- drbd util 8.9.10 이상
- fsr 1.4 이상
- bsr 1.0 이상\
- 로컬 drx 와 원격 drx 의 버전이 같은지 확인
[root@c65-3 build_files]# lsmod | grep drbd drbd 374888 3 [root@c65-3 build_files]#
복제 구성 설정
- 리소스 구성파일이 ANSI 또는 UTF8 형식으로 저장되어 있는지 확인합니다.(UTF8 with BOM 형식을 지원하지 않습니다)
- hostname 을 변경했다면 구성파일에도 정상 적용됬는 지 확인합니다.
- 구성파일 내의 통신 포트 중복이 없는지 확인 합니다.
- bsrsetup show 로 BSR에 로드된 ip가 리소스 파일에 설정된 ip와 동일한지 확인합니다.
- global 항목에 wfc-timeout 설정여부를 확인합니다. 설정이 되어 있지 않을 시 wfc-timeout 값을 1로 설정합니다.
- 리소스의 "net" 항목에 ping-timeout의 값을 추가합니다. 기본값은 500ms이며 넉넉하게 30(3초)으로 설정합니다.
단계별로 연결 확인하기
로컬 drx 와 원격 drx 간의 연결
- bsr의 리소스들을 모두 standalone상태로 변경 합니다: bsradm disconnect r0
- drx를 설치하고 drx 서비스를 시작하여 양측 drx 를 연결합니다.
- netstat 에서 drx ip/포트의 연결상태를 확인합니다.(연결된 상태는 ESTABLISHED)
- 정상일 경우 리소스의 연결 상태는 bridged 입니다.
- 이 시점에 drx 는 bsr로 연결을 시도하는 connecting/waiting 상태로 바뀌고 bsr 은 아직 standalone 입니다.
- 양측 drx의 상태가 아직도 bridging이라면 drx간에 연결을 시도하는 상태이며 일정시간이 지나도 변화가 없다면 WAN 구간 상의 연결을 먼저 점검해 봐야 합니다.
- icmp ping 은 방화벽 정책에 의해 차단되어 있을 가능성이 있으므로 ping 으로 연결 상태를 섣불리 판단하지 마세요. 네트워크 연결 점검 도구나 drx에 포함된 drxsim 등을 통해 로컬과 원격간의 TCP 연결 가능 여부를 확인합니다.
- bsr 리소스 구성을 drx와 연동하지 않고 bsr간 직접 연결하도록 변경하여 정상 연결되는 지 확인 합니다. 정상 연결된다면 drx 연결의 문제입니다.
- bsr 과 drx 사이의 연결
- standalone이었던 bsr 리소스의 상태를 connecting상태로 변경합니다( bsradm connect)
- 정상일 경우 bsr과 drx가 established 로 연결됩니다.
- 만약 bsr의 status가 connecting이고 연결이 성립되지 않는다면 netstat 출력물에서 bsr ip가 LISTEN상태인지 확인합니다.
- local drx가 local bsr ip로 SYN_SENT를 시도하는지 확인합니다.
- TCP의 상태변경이 신속하게 바뀔 수 있기 때문에 netstat에 SYN_SENT 상태 출력이 파악되지 않을 수도 있습니다.
netstat의 결과를 다음과 같은 스크립트 형태로 지속적으로 모니터링 합니다.
$> while(true); do date; netstat -nap | grep 779 | sort -k 3; sleep 1; clear; done Thu Aug 23 08:51:23 PDT 2018 tcp 0 0 192.168.100.3:35814 192.168.100.3:7792 ESTABLISHED - tcp 0 0 192.168.100.3:7791 0.0.0.0:* LISTEN - tcp 0 0 192.168.100.3:7792 192.168.100.3:35814 ESTABLISHED 8033/drx tcp 0 0 192.168.100.3:7793 192.168.100.2:60676 ESTABLISHED 8033/drx tcp 0 0 192.168.100.3:7795 0.0.0.0:* LISTEN 8033/drx tcp 0 0 192.168.100.3:7796 192.168.100.2:43684 ESTABLISHED 8033/drx tcp 0 1 10.10.0.182:50460 31.1.1.2:7793 SYN_SENT 8033/drx tcp 0 1 10.10.0.182:57966 31.1.1.2:7796 SYN_SENT 8033/drx unix 3 [ ] STREAM CONNECTED 18779 2477/gconfd-2 unix 3 [ ] STREAM CONNECTED 20779 2512/gnome-panel
- bsr과 drx가 연결되면 netstat 출력물에서 리소스의 bsr ip와 drx의 ip가 eastablished 상태가 되는지 확인합니다.
- drx 로그에 실패(Ex. connection refuse)에 대한 로그가 있는지 확인합니다.
- standalone이었던 bsr 리소스의 상태를 connecting상태로 변경합니다( bsradm connect)
- 이 단계에 까지 이르면 서포트 파일을 수집하여 로그를 확보하고 담당자에게 분석을 요청합니다.
VIP 연결 불가
VIP 를 사용하는 Active/Standby 양 노드에서 동일한 VIP 를 통해 소켓 Bind 가 수행될 경우 양노드 간의 통신 간섭이 발생할 수 있습니다. VIP로 연동(SDR, MDR 등)할 경우 대기 노드의 DRX는 중지해야 두어야 합니다.
대기노드로 페일오버를 하게 되면 반대로 Active의 DRX를 내리고(down) Standby의 리소스를 시작(up) 하기 전에 DRX 를 시작시켜야 연결이 원활합니다.