리눅스 HA(corosync, pacemaker, DRBD) – Part 2

corosync, pacemaker 클러스터에 DRBD 디스크 이용하기.

참고:
리눅스 HA(corosync, pacemaker) – Part 1
리눅스 HA (pacemaker, corosync, iscsi shared storage) – part 3
리눅스 HA(corosync, pacemaker, shared disk)에 zabbix 모니터링 서버 구성 – part 4

이 글은 리눅스 HA(corosync, pacemaker) – Part 1에 이어집니다. part2는 원래 iscsi 볼륨을 붙여서 active-active 클러스터로 넘어가는 글이었는데, 작성하다가 멈췄습니다.(여러가지 이유로…) 그런데, 시간이 벌써 2년이 지났군요!!!

최근에 DRBD 관련 문의주신 분이 있어, DRBD 볼륨을 붙여봅니다.

환경은 이전과 동일합니다. 이전 글을 참고해 주시기 바랍니다.

DRBD는 네트워크를 통한 디스크 미러링이라 생각하면 됩니다. 가령, 서버1의 디스크1, 서버2의 디스크2를 DRBD로 구성한 경우, 서버1의 작업으로 인해 디스크1의 내용이 변경되면 실시간으로 서버2의 디스크2도 변경됩니다.

1. DRBD 설치(양쪽 노드 모두)
공식 레포지토리에는 drbd패키지가 없으므로, elrepo를 등록해준다.

# rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org

# rpm -ivh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm

drbd 버전 9.x을 아래와 같이 설치한다.(아래쪽 오류로 나중에 8.4를 재 설치해봤으나, 버전문제는 아니었음)

# yum install drbd90-utils
# yum install kmod-drbd90

2. 커널에 DRBD 모듈을 로딩한다.(양쪽 노드 모두)

# lsmod | grep drbd
# modprobe drbd
# lsmod | grep drbd
drbd                  553913  0 
libcrc32c              12644  2 xfs,drbd

3. DRBD 설정(양쪽 노드 모두)
DRBD를 사용하기위해 새 디스크를 추가했다.(디스크가 하나인 경우, OS 파티션과 다른 파티션 DRBD가 사용하도록 할 수 있다.)
새로 붙인 디스크를 xfs로 파일시스템을 생성하고, parted -l로 확인 하면 아래와 같다.

* 새 디스크(또는 lv)는 화일시스템이 생성되어 있지 않아야 한다. 화일시스템을 만들어놓으면 Drbd 메타디스크 생성시 아래 오류가 발생한다.
오류내용:

Command 'drbdmeta 0 v09 /dev/sdb internal create-md 1' terminated with exit code 40

* 아래는 현재 디스크 상태

# parted -l
Model: ATA VBOX HARDDISK (scsi)
Disk /dev/sda: 8590MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags: 

Number  Start   End     Size    Type     File system     Flags
 1      1049kB  513MB   512MB   primary  linux-swap(v1)
 2      513MB   8590MB  8077MB  primary  xfs             boot


Error: /dev/sdb: unrecognised disk label
Model: ATA VBOX HARDDISK (scsi)                                           
Disk /dev/sdb: 8590MB
Sector size (logical/physical): 512B/512B
Partition Table: unknown
Disk Flags: 

양쪽 노두 모두에서, /etc/drbd.d/cluster_disk.res 화일을 생성하고, 아래와 같이 작성한다. 여기서 ip주소는 두번째 NIC에 할당된 ip 주소를 이용한다.(서비스ip는 192.x.x.x, 데이타 전송용은 172.x.x.x)

# cat cluster_disk.res
resource disk_wolf {
        on wolf1 {
                device /dev/drbd0;
                disk /dev/sdb;
                address 172.16.1.31:7789;
                meta-disk internal;
        }
        on wolf2 {
                device /dev/drbd0;
                disk /dev/sdb;
                address 172.16.1.32:7789;
                meta-disk internal;
        }
}

/etc/drbd.d/global_common.conf 에서 네트워크 프로토콜을 설정한다. 프로토콜 부분을 찾아서 아래 내용을 추가한다.

net {
		# protocol timeout max-epoch-size max-buffers
		# connect-int ping-int sndbuf-size rcvbuf-size ko-count
		# allow-two-primaries cram-hmac-alg shared-secret after-sb-0pri
		# after-sb-1pri after-sb-2pri always-asbp rr-conflict
		# ping-timeout data-integrity-alg tcp-cork on-congestion
		# congestion-fill congestion-extents csums-alg verify-alg
		# use-rle
		protocol C;
	}

drbd metadisk를 생성한다.(양쪽 노드 모두) 그리고, DRBD 서비스를 실행한다.

메타디스크 생성

# drbdadm create-md disk_wolf
md_offset 8589930496
al_offset 8589897728
bm_offset 8589635584

Found some data

 ==> This might destroy existing data! <==

Do you want to proceed?
[need to type 'yes' to confirm] yes

initializing activity log
initializing bitmap (256 KB) to all zero
Writing meta data...
New drbd meta data block successfully created.
success

서비스 실행

# systemctl start drbd

drbd master로 사용할 서버에서(여기서는 wolf1) 아래 명령을 실행한다.

# drbdadm role disk_wolf
Secondary
[root@wolf1 drbd.d]# drbdadm primary disk_wolf 
disk_wolf: State change failed: (-2) Need access to UpToDate data
Command 'drbdsetup primary disk_wolf' terminated with exit code 17
# drbdadm primary --force disk_wolf
# drbdadm role disk_wolf
Primary

drbd 상태 확인

[root@wolf1 ~]# drbdadm status
disk_wolf role:Primary
  disk:UpToDate
  wolf2 role:Secondary
    replication:SyncSource peer-disk:Inconsistent done:1.20

[root@wolf2 ~]# drbdadm status
disk_wolf role:Secondary
  disk:Inconsistent
  wolf1 role:Primary
    replication:SyncTarget peer-disk:UpToDate done:3.27

[root@wolf2 ~]# drbdadm secondary disk_wolf
[root@wolf2 ~]# drbdadm status
disk_wolf role:Secondary
  disk:UpToDate
  wolf1 role:Primary
    peer-disk:UpToDate

[root@wolf1 ~]# drbdadm status
disk_wolf role:Primary
  disk:UpToDate
  wolf2 role:Secondary
    peer-disk:UpToDate

화일시스템을 생성하고 원하는 위치에 마운트해 본다.

# mkfs -t xfs /dev/drbd0
meta-data=/dev/drbd0             isize=512    agcount=4, agsize=524270 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=2097079, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

# mount /dev/drbd0 /mnt
# umount /mnt

4. DRBD리소스를 클러스터에 추가하기
먼저, 클러스터 상태를 확인해 본다

# pcs status
Cluster name: wolf_cluster
Stack: corosync
Current DC: wolf1 (version 1.1.19-8.el7_6.4-c3c624ea3d) - partition with quorum
Last updated: Thu Sep 12 06:36:33 2019
Last change: Wed Sep 11 21:34:30 2019 by root via cibadmin on wolf1

2 nodes configured
2 resources configured

Online: [ wolf1 wolf2 ]

Full list of resources:

 VirtualIP	(ocf::heartbeat:IPaddr2):	Started wolf1
 WebService	(ocf::heartbeat:apache):	Started wolf1

Daemon Status:
  corosync: active/disabled
  pacemaker: active/disabled
  pcsd: active/enabled

drbd 리소스를 클러스터에 통합하기 위해서 아래 명령어를 실행한다. push 하기 전까지는 현 디렉토리에 drbd_cfg 파일에 저장된다. cib(Cluster Information Base) 옵션은 cib로부터 raw xml화일을 생성한다.

# pcs cluster cib drbd_cfg

Drbd Data 리소스를 생성한다.

# pcs -f drbd_cfg resource create DrbdData ocf:linbit:drbd drbd_resource=disk_wolf op monitor interval=60s

Drbd Clone 리소스를 생성한다.

# pcs -f drbd_cfg resource master DrbdDataClone DrbdData master-max=1 master-node-max=1 clone-max=2 clone-node-max=1 notify=true

이제 작성한 cib를 라이브 CIB로 push한다

# pcs cluster cib-push drbd_cfg
CIB updated

pcs status로 확인 했을때 아래 오류 발생. 확인결과 오타로인한 오류가 났으며, resource를 삭제후 다시만들었음

# pcs status
Cluster name: wolf_cluster
Stack: corosync
Current DC: wolf2 (version 1.1.19-8.el7_6.4-c3c624ea3d) - partition with quorum
Last updated: Thu Sep 12 07:56:22 2019
Last change: Thu Sep 12 07:13:57 2019 by root via cibadmin on wolf1

2 nodes configured
4 resources configured

Online: [ wolf1 wolf2 ]

Full list of resources:

 VirtualIP	(ocf::heartbeat:IPaddr2):	Started wolf1
 WebService	(ocf::heartbeat:apache):	Started wolf1
 Master/Slave Set: DrbdDataClone [DrbdData]
     Masters: [ wolf2 ]
     Stopped: [ wolf1 ]

Failed Actions:
* DrbdData_start_0 on wolf1 'not installed' (5): call=19, status=complete, exitreason='',
    last-rc-change='Thu Sep 12 07:13:59 2019', queued=0ms, exec=134ms


Daemon Status:
  corosync: active/disabled
  pacemaker: active/disabled
  pcsd: active/enabled

# pcs resource delete DrbdData
Attempting to stop: DrbdData... Stopped

수정후 클러스터 상태 확인

# pcs status 
Cluster name: wolf_cluster

WARNINGS:
No stonith devices and stonith-enabled is not false

Stack: unknown
Current DC: NONE
Last updated: Thu Sep 12 09:45:07 2019
Last change: Thu Sep 12 09:40:04 2019 by root via cibadmin on wolf1

0 nodes configured
2 resources configured


Full list of resources:

 Master/Slave Set: DrbdDataClone [DrbdData]

Daemon Status:
  corosync: active/disabled
  pacemaker: active/disabled
  pcsd: active/enabled

# pcs status resources
 Master/Slave Set: DrbdDataClone [DrbdData]

DRBD 파일시스템 리소스를 만든다.

# pcs cluster cib fs_cfg

DRBD 리소스의 마운트 포인트를 정의한다. 웹서비스에 사용할것이므로, /var/www/html 에 마운트하도록 설정한다.

 pcs  -f fs_cfg resource create DrbdFS Filesystem device="/dev/drbd0" directory="/var/www/html" fstype="xfs"

리소스가 시작될때의 우선순위를 지정한다.

# pcs  -f fs_cfg resource create DrbdFS Filesystem device="/dev/drbd0" directory="/var/www/html" fstype="xfs"
Assumed agent name 'ocf:heartbeat:Filesystem' (deduced from 'Filesystem')
# pcs  -f fs_cfg constraint colocation add DrbdFS with DrbdDataClone INFINITY with-rsc-role=Master
# pcs  -f fs_cfg constraint order promote DrbdDataClone then start DrbdF
Adding DrbdDataClone DrbdFS (kind: Mandatory) (Options: first-action=promote then-action=start)
# pcs -f fs_cfg constraint colocation add WebService with DrbdFS INFINITY
# pcs constraint order DrbdFS then WebService
Adding DrbdFS WebService (kind: Mandatory) (Options: first-action=start then-action=start)

작성한 cib를 push한다.

# pcs cluster cib-push fs_cfg

여기까지 하고 클러스터 상태를 확인했더니, 아래처럼 DRBD 오류가 보인다.

# pcs status
Cluster name: wolf_cluster
Stack: corosync
Current DC: wolf2 (version 1.1.19-8.el7_6.4-c3c624ea3d) - partition with quorum
Last updated: Sun Sep 15 07:29:22 2019
Last change: Sun Sep 15 07:11:21 2019 by root via cibadmin on wolf1

2 nodes configured
5 resources configured

Online: [ wolf1 wolf2 ]

Full list of resources:

 VirtualIP	(ocf::heartbeat:IPaddr2):	Started wolf1
 WebService	(ocf::heartbeat:apache):	Stopped
 Master/Slave Set: DrbdDataClone [DrbdData]
     Masters: [ wolf2 ]
     Stopped: [ wolf1 ]
 DrbdFS	(ocf::heartbeat:Filesystem):	Started wolf2

Failed Actions:
* DrbdData_start_0 on wolf1 'not installed' (5): call=21, status=complete, exitreason='',
    last-rc-change='Sun Sep 15 07:13:48 2019', queued=0ms, exec=96ms


Daemon Status:
  corosync: active/disabled
  pacemaker: active/disabled
  pcsd: active/enabled

확인해 보면,

[root@wolf1 cluster]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda2       7.6G  1.4G  6.2G  18% /
devtmpfs        909M     0  909M   0% /dev
tmpfs           920M   38M  882M   5% /dev/shm
tmpfs           920M  8.6M  911M   1% /run
tmpfs           920M     0  920M   0% /sys/fs/cgroup
tmpfs           184M     0  184M   0% /run/user/0
/dev/drbd0      8.0G   33M  8.0G   1% /var/www/html
[root@wolf1 cluster]# drbdadm status
WARN: no normal resources defined for this host (wolf)!?
Misspelled name of the local machine with the 'on' keyword ?

호스트네임 문제로 생각되어 호스트네임을 확인해 보면, /etc/hosts 화일에 VirtualIP를 위한 호스트가 아래처럼 설정되어 있다.

[root@wolf1 cluster]# hostname
wolf
# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.100.31	wolf1
#172.16.1.31	wolf1-drbd
192.168.100.32	wolf2
#172.16.1.32	wolf2-drbd
192.168.100.30	wolf

위의 192.168.100.30을 양쪽 노드에서 주석처리하거나 삭제하고 클러스터를 다시 실행해 보면 정상 작동함을 확인 할 수 있다.

양쪽노드에서 drbd 정지후 재 실행.

# systemctl stop drbd

drbdadm status 명령으로 drbd 정상작동 확인
노드1 이 primary

[root@wolf1 ~]# drbdadm status
disk_wolf role:Primary
  disk:UpToDate
  peer role:Secondary
    replication:Established peer-disk:UpToDate

노드2가 secondary

[root@wolf2 ~]# drbdadm status
disk_wolf role:Secondary
  disk:UpToDate
  peer role:Primary
    replication:Established peer-disk:UpToDate

이제, 클러스터를 정지하고 다시 실행한다.

[root@wolf1 ~]# pcs cluster stop --all
wolf1: Stopping Cluster (pacemaker)...
wolf2: Stopping Cluster (pacemaker)...
wolf2: Stopping Cluster (corosync)...
wolf1: Stopping Cluster (corosync)...

[root@wolf1 cluster]# pcs cluster start --all
wolf1: Starting Cluster (corosync)...
wolf2: Starting Cluster (corosync)...
wolf1: Starting Cluster (pacemaker)...
wolf2: Starting Cluster (pacemaker)...

클러스터 상태확인을 해 본다.

[root@wolf1 ~]# pcs status
Cluster name: wolf_cluster
Stack: corosync
Current DC: wolf2 (version 1.1.19-8.el7_6.4-c3c624ea3d) - partition with quorum
Last updated: Sun Sep 15 12:12:34 2019
Last change: Sun Sep 15 12:04:27 2019 by root via cibadmin on wolf1

2 nodes configured
5 resources configured

Online: [ wolf1 wolf2 ]

Full list of resources:

 VirtualIP	(ocf::heartbeat:IPaddr2):	Started wolf1
 WebService	(ocf::heartbeat:apache):	Started wolf1
 Master/Slave Set: DrbdDataClone [DrbdData]
     Masters: [ wolf1 ]
     Slaves: [ wolf2 ]
 DrbdFS	(ocf::heartbeat:Filesystem):	Started wolf1

Daemon Status:
  corosync: active/disabled
  pacemaker: active/disabled
  pcsd: active/enabled
[root@wolf1 ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda2       7.6G  1.4G  6.2G  18% /
devtmpfs        909M     0  909M   0% /dev
tmpfs           920M   38M  882M   5% /dev/shm
tmpfs           920M  8.6M  911M   1% /run
tmpfs           920M     0  920M   0% /sys/fs/cgroup
tmpfs           184M     0  184M   0% /run/user/0
/dev/drbd0      8.0G   33M  8.0G   1% /var/www/html
[root@wolf1 ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:ea:a0:7a brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.31/24 brd 192.168.100.255 scope global noprefixroute enp0s3
       valid_lft forever preferred_lft forever
    inet 192.168.100.30/32 brd 192.168.100.255 scope global enp0s3
       valid_lft forever preferred_lft forever
    inet6 fe80::73b7:ab9b:bae:634b/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:b0:39:96 brd ff:ff:ff:ff:ff:ff
    inet 172.16.1.31/24 brd 172.16.1.255 scope global noprefixroute enp0s8
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:feb0:3996/64 scope link 
       valid_lft forever preferred_lft forever

노드1을 정지하고, 노드2에서 서비스 확인(클러스터 상태, VirtualIP, 마운트, 웹서비스확인)을 해 보면 아래와 같다.

[root@wolf2 ~]# pcs cluster stop wolf1
wolf1: Stopping Cluster (pacemaker)...
wolf1: Stopping Cluster (corosync)...
[root@wolf2 ~]# pcs status
Cluster name: wolf_cluster
Stack: corosync
Current DC: wolf2 (version 1.1.19-8.el7_6.4-c3c624ea3d) - partition with quorum
Last updated: Sun Sep 15 12:14:37 2019
Last change: Sun Sep 15 12:04:27 2019 by root via cibadmin on wolf1

2 nodes configured
5 resources configured

Online: [ wolf2 ]
OFFLINE: [ wolf1 ]

Full list of resources:

 VirtualIP	(ocf::heartbeat:IPaddr2):	Started wolf2
 WebService	(ocf::heartbeat:apache):	Started wolf2
 Master/Slave Set: DrbdDataClone [DrbdData]
     Masters: [ wolf2 ]
     Stopped: [ wolf1 ]
 DrbdFS	(ocf::heartbeat:Filesystem):	Started wolf2

Daemon Status:
  corosync: active/disabled
  pacemaker: active/disabled
  pcsd: active/enabled
[root@wolf2 ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda2       7.6G  1.4G  6.2G  18% /
devtmpfs        909M     0  909M   0% /dev
tmpfs           920M   54M  866M   6% /dev/shm
tmpfs           920M  8.6M  911M   1% /run
tmpfs           920M     0  920M   0% /sys/fs/cgroup
tmpfs           184M     0  184M   0% /run/user/0
/dev/drbd0      8.0G   33M  8.0G   1% /var/www/html
[root@wolf2 ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:c4:95:c2 brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.32/24 brd 192.168.100.255 scope global noprefixroute enp0s3
       valid_lft forever preferred_lft forever
    inet 192.168.100.30/32 brd 192.168.100.255 scope global enp0s3
       valid_lft forever preferred_lft forever
    inet6 fe80::b603:32a0:249b:5278/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:53:c9:09 brd ff:ff:ff:ff:ff:ff
    inet 172.16.1.32/24 brd 172.16.1.255 scope global noprefixroute enp0s8
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:fe53:c909/64 scope link 
       valid_lft forever preferred_lft forever

node1 중지후 재실행시 서비스가 node1으로 돌아오지 않을때는 constraint 를 조정해본다.
내 경우 최종 constraint는 아래와 같다.

# pcs constraint
Location Constraints:
  Resource: DrbdDataClone
    Enabled on: wolf2 (score:50)
  Resource: DrbdFS
    Enabled on: wolf1 (score:INFINITY)
    Enabled on: wolf2 (score:50)
  Resource: WebService
    Enabled on: wolf1 (score:INFINITY)
    Enabled on: wolf2 (score:50)
Ordering Constraints:
  start VirtualIP then start WebService (kind:Mandatory)
  promote DrbdDataClone then start DrbdFS (kind:Mandatory)
  start DrbdFS then start WebService (kind:Mandatory)
Colocation Constraints:
  DrbdFS with DrbdDataClone (score:INFINITY) (with-rsc-role:Master)
  WebService with DrbdFS (score:INFINITY)
  WebService with VirtualIP (score:INFINITY)
Ticket Constraints:

* 기타:
drbd용으로 두번째 NIC을 사용하려 했으나 hostname 문제가 발생해서 클러스터와 같은 NIC을 사용하도록 설정했다.
drbd는 8.4를 사용했다.

* 참고문서
http://fibrevillage.com/sysadmin/304-pcs-command-reference
https://www.learnitguide.net/2016/07/integrate-drbd-with-pacemaker-clusters.html

* 리눅스 HA(Pacemaker, corosync, iscsi shared storage, lvm2) – part 3

30 comments

Skip to comment form

    • mani on 2019년 10월 28일 at 6:56 오후
    • Reply

    안녕하세요. 궁금한게 있어 이렇게 글을 쓰게 되었습니다.
    작성자님이 위에 하신것처럼 진행하였는데 한가지만 다르게 하였습니다.
    drbd 리소스의 마운트 포인트를 정의하는부분에서 작성자님은 웬서비스에 등록하신다고 /var/www/html에 마운트하였고 저는 일반 mnt라는 폴더를 만들어 마운트하려고 하였습니다.
    그런데 제대로 되지않고 오류가 발생하네요…(제가 갈아엎어서 오류내용을 적지못한점 죄송합니다.)
    그래서 질문드리는데 혹시 마운트 포인트를 다른 일반 폴더를 지정하면 안되는건지 여쭤보고싶습니다….

    1. 원하는 위치에 마운트하면 됩니다.
      오류는 로그를 봐야 알 수 있는데, 안타깝네요.

        • mani on 2019년 10월 30일 at 7:20 오후
        • Reply

        오류는 해결했습니다…그런데 다른문제가 생겼는데…일단 node1에서 mnt라는 곳에 파일을 만들고 node1을 stop하면 node2에서 자동으로 mount하여 mnt라는곳에 파일이 생길줄 알았는데 생기지 않아 궁금해서 댓글을 적습니다…혹시 설정을 따로 해야되는게 있는지 여쭤보고싶습니다…

        1. drbd가 클러스터 리소스에 등록이 되어 있어야 자동으로 마운트가 됩니다.

            • mani on 2019년 11월 4일 at 6:46 오후

            제가 작성자님께서 하신대로 하여 제대로 마운트된 것을 확인하였고 2~3번 node1을 껏다 켰다하였습니다.
            그리고 껐다가 키고나서 수동으로 리소스 강제 이동하여 node1으로 이동하였습니다.
            그러다 3번째 failed actions이 뜨고 오류내용이 발생하였습니다.
            Failed Actions:
            * DrbdData_demote_0 on node2 ‘unknown error’ (1): call=61, status=Timed Out, exitreason=’none’,
            last-rc-change=’Mon Nov 4 09:35:49 2019′, queued=0ms, exec=90023ms
            이렇게 떴습니다.
            혹시 왜이런지 알수있을까요??

            • snowffox on 2019년 11월 4일 at 10:42 오후
              Author

            적어주신 문제는 hostname 문제로 보이기는 합니다.
            혹시 /etc/hosts 파일에 vip 에도 호스트네임을 설정하셨는지요?

            설정하셨다면 그 부분 주석처리 해 주시면 됩니다.
            x.x.x.x host1
            x.x.x.y host2
            x.x.x.z vip_host –이런 경우 에러 발생함. 주석처리 또는 삭제.

            그런데, 2-3번 성공하셨던거면… 위의 문제는 아닐 수도 있겠네요.

            양쪽에서 모두 drbdadm status로 상태 확인 해 보시고요. 로그를 확인 해봐야 하는데, drbd는 로그를 따로 안남기므로,
            cat /var/log/messages | grep -i drbd 로 관련 로그를 확인해 보아야 할듯 합니다.

    • mani on 2019년 11월 5일 at 1:35 오후
    • Reply

    제가 여러번 다시 해보니 마운트는 되는것으로 확인되는데 failed action에는 오류가 남아있어 crm_resource -P라는 명령어를 사용하여 failed action을 제거하였습니다.
    제가 node1을 종료 하였을 때 자동으로 node2로 넘어는 것은 확인하였는데 node1이 다시 살아났을 경우 제가 명령어를 입력하지 않고 node1으로 다시 넘어가는 것을 할 수 있는지 여쭤 보고 싶습니다.

    1. 덕분에 저도 다시 공부해 보게 되네요.
      얼마전 resource-stickiness에 대해 질문하셨었죠? 이부분에 오류가 있어 답변을 다시 달아놓았습니다. 참고해 주시고요.
      아무튼,
      pcs resource defaults 명령어를 내리면 resource-stickiness 값이 보일겁니다. 값이 0 이면 자동으로 리소스가 노드1 로 되돌아옵니다. 아마도 제가 작성한 문서대로 하셨으면 60 으로 되어 있을텐데요, 제 경우에는 이 값에서도 자동으로 되돌아옵니다.
      pcs resource defaults resource-stickiness=100 으로 변경하니 자동 복구되지 않았습니다.
      관련 문서를 찾아 봐도 정확히 얼마의 숫자가 되어야 원하는 동작을 하는지는 명시되어 있지 않습니다.
      일단 분명한것은 리소스가 장애복구시 원래 노드로 되돌아오도록 하려면 값을 0 으로 조정하면 될겁니다.

    • miing on 2020년 4월 20일 at 3:25 오후
    • Reply

    안녕하세요. 작성하신글 잘보았습니다.
    다름이 아니라 nagios나 zabbix와 같은 모니터링 툴은 linux ha의 resource에 적용할 수 없나요??

      • snowffox on 2020년 4월 20일 at 11:17 오후
      • Reply

      가능합니다.

      nagios는 아래 문서를 참고하시면 될 것같습니다.
      https://wiki.clusterlabs.org/wiki/Nagios3_on_Pacemaker_DRBD

        • miing on 2020년 4월 21일 at 10:26 오전
        • Reply

        감사합니다.
        혹시 nagios 적용 포스트 작성하실 생각이 없으신지요?
        제가 아무리 찾아봐도 nagios적용 포스트 글이 없어 다른 사람들에게도 도움이 될 것 같아 여쭤봅니다.

        1. 좋은 의견 고맙습니다.
          일 하는 곳에서 상용 모니터링 틀을 사용중이라, 해 볼 생각은 안했었네요.
          시간 날때, 시험 해 보도록 하겠습니다.

            • miing on 2020년 4월 21일 at 4:19 오후

            오…? 혹시 실례가 안된다면 사용하시는 상용 모니터링 툴이 어떤건지 여쭤봐도 될까요?

            • snowffox on 2020년 4월 22일 at 9:18 오전
              Author

            solarwinds 라는 제품이고요, snmp기반 모니터링 제품입니다.
            좀 오래된 버젼을 아직도 사용하고 있어요!!

    • briankim on 2020년 4월 22일 at 2:07 오후
    • Reply

    덕분에 실습 잘 해보았습니다. 혹시 DB Replication, HA도 같이 접목 시키는건 어려울까요?

    1. 데이타베이스 종류에 따라서 생각해 봐야할게 조금 다를듯 합니다.

    • miing on 2020년 4월 23일 at 6:31 오후
    • Reply

    자꾸 질문드려 죄송합니다.
    혹시 node1이나 node2가 서로 체크하는 시간을 조절할 수 있나요?
    예를 들어 5초 또는 10초 또는 0.5초 등… 시간을 조절하여 죽었는지 살았는지 상태를 점검할 수 있는지 궁금합니다.

      • snowffox on 2020년 4월 24일 at 10:41 오전
      • Reply

      corosync 설정에서 heartbeat 시간을 조정 가능하다고 합니다.

      /etc/corosync/corosync.conf 에서 token 값이 timeout 시간이라 합니다.
      자세한것은 아래 문서 참고하시면 됩니다.

      https://www.thegeekdiary.com/how-to-change-pacemaker-cluster-heartbeat-timeout-in-centos-rhel-7/

    • nanoch on 2020년 8월 3일 at 5:23 오후
    • Reply

    안녕하세요.
    위 댓글을 적으신분처럼 pacemaker에 모니터링 툴을 연결하여 감시하고 싶은데 방법을 모르겠네요.
    혹시 가능하시다면 게시글로 만들어 주실수 있으신지 궁금합니다.
    감사합니다.

    1. 어떤 툴을 사용하고 싶으신지요? 모니터링 툴들이, snmp기반인것과, agent방식인것으로 나뉘니까요.

        • nanoch on 2020년 8월 3일 at 6:00 오후
        • Reply

        일단 nagios를 생각하고 있습니다.
        그런데 다른 모니터링툴도 상관없습니다.
        확인 부탁드립니다. 감사합니다.

        • nanoch on 2021년 11월 8일 at 1:46 오전
        • Reply

        혹시 지금도 모니터링 툴 올릴 생각 없으신가요…?ㅠㅠ

        1. zabbix 를 ha로 구성해 보았습니다. 본문에 링크 걸어 두었어요. ;^^

    • 이희열 on 2020년 12월 28일 at 5:57 오후
    • Reply

    안녕하세요 pacemaker 관련 포스트 많은 도움을 받고 있어 감사 인사드립니다.
    다름 아니라,
    pcs node 1,2 ( active-pssive) 모드 구성 후
    oracle을 설치하였습니다.
    pcs start 를 하면 오라클이 기도되지 않아 혹시 빠진부분이 있나 해서 문의 드립니다.

    # pcs status
    Resource Group: oraclegroup
    oracle_lv (ocf::heartbeat:LVM): Started HA2_HB
    oracle_fs (ocf::heartbeat:Filesystem): Started HA2_HB
    DBVIP (ocf::heartbeat:IPaddr2): Started HA2_HB
    oradb (ocf::heartbeat:oracle): Stopped

    Failed Resource Actions:
    * oradb_start_0 on HA2_HB ‘not installed’ (5): call=96, status=complete, exitreason=’sqlplus: required binary not installed’,
    last-rc-change=’Mon Dec 28 17:41:50 2020′, queued=0ms, exec=24ms
    * oradb_start_0 on HA1_HB ‘not installed’ (5): call=108, status=complete, exitreason=’sqlplus: required binary not installed’,
    last-rc-change=’Mon Dec 28 17:41:49 2020′, queued=0ms, exec=23ms

    에러가 발생 하며, oradb 리소스를 디버깅 하면 아래와 같은 메시지가 발생 합니다.
    단, 수동으로 oracle유저로 oracle을 기동하면 이상없이 db가 잘 올라 옵니다.
    # pcs resource debug-start oradb
    Operation start for oradb (ocf:heartbeat:oracle) returned: ‘not installed’ (5)
    > stderr: ocf-exit-reason:sqlplus: required binary not installed

    아래는 리소스 생성 시 작성한 명령어 잆니다.
    # pcs resource create oracle_lv LVM volgrpname=oravg exclusive=true –group oraclegroup op monitor interval=10s

    # pcs resource create oracle_fs Filesystem device=”/dev/mapper/oravg-oracle_lv” directory=”/oracle” fstype=”ext4″ –group oraclegroup op monitor interval=30s

    # pcs resource create DBVIP ocf:heartbeat:IPaddr2 ip=192.168.10.99 cidr_netmask=24 –group oraclegroup op monitor interval=10s

    # pcs resource create oradb oracle sid=”ORCL” home=”/oracle/product/19.c/dbhome_1″ user=”oracle” op monitor on-fail=ignore –group oraclegroup

    1. 일단 위쪽 stderr를 보면 sqlplus를 못찾는거 같네요. sqlplus가 있는 디렉토리를 path에 넣어보시는것은 어떨까요?
      아, 그리고 혹시 drbd 구성인가요?

    • jw on 2021년 6월 16일 at 5:10 오후
    • Reply

    혹시 node1에서 drdb 패키지 rpm,yum으로 이후에 모듈을 로딩하는 도중 아래와 같이 에러가 뜨는데 어떻게 해결하는 방법이 없을까요?..
    [root@test01 ~]# modprobe drbd
    modprobe: ERROR: could not insert ‘drbd’: Required key not available

      • snowffox on 2021년 6월 17일 at 9:41 오전
      • Reply

      커널 모듈이 로드되지 않고 Required key 과련 오류가 나오는 경우는 대부분 UEFI secure boot 가 활성화 된 경우인듯 합니다. UEFI 바이오스에서 secure boot를 사용하지 않도록 설정하는 방법과, mokutil 을 사용하능 방법 두 가지 가 있네요.

      이미 찾아보셨을 듯 하지만,
      https://itectec.com/ubuntu/ubuntu-do-i-get-required-key-not-available-when-install-3rd-party-kernel-modules-or-after-a-kernel-upgrade/ 문서에 의하면,

      yum install mokutil (또는 apt install mokutil)
      mokutil –disable-validation
      이후 비밀번호 설정하고 재부팅 하면 된다고 합니다.

    • 이야기 on 2021년 11월 6일 at 1:16 오후
    • Reply

    안녕하세요
    혹시 sqlplus: required binary not installed 이 오류는 해결하셨나요ㅠㅠ?

    1. 어떤 상황인지요?

      oracle 설치했는데, HA 구성에 문제가 있는것인지요?

    • Mvp on 2022년 6월 22일 at 11:57 오후
    • Reply

    Oracle Engine 영역에 대해서도 DRDB 구성하신거 같은데, Engine 영역이 설치가 안되어서 그런거 아닐까요.
    AIX나 HP-UX HA Cluster 이용해서 구성할때도 Oracle Engine 영역은 각 노드별로 설치한 상태에서 해당 DB Instance 운용에 필요한 볼륨 그룹만 Failover, Failback 설정하는 것으로 알고 있습니다.

답글 남기기

Your email address will not be published.