DRX를 구성하기 위한 각 단계별 절차에서 발생할 수 있는 문제들에 대한 해결 가이드들 제공합니다.
문제1. 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 에러가 발생합니다.
- 문제 현상
문제2. 리소스 시작이 안됩니다.
- 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
drbd 설정 읽기 실패
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
문제3. DRX 연결이 안됩니다.
DRX 연결이 성립되지 않는 원인은 다양할 수 있습니다. 다음의 구성절차 순서에 따라 해당 항목들에 대해 세부적으로 점검해야 합니다. 다음은 리눅스 기준의 문제 해결 가이드 입니다.
네트워크 환경
- 노드의 방화벽 정책 허용 목록에 drbd의 IP와 drx의 ip가 설정되어 있는지 확인 합니다. 리소스에서 사용하는 ip와 포트에 대해 미 적용되어 있을 시 다음과 같이 조치합니다.
Centos 6
/etc/sysconfig/iptables 파일에 설정할 내용을 추가합니다.
-A INPUT -p tcp -s \{소스 아이피\} -d \{목적지 아이피\} --dport \{허용할 포트\} -j ACCEPT
Centos 7
포트 추가하는 명령어 : firewall-cmd --permanent --zone=public --add-port=\{허용할 포트\}/tcp 방화벽 재시작 명령어 : firewall-cmd --reload 열린 port 확인 명령어 : firewall-cmd --zone=public --list-all
- 루프백 ping확인
- 루프백 주소(127.0.0.1)로는 ping 응답이 있지만 로컬 ip 주소로는 ping 응답이 없을 경우 네트워크 환경 구성에 문제가 있는 상태 입니다. 이럴 경우 네트워크 관리자에게 문의해야 합니다.
drbd 버전 확인
- drbd : 8.4.8 이상
- drbd util : 8.9.10 이상
- lsmod | grep drbd 명령어로 drbd 커널 드라이버 모듈이 로드되어 있는지 확인 합니다.
[root@c65-3 build_files]# lsmod | grep drbd drbd 374888 3 [root@c65-3 build_files]#
DRX 버전 확인
로컬노드의 DRX 버전과 원격노드의 DRX 버전이 동일한지 확인합니다. DRX는 버전 간 하위호환성을 제공하지만 되도록 동일한 버전의 DRX 로 구성하는 것을 권장합니다.
리소스 설정 확인
- 리소스 구성파일 ANSI 형식 또는 UTF8 형식으로 저장되어 있는지 확인합니다.→ UTF8 with BOM 형식을 지원하지 않습니다.
- hostname 설정 확인: hostname 변경 시 정상 적용 됬는 지 여부에 대해 주의해야 합니다.
- 리소스 별 개별 port 사용 여부: 포트 중복 사용이 없는지 확인 합니다.
DRBD 구성
- DRBD의 리소스 구성을 DRX와 연동하지 않고 DRBD간 직접 연결하도록 변경하여 정상 연결되는 지 확인 합니다.
- drbdsetup show 로 drbd에 로드된 ip가 리소스 파일에 설정된 ip와 동일한지 확인합니다.
- global 항목에 wfc-timeout 설정여부를 확인합니다. 설정이 되어 있지 않을 시 wfc-timeout 값을 1로 설정합니다.
- 리소스의 "net" 항목에 ping-timeout의 값을 추가합니다. 기본값은 500ms이며 넉넉하게 30(3초)으로 설정합니다.
DRX 구성
- DRX 간 연결
- drbd의 리소스들을 모두 standalone상태로 변경 합니다: drbdadm disconnect r0
- drx를 설치하고 drxsvc를 start한 상태에서 drx간의 연결을 확인합니다.
- netstat 출력물에서 drx ip와 포트가 LISTEN/ESTABLISHE/TIME_WAIT인지 여부를 확인합니다.
- 정상적일 경우 리소스의 연결 상태는 bridged 상태 입니다.
- 이 때의 drbd 상태는 standalone 이며 drx 가 drbd와 연결하기 위한 상태는 connecting / waiting 상태로 전환됩니다.
- 양노드의 drx의 상태가 bridging이라면 drx간에 연결을 시도하는 상태이며 일정시간이 지나도 변화가 없다면 WAN 구간 상의 연결을 먼저 점검해 봐야 합니다.
- icmp ping 은 보통 방화벽 정책에 의해 차단되어 있을 가능성이 있기 때문에 drbdsim 을 통한 TCP 연결을 수행해 볼 필요가 있습니다.
- drbd - drx 간 연결
- standalone이었던 drbd 리소스의 상태를 connecting상태로 변경한다. → drbdadm connect 명령어로 상태를 변경 합니다.
- cat /proc/kmsg/의 로그에서 리소스의 상태가 WFConnection으로 변경되는지 확인합니다.
- 정상 상황일 경우 drbd와 drx가 연결되면 established 로 연결이 성립됩니다.
- 만약 drbd의 status가 connecting이고 연결이 성립되지 않는다면 netstat 출력물에서 drbd ip가 LISTEN상태인지 확인합니다.
- local drx가 local drbd 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
- drbd와 drx가 연결되면 netstat 출력물에서 리소스의 drbd ip와 drx의 ip가 eastablished 상태가 되는지 확인합니다.
- drx 로그에 실패(Ex. connection refuse)에 대한 로그가 있는지 확인합니다.
- standalone이었던 drbd 리소스의 상태를 connecting상태로 변경한다. → drbdadm connect 명령어로 상태를 변경 합니다.
- 로그 수집
- cat /etc/sysconfig/network-scripts/ifcfg-* 명령어로 출력되는 결과물을 수집합니다.
- /var/log/messages
- service iptables status
- ip a 명령어로 출력되는 결과물
문제4. Virtual IP로 구성 시 DRX 연결이 잘 안됩니다.
DRX를 VIP로 연동(SDR, MDR 등)할 경우 drbd 리소스가 down 된 노드의 DRX는 기동을 중지해야 하고 리소스가 up 되는 시점에 DRX 를 기동시켜야 연결이 원할합니다.