DRBD-SDS/Pacemaker/Corosnc/KVMで作るKVM仮想化クラスタ(クラスタ環境構築)

Table of Content

はじめに

KVM仮想化クラスタの構築を作っていきます。前回は、仮想環境の構築までを行いました。
本記事ではPacemaker/Corosyncを導入してクラスタ環境を作成するところまでを行います。

記事の構成は次の通りです。

Pacemaker/Corosyncインストール

node1,node2それぞれで次のコマンドを実行し、Pacemaker/Corosyncをインストールします。

sudo dnf install -y --enablerepo=ha pacemaker corosync pcs
sudo systemctl enable --now pcsd
sudo firewall-cmd --permanent --zone=public --add-port=2224/tcp
sudo firewall-cmd --reload

passwdコマンドでユーザ「hacluster」のパスワードを設定します。

$ sudo passwd hacluster
Changing password for user hacluster.
New password: 
Retype new password: 
passwd: all authentication tokens updated successfully.

クラスタの基本設定

node1で次のコマンドを実行します。

# 各ノードの認証を確立
$ sudo pcs host auth node1 addr=192.168.200.10 node2 addr=192.168.200.11 -u hacluster
Password: 
node2: Authorized
node1: Authorized
# クラスタを構成
$ sudo pcs cluster setup ha_cluster \
  node1 addr=192.168.200.10 addr=192.168.201.10 \
  node2 addr=192.168.200.11 addr=192.168.201.11
Destroying cluster on hosts: 'node1', 'node2'...
node2: Successfully destroyed cluster
node1: Successfully destroyed cluster
Requesting remove 'pcsd settings' from 'node1', 'node2'
node1: successful removal of the file 'pcsd settings'
node2: successful removal of the file 'pcsd settings'
Sending 'corosync authkey', 'pacemaker authkey' to 'node1', 'node2'
node1: successful distribution of the file 'corosync authkey'
node1: successful distribution of the file 'pacemaker authkey'
node2: successful distribution of the file 'corosync authkey'
node2: successful distribution of the file 'pacemaker authkey'
Sending 'corosync.conf' to 'node1', 'node2'
node1: successful distribution of the file 'corosync.conf'
node2: successful distribution of the file 'corosync.conf'
Cluster has been successfully set up.
# クラスタサービスの起動
$ sudo pcs cluster start --all
node2: Starting Cluster...
node1: Starting Cluster...
# クラスタの自動起動の設定
$ sudo pcs cluster enable --all
node1: Cluster Enabled
node2: Cluster Enabled
# STONTH無効化
$ sudo pcs property set stonith-enabled=false
# quorum無効化
$ sudo pcs property set no-quorum-policy=ignore
# 動作確認
$ sudo pcs cluster status
Cluster Status:
 Cluster Summary:
   * Stack: corosync
   * Current DC: node2 (version 2.0.4-6.el8_3.1-2deceaa3ae) - partition with quorum
   * Last updated: Sun Mar 21 09:57:24 2021
   * Last change:  Sun Mar 21 09:56:35 2021 by hacluster via crmd on node2
   * 2 nodes configured
   * 0 resource instances configured
 Node List:
   * Online: [ node1 node2 ]

PCSD Status:
  node1: Online
  node2: Online
$ sudo pcs status corosync

Membership information
----------------------
    Nodeid      Votes Name
         1          1 node1 (local)
         2          1 node2
# サーバ間通信状態の確認
$ sudo corosync-cfgtool -s
Printing link status.
Local node ID 1
LINK ID 0
    addr    = 192.168.200.10
    status:
        nodeid  1:  link enabled:1  link connected:1
        nodeid  2:  link enabled:1  link connected:1
LINK ID 1
    addr    = 192.168.201.10
    status:
        nodeid  1:  link enabled:0  link connected:1
        nodeid  2:  link enabled:1  link connected:1

linstor-controllerのクラスタ化

Pacemaker/Corosyncのインストールが出来たので、linstor-controllerをクラスタ化します。

LINSTORデータベース用のDRBDリソース作成

node1で次のコマンドを実行し、LINSTORデータベース用のDRBDリソースを作成します。

linstor resource-definition create res0
linstor volume-definition create res0 250M
linstor resource create node1 res0 --storage-pool pool0
linstor resource create node2 res0 --storage-pool pool0

LINSTORデータベースをDRBDデバイスに移す

node1で次のコマンドを実行し、「/var/lib/linstor」をDRBDに移します。

sudo systemctl disable --now linstor-controller
sudo rsync -avp /var/lib/linstor /tmp/
sudo mkfs.xfs /dev/drbd/by-res/res0/0
sudo rm -rf /var/lib/linstor/*
sudo mount /dev/drbd/by-res/res0/0 /var/lib/linstor
sudo rsync -avp /tmp/linstor/ /var/lib/linstor/
sudo umount /var/lib/linstor

ファイアウォールの設定

node1,node2で次のコマンドを入力し、linstor-controllerのポートを開放します。

sudo firewall-cmd --permanent --zone=public --add-port=3370/tcp
sudo firewall-cmd --reload

クラスタのリソースエージェントを登録する

node1で次のコマンドを実行し、ファイルシステム、systemd、仮想IPのリソースエージェントを登録します。

sudo pcs resource create fs_linstor ocf:heartbeat:Filesystem \
  device=/dev/drbd/by-res/res0/0 directory=/var/lib/linstor fstype=xfs \
  --group linstor
sudo pcs resource create systemd_linstor systemd:linstor-controller \
   op monitor interval="10s" timeout="20s" \
   --group linstor
sudo pcs resource create ip_linstor  ocf:heartbeat:IPaddr2 \
  ip=192.168.100.110 cidr_netmask=24 nic=br0 \
  op monitor interval=10s --group linstor

linstor-clientの設定

node1,node2で「/etc/linstor/linstor-client.conf」を次のように編集し、node1,node2から仮想IPへlinstor-controllerへ接続できるようにします。

[global]
controllers=192.168.100.110

最後に

とりあえずPacemaker/Corosyncを作るところまで構築しました。
本記事ではスプリットブレインについては考慮していません。スプリットブレインが発生したら、DRBDでどちらかをセカンダリに降格することで対処することにします。次の記事で仮想マシンを作成します。