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
안녕하세요. 궁금한게 있어 이렇게 글을 쓰게 되었습니다.
작성자님이 위에 하신것처럼 진행하였는데 한가지만 다르게 하였습니다.
drbd 리소스의 마운트 포인트를 정의하는부분에서 작성자님은 웬서비스에 등록하신다고 /var/www/html에 마운트하였고 저는 일반 mnt라는 폴더를 만들어 마운트하려고 하였습니다.
그런데 제대로 되지않고 오류가 발생하네요…(제가 갈아엎어서 오류내용을 적지못한점 죄송합니다.)
그래서 질문드리는데 혹시 마운트 포인트를 다른 일반 폴더를 지정하면 안되는건지 여쭤보고싶습니다….
Author
원하는 위치에 마운트하면 됩니다.
오류는 로그를 봐야 알 수 있는데, 안타깝네요.
오류는 해결했습니다…그런데 다른문제가 생겼는데…일단 node1에서 mnt라는 곳에 파일을 만들고 node1을 stop하면 node2에서 자동으로 mount하여 mnt라는곳에 파일이 생길줄 알았는데 생기지 않아 궁금해서 댓글을 적습니다…혹시 설정을 따로 해야되는게 있는지 여쭤보고싶습니다…
Author
drbd가 클러스터 리소스에 등록이 되어 있어야 자동으로 마운트가 됩니다.
제가 작성자님께서 하신대로 하여 제대로 마운트된 것을 확인하였고 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
이렇게 떴습니다.
혹시 왜이런지 알수있을까요??
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 로 관련 로그를 확인해 보아야 할듯 합니다.
제가 여러번 다시 해보니 마운트는 되는것으로 확인되는데 failed action에는 오류가 남아있어 crm_resource -P라는 명령어를 사용하여 failed action을 제거하였습니다.
제가 node1을 종료 하였을 때 자동으로 node2로 넘어는 것은 확인하였는데 node1이 다시 살아났을 경우 제가 명령어를 입력하지 않고 node1으로 다시 넘어가는 것을 할 수 있는지 여쭤 보고 싶습니다.
Author
덕분에 저도 다시 공부해 보게 되네요.
얼마전 resource-stickiness에 대해 질문하셨었죠? 이부분에 오류가 있어 답변을 다시 달아놓았습니다. 참고해 주시고요.
아무튼,
pcs resource defaults 명령어를 내리면 resource-stickiness 값이 보일겁니다. 값이 0 이면 자동으로 리소스가 노드1 로 되돌아옵니다. 아마도 제가 작성한 문서대로 하셨으면 60 으로 되어 있을텐데요, 제 경우에는 이 값에서도 자동으로 되돌아옵니다.
pcs resource defaults resource-stickiness=100 으로 변경하니 자동 복구되지 않았습니다.
관련 문서를 찾아 봐도 정확히 얼마의 숫자가 되어야 원하는 동작을 하는지는 명시되어 있지 않습니다.
일단 분명한것은 리소스가 장애복구시 원래 노드로 되돌아오도록 하려면 값을 0 으로 조정하면 될겁니다.
안녕하세요. 작성하신글 잘보았습니다.
다름이 아니라 nagios나 zabbix와 같은 모니터링 툴은 linux ha의 resource에 적용할 수 없나요??
가능합니다.
nagios는 아래 문서를 참고하시면 될 것같습니다.
https://wiki.clusterlabs.org/wiki/Nagios3_on_Pacemaker_DRBD
감사합니다.
혹시 nagios 적용 포스트 작성하실 생각이 없으신지요?
제가 아무리 찾아봐도 nagios적용 포스트 글이 없어 다른 사람들에게도 도움이 될 것 같아 여쭤봅니다.
Author
좋은 의견 고맙습니다.
일 하는 곳에서 상용 모니터링 틀을 사용중이라, 해 볼 생각은 안했었네요.
시간 날때, 시험 해 보도록 하겠습니다.
오…? 혹시 실례가 안된다면 사용하시는 상용 모니터링 툴이 어떤건지 여쭤봐도 될까요?
Author
solarwinds 라는 제품이고요, snmp기반 모니터링 제품입니다.
좀 오래된 버젼을 아직도 사용하고 있어요!!
덕분에 실습 잘 해보았습니다. 혹시 DB Replication, HA도 같이 접목 시키는건 어려울까요?
Author
데이타베이스 종류에 따라서 생각해 봐야할게 조금 다를듯 합니다.
자꾸 질문드려 죄송합니다.
혹시 node1이나 node2가 서로 체크하는 시간을 조절할 수 있나요?
예를 들어 5초 또는 10초 또는 0.5초 등… 시간을 조절하여 죽었는지 살았는지 상태를 점검할 수 있는지 궁금합니다.
corosync 설정에서 heartbeat 시간을 조정 가능하다고 합니다.
/etc/corosync/corosync.conf 에서 token 값이 timeout 시간이라 합니다.
자세한것은 아래 문서 참고하시면 됩니다.
https://www.thegeekdiary.com/how-to-change-pacemaker-cluster-heartbeat-timeout-in-centos-rhel-7/
안녕하세요.
위 댓글을 적으신분처럼 pacemaker에 모니터링 툴을 연결하여 감시하고 싶은데 방법을 모르겠네요.
혹시 가능하시다면 게시글로 만들어 주실수 있으신지 궁금합니다.
감사합니다.
Author
어떤 툴을 사용하고 싶으신지요? 모니터링 툴들이, snmp기반인것과, agent방식인것으로 나뉘니까요.
일단 nagios를 생각하고 있습니다.
그런데 다른 모니터링툴도 상관없습니다.
확인 부탁드립니다. 감사합니다.
혹시 지금도 모니터링 툴 올릴 생각 없으신가요…?ㅠㅠ
Author
zabbix 를 ha로 구성해 보았습니다. 본문에 링크 걸어 두었어요. ;^^
안녕하세요 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
Author
일단 위쪽 stderr를 보면 sqlplus를 못찾는거 같네요. sqlplus가 있는 디렉토리를 path에 넣어보시는것은 어떨까요?
아, 그리고 혹시 drbd 구성인가요?
혹시 node1에서 drdb 패키지 rpm,yum으로 이후에 모듈을 로딩하는 도중 아래와 같이 에러가 뜨는데 어떻게 해결하는 방법이 없을까요?..
[root@test01 ~]# modprobe drbd
modprobe: ERROR: could not insert ‘drbd’: Required key not available
커널 모듈이 로드되지 않고 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
이후 비밀번호 설정하고 재부팅 하면 된다고 합니다.
안녕하세요
혹시 sqlplus: required binary not installed 이 오류는 해결하셨나요ㅠㅠ?
Author
어떤 상황인지요?
oracle 설치했는데, HA 구성에 문제가 있는것인지요?
Oracle Engine 영역에 대해서도 DRDB 구성하신거 같은데, Engine 영역이 설치가 안되어서 그런거 아닐까요.
AIX나 HP-UX HA Cluster 이용해서 구성할때도 Oracle Engine 영역은 각 노드별로 설치한 상태에서 해당 DB Instance 운용에 필요한 볼륨 그룹만 Failover, Failback 설정하는 것으로 알고 있습니다.