재부팅 후 DRBD가 Connected Diskless/Diskless와 함께 나타납니다.

재부팅 후 DRBD가 Connected Diskless/Diskless와 함께 나타납니다.

정전 후 큰 문제 발생, 매번 재부팅데이터베이스RB제안하다디스크 없는/디스크 없는 연결상태.

주요 문제:

  • dump-md 응답: "더러운" 메타데이터가 발견되었습니다.
  • apply-al 명령은 open(/dev/nvme0n1p1) failed: Device or Resource is busy 메시지와 함께 종료 코드 20으로 종료됩니다.
  • drbd 리소스 구성은 단독으로 열 수 없습니다.

환경에 관하여:

이 drbd 리소스는 일반적으로 lvm의 블록 스토리지로 사용되며 proxmox ve 5.3-8 클러스터의 (공유 lvm) 스토리지로 구성됩니다. drbd 블록 장치 위에 lvm을 구성했습니다. drbd 호스트 lvm 구성에서 권장되는 대로 drbd 서비스(/dev/nvme0n1p1) 아래의 장치는 필터링됩니다(/etc/lvm/lvm.conf는 아래에 표시됨).

drbd 아래의 장치는 PCIe NVMe 장치입니다.

systemctl에 의해 표시되는 몇 가지 추가 속성이 있습니다.

root@pmx0:~# systemctl list-units | grep nvme
sys-devices-pci0000:00-0000:00:01.1-0000:0c:00.0-nvme-nvme0-nvme0n1-nvme0n1p1.device             loaded active     plugged   /sys/devices/pci0000:00/0000:00:01.1/0000:0c:00.0/nvme/nvme0/nvme0n1/nvme0n1p1
sys-devices-pci0000:00-0000:00:01.1-0000:0c:00.0-nvme-nvme0-nvme0n1.device                       loaded active     plugged   /sys/devices/pci0000:00/0000:00:01.1/0000:0c:00.0/nvme/nvme0/nvme0n1

sytemctl 일반 SAS 디스크에 나열된 기타 저장 장치는 약간 다르게 보입니다.

root@pmx0:~# systemctl list-units | grep sdb
sys-devices-pci0000:00-0000:00:01.0-0000:0b:00.0-host0-target0:2:1-0:2:1:0-block-sdb-sdb1.device loaded active     plugged   PERC_H710 1
sys-devices-pci0000:00-0000:00:01.0-0000:0b:00.0-host0-target0:2:1-0:2:1:0-block-sdb-sdb2.device loaded active     plugged   PERC_H710 2
sys-devices-pci0000:00-0000:00:01.0-0000:0b:00.0-host0-target0:2:1-0:2:1:0-block-sdb.device      loaded active     plugged   PERC_H710

ls를 사용하여 NVMe /sys/devices/를 나열합니다..:

root@pmx0:~# ls /sys/devices/pci0000:00/0000:00:01.1/0000:0c:00.0/nvme/nvme0/nvme0n1/nvme0n1p1
alignment_offset  dev  discard_alignment  holders  inflight  partition  power  ro  size  start  stat  subsystem  trace  uevent

도움이 되지 않는 것:

  • 다시 시작해도 소용없어
  • drbd 서비스를 다시 시작해도 도움이 되지 않습니다
  • drbdadm 분리/연결 끊기/연결/서비스 다시 시작이 도움이 되지 않습니다.
  • nfs-kernel-server 서비스는 이러한 drbd 노드에 구성되어 있지 않습니다(따라서 nfs-server를 구성 해제할 수 없음).

몇 가지 조사를 마친 후:

dump-md 응답: 발견됨메타데이터가 "더럽습니다", apply-al을 수행하십시오. 첫 번째 apply-al 명령은 다음 메시지와 함께 종료 코드 20으로 종료됩니다. open(/dev/nvme0n1p1)실패: 장치 또는 리소스가 사용 중입니다.

것 같다문제는 이 기기다.(/dev/nvme0n1p1)은 내 drbd 리소스 구성에서 사용됩니다.단독으로 열 수 없습니다..

DRBD 명령 실패:

root@pmx0:~# drbdadm attach r0
open(/dev/nvme0n1p1) failed: Device or resource busy
Operation canceled.
Command 'drbdmeta 0 v08 /dev/nvme0n1p1 internal apply-al' terminated with exit code 20
root@pmx0:~# drbdadm apply-al r0
open(/dev/nvme0n1p1) failed: Device or resource busy
Operation canceled.
Command 'drbdmeta 0 v08 /dev/nvme0n1p1 internal apply-al' terminated with exit code 20

root@pmx0:~# drbdadm dump-md r0
open(/dev/nvme0n1p1) failed: Device or resource busy

Exclusive open failed. Do it anyways?
[need to type 'yes' to confirm] yes

Found meta data is "unclean", please apply-al first
Command 'drbdmeta 0 v08 /dev/nvme0n1p1 internal dump-md' terminated with exit code 255

DRBD 서비스 상태/명령:

root@pmx0:~# drbd-overview
 0:r0/0  Connected Secondary/Secondary Diskless/Diskless
root@pmx0:~# drbdadm dstate r0
Diskless/Diskless
root@pmx0:~# drbdadm disconnect r0
root@pmx0:~# drbd-overview
 0:r0/0  . . .
root@pmx0:~# drbdadm detach r0
root@pmx0:~# drbd-overview
 0:r0/0  . . .

리소스 r0을 다시 연결해 보세요.

root@pmx0:~# drbdadm attach r0
open(/dev/nvme0n1p1) failed: Device or resource busy
Operation canceled.
Command 'drbdmeta 0 v08 /dev/nvme0n1p1 internal apply-al' terminated with exit code 20
root@pmx0:~# drbdadm apply-al r0
open(/dev/nvme0n1p1) failed: Device or resource busy
Operation canceled.
Command 'drbdmeta 0 v08 /dev/nvme0n1p1 internal apply-al' terminated with exit code 20

lsof, 퓨저 제로 출력:

root@pmx0:~# lsof /dev/nvme0n1p1
root@pmx0:~# fuser /dev/nvme0n1p1
root@pmx0:~# fuser /dev/nvme0n1
root@pmx0:~# lsof /dev/nvme0n1

리소스 디스크 파티션 및 LVM 구성:

root@pmx0:~# fdisk -l /dev/nvme0n1
Disk /dev/nvme0n1: 1.9 TiB, 2048408248320 bytes, 4000797360 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x59762e31

Device         Boot Start        End    Sectors  Size Id Type
/dev/nvme0n1p1       2048 3825207295 3825205248  1.8T 83 Linux
root@pmx0:~# pvs
  PV             VG           Fmt  Attr PSize   PFree
  /dev/sdb2      pve          lvm2 a--  135.62g  16.00g
root@pmx0:~# vgs
  VG           #PV #LV #SN Attr   VSize   VFree
  pve            1   3   0 wz--n- 135.62g  16.00g
root@pmx0:~# lvs
  LV            VG           Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  data          pve          twi-a-tz--  75.87g             0.00   0.04
  root          pve          -wi-ao----  33.75g
  swap          pve          -wi-ao----   8.00g
root@pmx0:~# vi /etc/lvm/lvm.conf
root@pmx0:~# cat /etc/lvm/lvm.conf | grep nvm
        filter = [ "r|/dev/nvme0n1p1|", "a|/dev/sdb|", "a|sd.*|", "a|drbd.*|", "r|.*|" ]

DRBD 리소스 구성:

root@pmx0:~# cat /etc/drbd.d/r0.res
resource r0 {
        protocol C;
        startup {
                wfc-timeout  0;     # non-zero wfc-timeout can be dangerous (http://forum.proxmox.com/threads/3465-Is-it-safe-to-use-wfc-timeout-in-DRBD-configuration)
                degr-wfc-timeout 300;
        become-primary-on both;
        }
        net {
                cram-hmac-alg sha1;
                shared-secret "*********";
                allow-two-primaries;
                after-sb-0pri discard-zero-changes;
                after-sb-1pri discard-secondary;
                after-sb-2pri disconnect;
                #data-integrity-alg crc32c;     # has to be enabled only for test and disabled for production use (check man drbd.conf, section "NOTES ON DATA INTEGRITY")
        }
        on pmx0 {
                device /dev/drbd0;
                disk /dev/nvme0n1p1;
                address 10.0.20.15:7788;
                meta-disk internal;
        }
        on pmx1 {
                device /dev/drbd0;
                disk /dev/nvme0n1p1;
                address 10.0.20.16:7788;
                meta-disk internal;
        }
        disk {
                # no-disk-barrier and no-disk-flushes should be applied only to systems with non-volatile (battery backed) controller caches.
                # Follow links for more information:
                # http://www.drbd.org/users-guide-8.3/s-throughput-tuning.html#s-tune-disable-barriers
                # http://www.drbd.org/users-guide/s-throughput-tuning.html#s-tune-disable-barriers
                no-disk-barrier;
                no-disk-flushes;
        }
}

기타 노드:

root@pmx1:~# drbd-overview
 0:r0/0  Connected Secondary/Secondary Diskless/Diskless

등. 모든 명령 응답 및 구성은 위의 노드 pmx0과 동일하게 표시됩니다.

Debian 및 DRBD 버전:

root@pmx0:~# uname -a
Linux pmx0 4.15.18-10-pve #1 SMP PVE 4.15.18-32 (Sat, 19 Jan 2019 10:09:37 +0100) x86_64 GNU/Linux
root@pmx0:~# cat /etc/debian_version
9.8
root@pmx0:~# dpkg --list| grep drbd
ii  drbd-utils                           8.9.10-2                       amd64        RAID 1 over TCP/IP for Linux (user utilities)
root@pmx0:~# lsmod | grep drbd
drbd                  364544  1
lru_cache              16384  1 drbd
libcrc32c              16384  2 dm_persistent_data,drbd
root@pmx0:~# modinfo drbd
filename:       /lib/modules/4.15.18-10-pve/kernel/drivers/block/drbd/drbd.ko
alias:          block-major-147-*
license:        GPL
version:        8.4.10
description:    drbd - Distributed Replicated Block Device v8.4.10
author:         Philipp Reisner <[email protected]>, Lars Ellenberg <[email protected]>
srcversion:     9A7FB947BDAB6A2C83BA0D4
depends:        lru_cache,libcrc32c
retpoline:      Y
intree:         Y
name:           drbd
vermagic:       4.15.18-10-pve SMP mod_unload modversions
parm:           allow_oos:DONT USE! (bool)
parm:           disable_sendpage:bool
parm:           proc_details:int
parm:           minor_count:Approximate number of drbd devices (1-255) (uint)
parm:           usermode_helper:string

산:

root@pmx0:~# cat /proc/mounts
sysfs /sys sysfs rw,nosuid,nodev,noexec,relatime 0 0
proc /proc proc rw,relatime 0 0
udev /dev devtmpfs rw,nosuid,relatime,size=24679656k,nr_inodes=6169914,mode=755 0 0
devpts /dev/pts devpts rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000 0 0
tmpfs /run tmpfs rw,nosuid,noexec,relatime,size=4940140k,mode=755 0 0
/dev/mapper/pve-root / ext4 rw,relatime,errors=remount-ro,data=ordered 0 0
securityfs /sys/kernel/security securityfs rw,nosuid,nodev,noexec,relatime 0 0
tmpfs /dev/shm tmpfs rw,nosuid,nodev 0 0
tmpfs /run/lock tmpfs rw,nosuid,nodev,noexec,relatime,size=5120k 0 0
tmpfs /sys/fs/cgroup tmpfs ro,nosuid,nodev,noexec,mode=755 0 0
cgroup /sys/fs/cgroup/systemd cgroup rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/lib/systemd/systemd-cgroups-agent,name=systemd 0 0
pstore /sys/fs/pstore pstore rw,nosuid,nodev,noexec,relatime 0 0
cgroup /sys/fs/cgroup/net_cls,net_prio cgroup rw,nosuid,nodev,noexec,relatime,net_cls,net_prio 0 0
cgroup /sys/fs/cgroup/hugetlb cgroup rw,nosuid,nodev,noexec,relatime,hugetlb 0 0
cgroup /sys/fs/cgroup/cpuset cgroup rw,nosuid,nodev,noexec,relatime,cpuset 0 0
cgroup /sys/fs/cgroup/cpu,cpuacct cgroup rw,nosuid,nodev,noexec,relatime,cpu,cpuacct 0 0
cgroup /sys/fs/cgroup/blkio cgroup rw,nosuid,nodev,noexec,relatime,blkio 0 0
cgroup /sys/fs/cgroup/memory cgroup rw,nosuid,nodev,noexec,relatime,memory 0 0
cgroup /sys/fs/cgroup/rdma cgroup rw,nosuid,nodev,noexec,relatime,rdma 0 0
cgroup /sys/fs/cgroup/devices cgroup rw,nosuid,nodev,noexec,relatime,devices 0 0
cgroup /sys/fs/cgroup/freezer cgroup rw,nosuid,nodev,noexec,relatime,freezer 0 0
cgroup /sys/fs/cgroup/pids cgroup rw,nosuid,nodev,noexec,relatime,pids 0 0
cgroup /sys/fs/cgroup/perf_event cgroup rw,nosuid,nodev,noexec,relatime,perf_event 0 0
systemd-1 /proc/sys/fs/binfmt_misc autofs rw,relatime,fd=39,pgrp=1,timeout=0,minproto=5,maxproto=5,direct,pipe_ino=20879 0 0
debugfs /sys/kernel/debug debugfs rw,relatime 0 0
hugetlbfs /dev/hugepages hugetlbfs rw,relatime,pagesize=2M 0 0
mqueue /dev/mqueue mqueue rw,relatime 0 0
sunrpc /run/rpc_pipefs rpc_pipefs rw,relatime 0 0
configfs /sys/kernel/config configfs rw,relatime 0 0
fusectl /sys/fs/fuse/connections fusectl rw,relatime 0 0
/dev/sda1 /mnt/intelSSD700G ext3 rw,relatime,errors=remount-ro,data=ordered 0 0
lxcfs /var/lib/lxcfs fuse.lxcfs rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other 0 0
/dev/fuse /etc/pve fuse rw,nosuid,nodev,relatime,user_id=0,group_id=0,default_permissions,allow_other 0 0
10.0.0.15:/samba/shp /mnt/pve/bckNFS nfs rw,relatime,vers=3,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=10.0.0.15,mountvers=3,mountport=42772,mountproto=udp,local_lock=none,addr=10.0.0.15 0 0

답변1

설정에서도 동일한 문제에 직면했지만 drbd구성에서 LVM 이름을 지정했다는 사실을 발견했습니다. 이는 서비스를 시작할 때 drbd구성에 따라 마운트 지점 자체를 마운트한다는 의미입니다.

마운트 지점이 /etc/fstab여기에 정의되어 있고 주석 처리되어야 하며 운영 체제에 의해 마운트되어서는 안 된다는 것을 알았습니다.

이것이 내가 해결한 방법입니다.

답변2

제 생각에는 가장 좋은 방법은 실제로 필요한 것만 삭제 a|sd.*|하고 유지하는 것입니다. r|/dev/nvme0n1p1|OS는 /dev/sdb(LVM이 사용하는)에 설치되므로 이론적으로 추가해야 할 유일한 것은 (lvm 스캔에 포함되기 위해) 그것뿐이고 /dev/sdb다른 drbd.*것은 제외됩니다. 필터 섹션은 다음과 같아야 합니다.

filter = [ "a|/dev/sdb|", "a|drbd.*|", "r|.*|" ]

위의 내용 외에도 filter =해당 항목이 파일에 여러 번 나타나는지 확인하십시오 /etc/lvm/lvm.conf. 항목이 여러 개 있으면 충돌이 발생할 수 있습니다.

관련 정보