ไม่สามารถสลับ drbd เป็นสำรองได้


11

ผมทำงานdrbd83กับocfs2ในcentos 5และวางแผนที่จะใช้packemakerกับพวกเขา ก่อนหน้านี้ฉันกำลังเผชิญกับdrbdปัญหาสมองแตก

version: 8.3.13 (api:88/proto:86-96)
GIT-hash: 83ca112086600faacab2f157bc5a9324f7bd7f77 build by mockbuild@builder10.centos.org, 2012-05-07 11:56:36

 1: cs:StandAlone ro:Primary/Unknown ds:UpToDate/DUnknown   r-----
    ns:0 nr:0 dw:112281991 dr:797551 al:99 bm:6401 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:60

ฉันไม่สามารถสลับ drbd เป็นสำรองได้

drbdadm secondary r0
1: State change failed: (-12) Device is held open by someone
Command 'drbdsetup 1 secondary' terminated with exit code 11

การกำหนดค่าdrbdทรัพยากรของฉัน:

resource r0 {
        syncer { 
                rate 1000M; 
                verify-alg sha1;
        }

        disk {
                on-io-error detach;
        }

        handlers {
           pri-lost-after-sb "/usr/lib/drbd/notify-split-brain.sh root";
        }

        net {
                allow-two-primaries;
                after-sb-0pri discard-younger-primary;
                after-sb-1pri call-pri-lost-after-sb;
                after-sb-2pri call-pri-lost-after-sb;
        }
        startup { become-primary-on both; }

        on serving_4130{
                device          /dev/drbd1;
                disk            /dev/sdb1;
                address         192.168.4.130:7789;
                meta-disk       internal;
        }
        on MT305-3182 {
                device          /dev/drbd1;
                disk            /dev/xvdb1;
                address         192.168.3.182:7789;
                meta-disk       internal;
        }
}

สถานะของ ocfs2 สถานะ:

service ocfs2 status
Configured OCFS2 mountpoints:  /data

lsof แสดงว่ามีกระบวนการหนึ่งที่สัมพันธ์กับ drbd

lsof | grep drbd
COMMAND     PID      USER   FD      TYPE             DEVICE     SIZE       NODE NAME
drbd1_wor  7782      root  cwd       DIR              253,0     4096          2 /
drbd1_wor  7782      root  rtd       DIR              253,0     4096          2 /
drbd1_wor  7782      root  txt   unknown                                        /proc/7782/exe

และมันคือ symlink ที่ตายแล้ว:

# ls -l /proc/7782/exe
ls: cannot read symbolic link /proc/7782/exe: No such file or directory
lrwxrwxrwx 1 root root 0 May  4 09:56 /proc/7782/exe

# ps -ef | awk '$2 == "7782" { print $0 }'
root      7782     1  0 Apr22 ?        00:00:20 [drbd1_worker]

ขอให้สังเกตว่ากระบวนการนี้ถูกห่อในวงเล็บเหลี่ยม:

man ps:

args       COMMAND  command with all its arguments as a string. Modifications to the arguments may be shown. The
                    output in this column may contain spaces. A process marked <defunct> is partly dead, waiting to
                    be fully destroyed by its parent. Sometimes the process args will be unavailable; when this
                    happens, ps will instead print the executable name in brackets.

ดังนั้นคำถามสุดท้ายคือเราจะกู้ DRBD ด้วยตนเองได้อย่างไรในกรณีนี้โดยไม่ต้องรีบูตเครื่อง ?


ตอบกลับ @andreask:

ตารางพาร์ทิชันของฉัน:

# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup00-LogVol00
                       35G  6.9G   27G  21% /
/dev/xvda1             99M   20M   74M  22% /boot
tmpfs                 1.0G     0  1.0G   0% /dev/shm
/dev/drbd1            100G  902M  100G   1% /data

ชื่ออุปกรณ์:

# dmsetup ls --tree -o inverted
 (202:2)
 ├─VolGroup00-LogVol01 (253:1)
 └─VolGroup00-LogVol00 (253:0)

ให้ความสนใจกับอุปกรณ์บล็อก ( 253:0) มันเหมือนกับจากผลลัพธ์ของlsof:

# lvdisplay 
  --- Logical volume ---
  LV Name                /dev/VolGroup00/LogVol00
  VG Name                VolGroup00
  LV UUID                vCd152-amVZ-GaPo-H9Zs-TIS0-KI6j-ej8kYi
  LV Write Access        read/write
  LV Status              available
  # open                 1
  LV Size                35.97 GB
  Current LE             1151
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0

ตอบกลับ @Doug:

# vgdisplay 
  --- Volume group ---
  VG Name               VolGroup00
  System ID             
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  3
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                2
  Open LV               2
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               39.88 GB
  PE Size               32.00 MB
  Total PE              1276
  Alloc PE / Size       1276 / 39.88 GB
  Free  PE / Size       0 / 0   
  VG UUID               OTwzII-AP5H-nIbH-k2UA-H9nw-juBv-wcvmBq

อัปเดตศุกร์ 17 พฤษภาคม 16:08:16 ICT 2013

นี่คือแนวคิดบางส่วน จากLars Ellenberg :

หากระบบไฟล์ยังคงติดตั้ง ... โอ้ดี unmount มัน ไม่ขี้เกียจ แต่จริงๆ

ฉันแน่ใจว่าได้ยกเลิกการต่อเชื่อม OCFS2 แล้ว

หาก nfs เกี่ยวข้องลอง

killall -9 nfsd
killall -9 lockd
echo 0 > /proc/fs/nfsd/threads

ไม่ NFS ไม่มีส่วนเกี่ยวข้อง

หากเกี่ยวข้องกับ lvm / dmsetup / kpartx / multipath / udev ให้ลอง

dmsetup ls --tree -o inverted

และตรวจสอบว่ามีการอ้างอิงจาก drbd

อย่างที่คุณเห็นจากผลลัพธ์ข้างต้นของฉัน LVM ไม่เกี่ยวข้องกับ DRBD:

pvdisplay -m

  --- Physical volume ---
  PV Name               /dev/xvda2
  VG Name               VolGroup00
  PV Size               39.90 GB / not usable 20.79 MB
  Allocatable           yes (but full)
  PE Size (KByte)       32768
  Total PE              1276
  Free PE               0
  Allocated PE          1276
  PV UUID               1t4hkB-p43c-ABex-stfQ-XaRt-9H4i-51gSTD

  --- Physical Segments ---
  Physical extent 0 to 1148:
    Logical volume      /dev/VolGroup00/LogVol00
    Logical extents     0 to 1148
  Physical extent 1149 to 1275:
    Logical volume      /dev/VolGroup00/LogVol01
    Logical extents     0 to 126

fdisk -l

Disk /dev/xvda: 42.9 GB, 42949672960 bytes
255 heads, 63 sectors/track, 5221 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

    Device Boot      Start         End      Blocks   Id  System
/dev/xvda1   *           1          13      104391   83  Linux
/dev/xvda2              14        5221    41833260   8e  Linux LVM

Disk /dev/xvdb: 107.3 GB, 107374182400 bytes
255 heads, 63 sectors/track, 13054 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

    Device Boot      Start         End      Blocks   Id  System
/dev/xvdb1               1       13054   104856223+  83  Linux

ถ้าห่วง / cryptoloop / etc เกี่ยวข้องตรวจสอบว่าหนึ่งในนั้นยังคงเข้าถึงพวกเขา

ถ้ามีการใช้งาน virtualization tecknique ให้ปิด / ทำลายคอนเทนเนอร์ / VM ทั้งหมดที่อาจเข้าถึง drbd นั้นในช่วงเวลาชีวิต

ไม่เลย

บางครั้งมันเป็นเพียง udev หรือเทียบเท่าทำการแข่งขัน

ฉันได้ปิดการใช้งานmultipathกฎและแม้กระทั่งหยุดudevdและไม่มีอะไรเปลี่ยนแปลง

บางครั้งมันเป็นซ็อกเก็ตโดเมนยูนิกซ์หรือที่คล้ายกันยังคงเปิดอยู่ (ไม่จำเป็นต้องแสดงใน lsof / fuser)

ถ้าเป็นเช่นนั้นเราจะหาซ็อกเก็ตยูนิกซ์นี้ได้อย่างไร?


อัพเดทพุธ 22 พฤษภาคม 22:10:41 ICT 2013

นี่คือ stacktrace ของกระบวนการของผู้ปฏิบัติงาน DRBD เมื่อทิ้งผ่านคีย์ Magic SysRq :

kernel: drbd1_worker  S ffff81007ae21820     0  7782      1          7795  7038 (L-TLB)
kernel:  ffff810055d89e00 0000000000000046 000573a8befba2d6 ffffffff8008e82f 
kernel:  00078d18577c6114 0000000000000009 ffff81007ae21820 ffff81007fcae040 
kernel:  00078d18577ca893 00000000000002b1 ffff81007ae21a08 000000017a590180 
kernel: Call Trace: 
kernel:  [<ffffffff8008e82f>] enqueue_task+0x41/0x56 
kernel:  [<ffffffff80063002>] thread_return+0x62/0xfe 
kernel:  [<ffffffff80064905>] __down_interruptible+0xbf/0x112 
kernel:  [<ffffffff8008ee84>] default_wake_function+0x0/0xe 
kernel:  [<ffffffff80064713>] __down_failed_interruptible+0x35/0x3a 
kernel:  [<ffffffff885d461a>] :drbd:.text.lock.drbd_worker+0x2d/0x43 
kernel:  [<ffffffff885eca37>] :drbd:drbd_thread_setup+0x127/0x1e1 
kernel:  [<ffffffff800bab82>] audit_syscall_exit+0x329/0x344 
kernel:  [<ffffffff8005dfb1>] child_rip+0xa/0x11 
kernel:  [<ffffffff885ec910>] :drbd:drbd_thread_setup+0x0/0x1e1 
kernel:  [<ffffffff8005dfa7>] child_rip+0x0/0x11 

ฉันไม่แน่ใจว่าภูมิภาค heartbeat OCFS2 นี้ป้องกัน DRBD ไม่ให้เปลี่ยนเป็นรองหรือไม่:

kernel: o2hb-C3E41CA2 S ffff810002536420     0  9251     31                3690 (L-TLB)
kernel:  ffff810004af7d20 0000000000000046 ffff810004af7d30 ffffffff80063002
kernel:  1400000004000000 000000000000000a ffff81007ec307a0 ffffffff80319b60
kernel:  000935c260ad6764 0000000000000fcd ffff81007ec30988 0000000000027e86
kernel: Call Trace:
kernel:  [<ffffffff80063002>] thread_return+0x62/0xfe
kernel:  [<ffffffff8006389f>] schedule_timeout+0x8a/0xad
kernel:  [<ffffffff8009a41d>] process_timeout+0x0/0x5
kernel:  [<ffffffff8009a97c>] msleep_interruptible+0x21/0x42
kernel:  [<ffffffff884b3b0b>] :ocfs2_nodemanager:o2hb_thread+0xd2c/0x10d6
kernel:  [<ffffffff80063002>] thread_return+0x62/0xfe
kernel:  [<ffffffff800a329f>] keventd_create_kthread+0x0/0xc4
kernel:  [<ffffffff884b2ddf>] :ocfs2_nodemanager:o2hb_thread+0x0/0x10d6
kernel:  [<ffffffff800a329f>] keventd_create_kthread+0x0/0xc4
kernel:  [<ffffffff80032632>] kthread+0xfe/0x132
kernel:  [<ffffffff8005dfb1>] child_rip+0xa/0x11
kernel:  [<ffffffff800a329f>] keventd_create_kthread+0x0/0xc4
kernel:  [<ffffffff80032534>] kthread+0x0/0x132
kernel:  [<ffffffff8005dfa7>] child_rip+0x0/0x11

นี่คือฟอรัมการเขียนโปรแกรมอ่านคำถามที่พบบ่อย ; ดังนั้นคำถามนี้จะเป็นแบบที่ดีกว่าสำหรับSuperuser การลงคะแนนให้ปิด
t0mm13b

คุณเคยumount ocfsพยายามลดระดับเป็นระดับรองหรือไม่?
นิลส์

@ ไม่มี: ใช่แล้วระบบจะยกเลิกการต่อเชื่อม OCFS2 ก่อนที่จะพยายามลดระดับ
quanta

คำตอบ:


3

ฉันไม่แน่ใจว่าภูมิภาค heartbeat OCFS2 นี้ป้องกัน DRBD ไม่ให้เปลี่ยนเป็นรองหรือไม่:

อาจจะ. คุณพยายามจะฆ่าภูมิภาคนั้นให้ทำตามคำแนะนำนี้หรือไม่?

# /etc/init.d/o2cb offline serving
Stopping O2CB cluster serving: Failed
Unable to stop cluster as heartbeat region still active

ตกลงก่อนอื่นคุณควรแสดงรายการปริมาณ OCFS2 พร้อมกับป้ายกำกับและ uuids ของพวกเขา:

# mounted.ocfs2 -d
Device                FS     Stack  UUID                              Label
/dev/sdb1             ocfs2  o2cb   C3E41CA2BDE8477CA7FF2C796098633C  data_ocfs2
/dev/drbd1            ocfs2  o2cb   C3E41CA2BDE8477CA7FF2C796098633C  data_ocfs2

ประการที่สองตรวจสอบเพื่อดูว่าคุณมีการอ้างอิงถึงอุปกรณ์นี้:

# ocfs2_hb_ctl -I -d /dev/sdb1
C3E41CA2BDE8477CA7FF2C796098633C: 1 refs

พยายามฆ่ามัน

# ocfs2_hb_ctl -K -d /dev/sdb1 ocfs2

จากนั้นหยุดคลัสเตอร์สแต็ก:

# /etc/init.d/o2cb stop
Stopping O2CB cluster serving: OK
Unmounting ocfs2_dlmfs filesystem: OK
Unloading module "ocfs2_dlmfs": OK
Unmounting configfs filesystem: OK
Unloading module "configfs": OK

และนำอุปกรณ์กลับสู่บทบาทรอง:

# drbdadm secondary r0
# drbd-overview 
  1:r0  StandAlone Secondary/Unknown UpToDate/DUnknown r----- 

ตอนนี้คุณสามารถกู้คืนสมองแยกได้ตามปกติ:

# drbdadm -- --discard-my-data connect r0
# drbd-overview 
  1:r0  WFConnection Secondary/Unknown UpToDate/DUnknown C r----- 

บนโหนดอื่น ๆ (ผู้รอดชีวิตจากสมองแตก):

# drbdadm connect r0
# drbd-overview                                                                                                
  1:r0  SyncSource Primary/Secondary UpToDate/Inconsistent C r---- /data ocfs2 100G 1.9G 99G 2% 
        [>....................] sync'ed:  3.2% (753892/775004)K delay_probe: 28

เมื่อเหยื่อสมองแตก:

# /etc/init.d/o2cb start
Loading filesystem "configfs": OK
Mounting configfs filesystem at /sys/kernel/config: OK
Loading filesystem "ocfs2_dlmfs": OK
Mounting ocfs2_dlmfs filesystem at /dlm: OK
Starting O2CB cluster serving: OK

# /etc/init.d/ocfs2 start
Starting Oracle Cluster File System (OCFS2)                [  OK  ]

ตรวจสอบว่าจุดเชื่อมต่อนี้เปิดใช้งานแล้ว:

# df -h /data/
Filesystem            Size  Used Avail Use% Mounted on
/dev/drbd1            100G  1.9G   99G   2% /data

การทำงานที่ดี! คุณช่วยฉันจากความไม่พอใจกับ DRBD ปัญหาได้รับการแก้ไขหลังจากผ่านไปเกือบหนึ่งปี ขอขอบคุณ!
favadi

6

สาเหตุทั่วไปสำหรับ DRBD ที่ไม่สามารถลดระดับทรัพยากรเป็นอุปกรณ์ -mapper อุปกรณ์ที่ใช้งานอยู่ ... เช่นกลุ่มปริมาณ คุณสามารถตรวจสอบได้เช่นกับ:

dmsetup ls --tree -o inverted

1
dmsetup ls --tree -o inverted (8: 2) ├─VolGroup00-LogVol01 (253: 1) └─VolGroup00-LogVol00 (253: 0) ดังนั้นฉันจะจัดการกับสิ่งนี้ได้อย่างไร
favadi

เพียงแค่ลบออกจากอุปกรณ์ทำแผนที่หรือปิดการใช้งานกลุ่มปริมาณ (vgchange -an volume_group)
Doug

DRBD ไม่ได้ใช้ Logical Volume เป็นอุปกรณ์สำรอง
quanta

และหากเป็นอุปกรณ์ที่ห้อยอยู่คุณสามารถนำอุปกรณ์dmsetup removeนั้นออกได้
Igor Galić
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.