DRBDとPacemakerをコミュニティ版からLINBIT版に入れ替えてみた

DRBDとPacemakerはオープンソースで公開されていますので、ソースコードをコンパイルしたり、適切なレポジトリを登録すると簡単にインストールして利用できます。(コミュニティ版)

サイオステクノロジーはLINBIT社が提供する有償サポートを販売しています。
このサポートを契約すると、DRBDやPacemakerの初期の設定方法や、運用後の不具合についての解決方法を、サイオステクノロジーへ問い合わせすることが出来ます。

また、PacemakerやDRBDに不具合や脆弱性が見つかった時、LINBIT社が修正したバイナリがコミュニティ版より早く提供されます。ただし、このサポートはLINBIT社の提供するバイナリの利用を前提にしているため、コミュニティ版を利用している場合は、正式なサポートバイナリ(LINBITバイナリ)に入れ替える必要があります。

今回はこの入れ替えの手順をCentOS 8での例を使って紹介します。

1.コミュニティ版での環境構築

DRBDとPacemakerのコミュニティ版の構築方法は、ネット上にいろいろ情報があります。詳細はそちらを参考にしてください。今回の環境ではDRBDをELRepo.org のパッケージを、PacemakerをCentOS-HAのパッケージを利用しました。

[root@node1 yum.repos.d]# yum info kmod-drbd90
Last metadata expiration check: 0:00:10 ago on Sat May 23 19:10:47 2020.
Installed Packages
Name         : kmod-drbd90
Version      : 9.0.21
Release      : 2.el8_1.elrepo
Architecture : x86_64
Size         : 1.3 M
Source       : kmod-drbd90-9.0.21-2.el8_1.elrepo.src.rpm
Repository   : @System
From repo    : elrepo
Summary      : drbd90 kernel module(s)
URL          : https://www.drbd.org/
License      : GPLv2
Description  : DRBD is a distributed replicated block device. It mirrors a
             : block device over the network to another machine. Think of it
             : as networked raid 1. It is a building block for setting up
             : high availability (HA) clusters.
             : This package provides the drbd90 kernel module(s).
             : It is built to depend upon the specific ABI provided by a range of releases
             : of the same variant of the Linux kernel and not on any one specific build.

[root@node1 yum.repos.d]# yum info pacemaker
Last metadata expiration check: 0:08:23 ago on at May 23 19:10:47 2020.
Installed Packages
Name         : pacemaker
Version      : 2.0.2
Release      : 3.el8_1.2
Architecture : x86_64
Size         : 1.3 M
Source       : pacemaker-2.0.2-3.el8_1.2.src.rpm
Repository   : @System
From repo    : HighAvailability
Summary      : Scalable High-Availability cluster resource manager
URL          : https://www.clusterlabs.org
License      : GPLv2+ and LGPLv2+
Description  : Pacemaker is an advanced, scalable High-Availability cluster resource
             : manager.
             : 
             : It supports more than 16 node clusters with significant capabilities
             : for managing resources and dependencies.
             : 
             : It will run scripts at initialization, when machines go up or down,
             : when related resources fail and can be configured to periodically check
             : resource health.
             : 
             : Available rpmbuild rebuild options:
             :   –with(out) : coverage doc stonithd hardening pre_release profiling

評価環境のとして、2ノード(node1、node2)でMariaDBのHAクラスタをこれらのパッケージを使った構築しました。

[root@node1 yum.repos.d]# crm_mon -frA1
Stack: corosync
Current DC: node1 (version 2.0.2-3.el8_1.2-744a30d655) – partition with quorum
Last updated: Sat May 23 19:23:23 2020
Last change: Sat May 23 01:01:21 2020 by root via cibadmin on node1

2 nodes configured
3 resources configured

Online: [ node1 node2 ]

Full list of resources:

Resource Group: mydbsv

     VIP (ocf::heartbeat:IPaddr2): Started node1
     drbdfs (ocf::heartbeat:Filesystem): Started node1
    mariadb (ocf::heartbeat:mysql): Started node1

Node Attributes:
* Node node1:
* Node node2:

Migration Summary:
* Node node2:
* Node node1:

VIPとdrbdfs、mariadbの3つのリソースが、node1で動作していることが判ります。

2.node2の停止

スタンバイノードになっているnode2をLINBITバイナリ化します。そのためにはまず、インストールされているコミュニティ版のバイナリーを削除します。

[root@node2 ~]# systemctl stop pacemaker
[root@node2 ~]# systemctl stop corosync 

[root@node2 yum.repos.d]# yum remove pacemaker corosync pcs
Dependencies resolved.

============================================================
 Package                    Arch   Version                              Repository         Size
============================================================
Removing:
 corosync                   x86_64 3.0.2-3.el8_1.1                      @HighAvailability 672 k
 pacemaker                  x86_64 2.0.2-3.el8_1.2                      @HighAvailability 1.3 M
Removing unused dependencies:
 avahi-libs                 x86_64 0.7-19.el8                           @BaseOS           159 k
….

[root@node2 ~]#
[root@node2 ~]#[root@node2 yum.repos.d]# yum remove drbd90-utils-9.10.0-2.el8.elrepo.x86_64 kmod-drbd90-9.0.21-2.el8_1.elrepo.x86_6
Dependencies resolved.
============================================================
 Package               Architecture    Version                           Repository        Size
============================================================
Removing:
 drbd90-utils          x86_64          9.10.0-2.el8.elrepo               @elrepo          2.2 M
 kmod-drbd90           x86_64          9.0.21-2.el8_1.elrepo             @elrepo          1.3 M

Transaction Summary

============================================================
Remove  2 Packages

Freed space: 3.5 M
Is this ok [y/N]: y
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                                        1/1 
  Running scriptlet: kmod-drbd90-9.0.21-2.el8_1.elrepo.x86_64                               1/1 
  Running scriptlet: kmod-drbd90-9.0.21-2.el8_1.elrepo.x86_64                               1/2 
  Erasing          : kmod-drbd90-9.0.21-2.el8_1.elrepo.x86_64                               1/2 
  Running scriptlet: kmod-drbd90-9.0.21-2.el8_1.elrepo.x86_64                               1/2 
  Running scriptlet: kmod-drbd90-9.0.21-2.el8_1.elrepo.x86_64                               1/2 
  Running scriptlet: drbd90-utils-9.10.0-2.el8.elrepo.x86_64                                2/2 
  Erasing          : drbd90-utils-9.10.0-2.el8.elrepo.x86_64                                2/2 
  Running scriptlet: drbd90-utils-9.10.0-2.el8.elrepo.x86_64                                2/2 
  Verifying        : drbd90-utils-9.10.0-2.el8.elrepo.x86_64                                1/2 
  Verifying        : kmod-drbd90-9.0.21-2.el8_1.elrepo.x86_64                               2/2 

Removed:
  drbd90-utils-9.10.0-2.el8.elrepo.x86_64        kmod-drbd90-9.0.21-2.el8_1.elrepo.x86_64

Complete!
[root@node2 yum.repos.d]#
[root@node2 yum.repos.d]# shutdown -r now

ここで一旦node2を再起動します。これはDRBDがカーネルオブジェクトであり、再起動しないとカーネル内に古いコードが残ってしまう事があるためです。

node2で再起動を行っても、node1ではサービスは止まらずに動き続けます。

3.LINBITバイナリのインストール

node2の再起動後にレポジトリをLINBITバイナリ向けに修正します。

このシステムではCentOS-HAからPacemakerとCorosyncを読み込んでいるので、このレポジトリを無効にします。/etc/yum.repos.d/CentOS-HA.repoのenabledを0に設定します。

[root@node2 yum.repos.d]# cat CentOS-HA.repo 
# CentOS-HA.repo
#
# The mirror system uses the connecting IP address of the client and the
# update status of each mirror to pick mirrors that are updated to and
# geographically close to the client.  You should use this for CentOS updates
# unless you are manually picking other mirrors.
#
# If the mirrorlist= does not work for you, as a fall back you can try the
# remarked out baseurl= line instead.
#
#

[HighAvailability] name=CentOS-$releasever – HA
mirrorlist=https://mirrorlist.centos.org/
release=$releasever&arch=$basearch&repo=HighAvailability&in
fra=$infra
#baseurl=https://mirror.centos.org/$contentdir/$releasever/HighAvailability/$basearch/os/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial

次にDRBDのコミュニティ版のリポジトリを無効にします。この環境では/etc/yum.repos.d/elrepo.repoのenabledを0に設定します。

[root@node2 yum.repos.d]# cat elrepo.repo 
### Name: ELRepo.org Community Enterprise Linux Repository for el8
### URL: https://elrepo.org/

[elrepo] name=ELRepo.org Community Enterprise Linux Repository – el8
baseurl=https://elrepo.org/linux/elrepo/el8/$basearch/
https://mirrors.coreix.net/elrepo/elrepo/el8/$basearch/
https://mirror.rackspace.com/elrepo/elrepo/el8/$basearch/
https://repos.lax-noc.com/elrepo/elrepo/el8/$basearch/
mirrorlist=https://mirrors.elrepo.org/mirrors-elrepo.el8
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-elrepo.org

次にLINBITバイナリのリポジトリを作成します。/etc/yum.repos.d/linbit.repoとして次のようなファイルを作成します。

[root@node2 yum.repos.d]# cat linbit.repo 
[pacemaker-2] name=LINBIT Packages for pacemaker-2 – $basearch
baseurl=https://packages.linbit.com/<<ハッシュ番号>>/yum/rhel8/pacemaker-2/$basearch
enabled=1
gpgkey=https://packages.linbit.com/package-signing-pubkey.asc
gpgcheck=1

[drbd-9.0] name=LINBIT Packages for drbd-9.0 – $basearch
baseurl=https://packages.linbit.com/<<ハッシュ番号>>/yum/rhel8.1/drbd-9.0/$basearch
enabled=1
gpgkey=https://packages.linbit.com/package-signing-pubkey.asc
gpgcheck=1

※<<ハッシュ番号>>はLINBITのサポートに契約いただくと入手できる文字列です。

レポジトリの準備が出来たら、Pacemaker、Corosyncのパッケージをインストールします。

[root@node2 yum.repos.d]# yum install pacemaker corosync pcs
Last metadata expiration check: 0:00:13 ago on Tue May 26 21:06:43 2020.
Dependencies resolved.
==============================================================
 Package                        Arch   Version                                Repository   Size
==============================================================
Installing:
 corosync                       x86_64 3.0.2.linbit-1.0.el8                   pacemaker-2 260 k
 pacemaker                      x86_64 2.0.2.linbit-3.0.el8                   pacemaker-2 427 k
 pcs                            x86_64 0.10.2.linbit-1.0.el8                  pacemaker-2  11 M
Installing dependencies:
 centos-logos                   x86_64 80.5-2.el8                             AppStream   706 k
 nspr                           x86_64 4.21.0-2.el8_0                         AppStream   143 k
 nss                            x86_64 3.44.0-9.el8_1                         AppStream   724 k
 nss-softokn                    x86_64 3.44.0-9.el8_1                         AppStream   472 k
 nss-softokn-freebl             x86_64 3.44.0-9.el8_1                         AppStream   273 k

 pacemaker-libs-2.0.2.linbit-3.0.el8.x86_64                                                    
  pacemaker-schemas-2.0.2.linbit-3.0.el8.noarch                                                 
  resource-agents-4.1.1.linbit-1.0.el8.x86_64                                                   

Complete!
[root@node2 yum.repos.d]# 

引き続きDRBDをインストールします。

[root@node2 yum.repos.d]# yum install kmod-drbd drbd
Last metadata expiration check: 0:03:39 ago on Tue May 26 21:06:43 2020.
Dependencies resolved.
=============================================================
 Package                      Architecture   Version                     Repository        Size
=============================================================
Installing:
 drbd                         x86_64         9.13.1-1.el8                drbd-9.0          22 k
 kmod-drbd                    x86_64         9.0.22_4.18.0_147-2         drbd-9.0         345 k
Installing dependencies:
 drbd-bash-completion         x86_64         9.13.1-1.el8                drbd-9.0          11 k
 drbd-pacemaker               x86_64         9.13.1-1.el8                drbd-9.0          45 k
 drbd-udev                    x86_64         9.13.1-1.el8                drbd-9.0         9.9 k
 drbd-utils                   x86_64         9.13.1-1.el8                drbd-9.0         614 k
 drbd-xen                     x86_64         9.13.1-1.el8                drbd-9.0          12 k

Transaction Summary
=============================================================
Install  7 Packages

Total download size: 1.0 M
Installed size: 1.0 M
Is this ok [y/N]: y
Downloading Packages:
(1/7): drbd-bash-completion-9.13.1-1.el8.x86_64.rpm             6.2 kB/s |  11 kB     00:01    
(2/7): drbd-9.13.1-1.el8.x86_64.rpm                              12 kB/s |  22 kB     00:01    
(3/7): drbd-udev-9.13.1-1.el8.x86_64.rpm                         17 kB/s | 9.9 kB     00:00    
(4/7): drbd-pacemaker-9.13.1-1.el8.x86_64.rpm                    18 kB/s |  45 kB     00:02    
(5/7): drbd-xen-9.13.1-1.el8.x86_64.rpm                          21 kB/s |  12 kB     00:00    
(6/7): drbd-utils-9.13.1-1.el8.x86_64.rpm                       324 kB/s | 614 kB     00:01    
(7/7): kmod-drbd-9.0.22_4.18.0_147-2.x86_64.rpm                  21 kB/s | 345 kB     00:16    
————————————————————————————————
Total                                                            55 kB/s | 1.0 MB     00:19   

Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                                        1/1
  Installing       : drbd-utils-9.13.1-1.el8.x86_64                                         1/7 
  Running scriptlet: drbd-utils-9.13.1-1.el8.x86_64                                         1/7 
  Installing       : drbd-bash-completion-9.13.1-1.el8.x86_64                               2/7 
  Installing       : drbd-pacemaker-9.13.1-1.el8.x86_64                                     3/7 
  Installing       : drbd-udev-9.13.1-1.el8.x86_64                                          4/7 
  Installing       : drbd-xen-9.13.1-1.el8.x86_64                                           5/7 
  Installing       : drbd-9.13.1-1.el8.x86_64                                               6/7 
  Installing       : kmod-drbd-9.0.22_4.18.0_147-2.x86_64                                   7/7 
  Running scriptlet: kmod-drbd-9.0.22_4.18.0_147-2.x86_64                                   7/7 
  Verifying        : drbd-9.13.1-1.el8.x86_64                                               1/7 
  Verifying        : drbd-bash-completion-9.13.1-1.el8.x86_64                               2/7 
  Verifying        : drbd-pacemaker-9.13.1-1.el8.x86_64                                     3/7 
  Verifying        : drbd-udev-9.13.1-1.el8.x86_64                                          4/7 
  Verifying        : drbd-utils-9.13.1-1.el8.x86_64                                         5/7 
  Verifying        : drbd-xen-9.13.1-1.el8.x86_64                                           6/7 
  Verifying        : kmod-drbd-9.0.22_4.18.0_147-2.x86_64                                   7/7  

Installed:
  drbd-9.13.1-1.el8.x86_64                         kmod-drbd-9.0.22_4.18.0_147-2.x86_64       
  drbd-bash-completion-9.13.1-1.el8.x86_64         drbd-pacemaker-9.13.1-1.el8.x86_64          
  drbd-udev-9.13.1-1.el8.x86_64                    drbd-utils-9.13.1-1.el8.x86_64              
  drbd-xen-9.13.1-1.el8.x86_64                     

Complete!

インストールが終わったら、DRBDを起動して、node1のコミュニティ版のDRBDとデータ同期が出来るか確認します。

[root@node2 yum.repos.d]# drbdadm up r0
[root@node2 yum.repos.d]# drbdadm status

  –==  Thank you for participating in the global usage survey  ==–
The server’s response is:

node already registered
r0 role:Secondary
  disk:UpToDate
  node1 role:Primary
    peer-disk:UpToDate

disk:UpToDateになっているのでデータ同期は正常です。
最後にPacemakerとCorosyncを起動して、node1とのHAクラスタが復帰するか確認します。

Online: [ node1 node2 ]

Full list of resources:

 Resource Group: mydbsv
     VIP        (ocf::heartbeat:IPaddr2): Started node1
     drbdfs     (ocf::heartbeat:Filesystem):    Started node1
     mariadb    (ocf::heartbeat:mysql): Started node1

Node Attributes:
* Node node1:
* Node node2:

Migration Summary:
* Node node1:
* Node node2:

無事にnode1がコミュニティ版、node2がLINBITバイナリの状態でHAクラスタが復旧しました。

4.node1のLINBITバイナリ化

次にnode2に続いて、node1をLINBITバイナリ化します。手順としてはnode2で行ったことと同じなります。
PacemakerとCorosyncを停止すると、HAクラスタはnode1がOFFLINEになり、node2にサービスがフェールオーバーします。

Online: [ node2 ] OFFLINE: [ node1 ]

Full list of resources:

 Resource Group: mydbsv
     VIP        (ocf::heartbeat:IPaddr2): Started node2
     drbdfs     (ocf::heartbeat:Filesystem):    Started node2
     mariadb    (ocf::heartbeat:mysql): Started node2

Node Attributes:
* Node node2:

Migration Summary:
* Node node2:

node1がOFFLINEになったら、コミュニティ版のPacemaker、Corosync、DRBDの削除とLINBIT版バイナリのインストールを行います。

5.最後に

PacemakerとDRBDのコミュニティ版とLINBIT版のバイナリは、同じソースコードから作られているので設定の互換性がきわめて高く、この記事でで見てきたように片方のノードをコミュニティ版、もう片方のノードをLINBIT版のバイナリーにしても動作します。

大きくバージョンが異なる場合には本書の通りにバイナリの入れ替えが出来ない可能性はあります。その場合はコミュニティ版のバージョンを最新のものに変えてお試しください。

このように、PacemakerとDRBDを使ったシステムは、サービスの停止を最小限にしてメンテナンスが行えます。コミュニティ版からサポートのあるLINBIT版のバイナリに変更するのも容易です。

本日(2020年5月27日)時点で、RHEL8、CentOS8のHighAvailabilityオプションではcrmshが使えませんが、このツールはLINBITバイナリでは利用可能です。RHEL8、CentOS8でcrmコマンドを使ってPacemakerの構築や運用を続けたい方には、LINBITのバイナリをお勧めします。

>>LINBITクラスタスタックサポート

 

ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

0人がこの投稿は役に立ったと言っています。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です