Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Info

수동절체

수동 절체를 위한 절차는 다음과 같습니다.

  1. primary 노드에서 bsr 디바이스를 사용하는 모든 응용 프로그램이나 서비스를 중지하고, (리눅스에선 볼륨을 umount 한 후) 리소스를 secondary로 강등시킵니다.

    Code Block
    bsradm secondary <resource>
  2. primary로 승격시키고자 하는 노드에서 다음 명령을 실행합니다. (리눅스에선 볼륨을 mount 하여) 서비스를 재개합니다.

    Code Block
    bsradm primary <resource>

리소스 중지

bsradm down 명령을 통해 리소스를 중지할 수 있습니다. down 은 앞서 설명한 리소스 up 과정의 역순에 따라 중지가 수행하고 만약 리소스가 승격된 상태 였다면 강등을 먼저 수행하고 중지합니다. 즉 리소스 강등, 복제 단절, 볼륨 분리(detach), 리소스 해제의 순으로 down 합니다.

...

Info

복제 프로토콜 변경

운영 중 복제 프로토콜을 변경하기 위해서 프로토콜, 송신버퍼, 혼잡제어 설정을 같이 변경해야 합니다.

  • 먼저 bsrsetup del-peer <resource> <node-<peer_node_id> 명령으로 peer 연결을 삭제합니다.

  • 양 노드 리소스 파일의 sndbuf-size 의 크기, 프로토콜, 혼잡제어 설정을 조정합니다.

  • bsradm adjust <resource> 로 적용합니다.

...

운영 노드를 Primary 상태로 두고 양 노드의 볼륨의 크기를 LVM을 통해 늘린 후 한 노드에서 다음의 과정을 통해 새롭게 늘어난 크기를 bsr 에 인식시킵니다. 아래는 LV 로 구성된 580MB 크기로 구성된 볼륨을 확장하는 예 입니다.

  1. LV 구성. 기존 사이즈는 580M로 구성되어 있는 상태

    Code Block
    [root@bsr01 /]# lvs /dev/local/r0
      LV   VG     Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync 
    Convert                                                 
      r0   local  -wi-ao---- 580.00m    
    
    
  2. conf 구성. /dev/local/r0 가 /dev/bsr0의 backing device로 구성된 상태

    Code Block
    	volume 0 {
    		device /dev/bsr0;
    		disk /dev/local/r0;
    		meta-disk /dev/loop3 /bsr_meta/r0_meta;
    	}
    
  3. LV 볼륨 확장을 위해 PV 추가 생성

    Code Block
    [root@bsr01 /]# pvcreate /dev/sdf1
      Physical volume "/dev/sdf1" successfully created.
  4. VG 확장

    Code Block
    [root@bsr01 /]# vgs local
      VG    #PV #LV #SN Attr   VSize   VFree
      local   3   1   0 wz--n- 588.00m 8.00m
    [root@bsr01 /]# vgextend local /dev/sdf1
      Volume group "local" successfully extended
    [root@bsr01 /]# vgs local
      VG    #PV #LV #SN Attr   VSize VFree  
      local   4   1   0 wz--n- 1.52g 980.00m
  5. LV를 1.5GB 로 확장

    Code Block
    [root@bsr01 /]# lvextend -L 1.5G /dev/local/r0
      Size of logical volume local/r0 changed from 580.00 MiB (145 extents) to 1.50 GiB (384 extents).
      Logical volume local/r0 successfully resized.
    [root@bsr01 /]# lvs /dev/local/r0
      LV   VG    Attr       LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
      r0   local -wi-ao---- 1.50g      
  6. 3~5번 단계를 모든 노드에서 동일하게 수행

  7. 확장된 size 를 resize 명령을 사용하여 bsr 에게 알림 (primary 노드에서 수행)

    Code Block
    [root@bsr01 /]# bsrsetup status --v --s r0
    r0 node-id:0 role:Primary suspended:no
        write-ordering:drain req-pending:0
      volume:0 minor:0 disk:UpToDate
          size:593920 read:1129876 written:248320 al-writes:23 bm-writes:0 upper-pending:0 lower-pending:0 al-suspended:no al-pending-changes:0
          al-used:0 blocked:no
      bsr02 node-id:1 connection:Connected role:Secondary congested:no
        volume:0 replication:Established peer-disk:UpToDate resync-suspended:no
            received:0 sent:588328 out-of-sync:0 pending:0 unacked:0
      bsr03 node-id:2 connection:Connected role:Secondary congested:no
        volume:0 replication:Established peer-disk:UpToDate resync-suspended:no
            received:0 sent:588704 out-of-sync:0 pending:0 unacked:0
    [root@bsr01 /]# bsradm resize r0
  8. resize 명령 실행 후 확장된 영역에 대해 부분 동기화가 진행되며, size 값이 593920에서 1572864으로 증가된 것을 확인할 수 있음

    Code Block
    [root@bsr01 /]# bsrsetup status --v --s r0
    r0 node-id:0 role:Primary suspended:no
        write-ordering:drain req-pending:0
      volume:0 minor:0 disk:UpToDate
          size:1572864 read:1582588 written:248320 al-writes:31 bm-writes:0 upper-pending:0 lower-pending:2 al-suspended:no al-pending-changes:0
          al-used:0 blocked:no
      bsr02 node-id:1 connection:Connected role:Secondary congested:yes
        volume:0 replication:SyncSource peer-disk:Inconsistent done:47.46 resync-suspended:no
            received:0 sent:762944 out-of-sync:826368 pending:35 unacked:80
      bsr03 node-id:2 connection:Connected role:Secondary congested:yes
        volume:0 replication:SyncSource peer-disk:Inconsistent done:49.15 resync-suspended:no
            received:0 sent:786064 out-of-sync:799744 pending:27 unacked:68
  9. LV 확장과 resize 명령까지 성공하였다면 resize2fs 명령을 사용하여 filesystem을 확장시켜 주어야 한다. (primary 노드에서 실행)

    Code Block
    [root@bsr01 /]# df -h
    Filesystem               Size  Used Avail Use% Mounted on
    ...
    /dev/bsr0                555M  544M     0 100% /mnt0
    
    [root@bsr01 /]# resize2fs /dev/bsr0
    resize2fs 1.42.9 (28-Dec-2013)
    Filesystem at /dev/bsr0 is mounted on /mnt0; on-line resizing required
    old_desc_blocks = 1, new_desc_blocks = 1
    The filesystem on /dev/bsr0 is now 393216 blocks long.
    
    [root@bsr01 /]# df -h
    ...
    /dev/bsr0                1.5G  545M  878M  39% /mnt0

볼륨의 늘어난 영역에 대한 새로운 동기화가 수행됩니다.

Info

연결이 disconnect 된 상태에서 볼륨 크기를 조정하려면 다음의 과정을 따릅니다.

  1. secondary 노드에서 bsradm disconnect 로 연결 단절

  2. 양 노드에서 LV 확장

    1. LV 확장은 secondary 상태로 수행 가능하며 primary로 승격할 필요 없음.

  3. 확장된 size를 적용하기 위해 primary 노드에서 resize 명령 수행

    Code Block
    [root@bsr01 /]# bsrsetup status --v --s r1
    r1 node-id:0 role:Primary suspended:no
        write-ordering:drain req-pending:0
      volume:0 minor:1 disk:UpToDate
          size:512000 read:1561828 written:25956 al-writes:37 bm-writes:0 upper-pending:0 lower-pending:0 al-suspended:no al-pending-changes:0 al-used:0
          blocked:no
      bsr-02 node-id:1 connection:Connecting role:Unknown congested:no
        volume:0 replication:Off peer-disk:DUnknown resync-suspended:no
            received:0 sent:1562367 out-of-sync:0 pending:0 unacked:0
    [root@bsr01 /]# bsradm resize r1
  4. resize 명령 수행 후 size 값 증가 확인, 확장된 영역이 out-of-sync 로 설정됨

    Code Block
    [root@bsr01 /]# bsrsetup status --v --s r1
    r1 node-id:0 role:Primary suspended:no
        write-ordering:drain req-pending:0
      volume:0 minor:1 disk:UpToDate
          size:1572864 read:1561828 written:25956 al-writes:45 bm-writes:0 upper-pending:0 lower-pending:0 al-suspended:no al-pending-changes:0 al-used:0
          blocked:no
      bsr-02 node-id:1 connection:Connecting role:Unknown congested:no
        volume:0 replication:Off peer-disk:DUnknown resync-suspended:no
            received:0 sent:1562367 out-of-sync:1060864 pending:0 unacked:0
  5. primary 노드에서 resize2fs 명령 실행

    Code Block
    [root@bsr01 /]# resize2fs /dev/bsr1
    resize2fs 1.45.6 (20-Mar-2020)
    Filesystem at /dev/bsr1 is mounted on /mnt_r1; on-line resizing required
    old_desc_blocks = 8, new_desc_blocks = 12
    The filesystem on /dev/bsr1 is now 1572864 (1k) blocks long.
  6. 파일 시스템 확장까지 완료한 이후 secondary에서 connect 명령을 사용하여 연결

% 재 연결시 주의 사항

  • primary 노드가 있어야 한다.  primary 노드가 없다면 확장된 영역이 동기화 되지 못하고 out-of-sync가 남아있게 된다.

  • 확장 이후 secondary의 볼륨 크기가 primary의 크기 보다 크거나 같아야 한다. primary의 볼륨 크기가 더 크면 복제 연결이 성립되지 않는다.

  • 타겟 노드의 LV 볼륨 사이즈를 secondary 상태에서 변경했다면 SB 해결 절차 없이 connect 명령 만으로 연결 할 수 있다. 타겟 노드를 --force primary 로 승격한 뒤 resize를 진행했다면, SB 해결 절차 수행이 필요하다.

...

새로운 Current UUID를 생성하고 Bitmap UUID를 지워서 초기 동기화를 건너 뛰는 데 사용할 수 있습니다. 이 사용 예는 지금 막 생성된 메타 데이터에서만 작동합니다.

  1. 양 노드에서, 메타를 초기화 하고 장치를 구성합니다. bsradm -- --force create-md res

  2. 양 노드의 리소스를 기동하고 초기 핸드쉐이크 시점에 서로의 볼륨 크기를 인식합니다. bsradm up res

  3. 양 노드가 Secondary/Secondary, Inconsistent/Inconsistent 로 연결된 상태에서 새로운 UUID를 생성하고 비트맵을 클리어 합니다. bsradm new-current-uuid --clear-bitmap res

  4. 이제 양노드는 Secondary/Secondary, UpToDate/UpToDate 상태가 되고 한 쪽을 Primary 로 승격한 후 파일시스템을 생성합니다. bsradm primary res mkfs -t fs-type $(bsradm sh-dev res)

이러한 방식을 사용했을 때 명백한 부작용 중 하나는 다른 방법을 써서 양측을 동일하게 만들지 않는 한 복제본에 이전 가비지 데이터가 가득차 있다는 것입니다. 여기서 온라인 검사를 하게되면 동기화되지 않은 블록들을 많이 찾게 될 것입니다. 볼륨에 이미 데이터가 있는 상황에서는 이 방식을 절대 사용해선 안됩니다. 언뜻보기에는 작동하는 것처럼 보일 수 있지만 다른 노드로 스위치오버 하면 이미 있던 데이터는 복제되지 않았으므로 데이터가 깨집니다.

...