2018年9月7日金曜日

dlmとclvmdの依存関係(gfs2用)

dlmとclvmdリソースの起動順を定義しておく必要があるようだ。
#と言っても、dlmもclvmdもOS起動時にsystemdから起動されるので、あまり意味が無い気がするんだけど…。
#RHEL7だと、systemdから起動させず、各リソース定義から起動させるのだろうか…。

RedHat社のサイトだと、以下のコマンドとして記載されている。
pcs constraint order start dlm-clone then clvmd-clone
pcs constraint colocation add clvmd-clone with dlm-clone
起動順だけでなく、「clvmdもdlmも同じノードで起動するよ」という制約も付けていた。

まずは起動順から。
pcsd の画面から dlm-cloneリソース か clvmd-cloneリソース の Resource Ordering Preferences から設定するようだ。

dlm-clone リソースから設定する場合は、以下のように入力する。
  • Resource : clvmd-clone
  • Action : starts
  • Before/After : after dlm-clone
  • Action : starts
  • Score : 無し
これは、「dlm-clone が起動した後に、clvmd-cloneを起動させる」という意味だ。

clvmd-clone リソースから設定する場合は、以下のように入力する。
  • Resource : dlm-clone
  • Action : starts
  • Before/After : before
  • Action : starts
  • Score : 無し
これは「dlm-clone を先に起動させる」という意味。

リソースの起動順はこれでおしまい。

続いて起動ノードの制約。
こちらは pcsd の dlm-cloneリソース か clvmd-cloneリソース の Resource Colocataion Preferences という設定画面から設定可能。
設定内容は以下の通り。
  • Resource : 相手側のリソース名。clvmd-clone リソースから定義しているのなら、dlm-clone
  • Together/Apart : Together
  • Score : 無し(未設定だと INFINITY で設定される)
どちらか片方で設定すれば、もう片方からも自動設定されるぞ。

設定出来たら設定内容を確認してみよう。
(gemini) $ sudo pcs constraint show --full

依存関係等はこれで終了かな?

2018年9月6日木曜日

clvmdをクラスタリソースに(gfs2用)

RedHat社の手順だと、ココで clvmd をクラスタリソースとして定義している。

んが、gemini と cancer には、まだ clvmd をインストールしていない。
なので、このタイミングでまずインストールする。
(gemini) $ sudo apt-get update
(gemini) $ sudo apt-get install clvm
(gemini) $ dpkg -l clvm
(gemiin) $ dpkg -L clvm

cancer でも。
(cancer) $ sudo apt-get update
(cancer) $ sudo apt-get install clvm
(cancer) $ dpkg -l clvm
(cancer) $ dpkg -L clvm

インストールが終わったら、clvmd をクラスタリソースとして定義する。
RedHat社のサイトでは、以下のコマンドを実行している。
pcs resource create clvmd ocf:heartbeat:clvm \
  op monitor interval=30s on-fail=fence \
  clone \
  interleave=true \
  ordered=true

dlmリソースを作成した時とよく似ている。
ということは、その時と同じように設定すればいいってことだ。
pcsdの画面を使って、RESOURCESタブからAddを選択。
以下のように入力する。
  • Class/Provider : ocf:heartbeat
  • Type : clvm
  • Resource Group : None
  • Clone : チェックOn
  • Master/Slave : チェックOff
  • Disabled : チェックOff
  • ResourceID : clvmd
  • with_cmirrord : なし
  • configdir : なし
  • daemon_options : なし
  • active_vgs : なし
これで作成。

あれ?確かにclvmd-cloneとclvmdのリソースは作成されたけど、ステータスがblockedになってしまった。
clvmdが起動していないとダメなのか?

う~ん。強制的にリソースを起動してみると…。
(gemini) $ sudo pcs resource debug-start clvmd
(gemini) $ ps -ef | grep clvmd
動いたけど…起動時に「lvmetadが無効になっているのに起動してるで。有効化して再起動しな。」って言われてる気がするが…。
lvmetad は無効化するのが正しいはずなので、lvmetad を停止すればいいのかな?
とりあえず、clvmdリソースは停止する。
(gemini) $ sudo pcs resource debug-stop clvmd
(gemini) $ ps -ef | grep clvmd

lvmetadの状態を確認してみよう。
(gemini) $ systemctl status lvm2-lvmetad.service
起動していて、かつ自動起動Offだ。(disabled)
止めてしまおう。
(gemini) $ sudo systemctl stop lvm2-lvmetad.service
(gemini) $ systemctl status lvm2-lvmetad.service
なんか、lvm2-lvmetad.socketが有効だぞ、と言われたけど、一旦無視する。

これでもう一回、強制起動を。
(gemini) $ sudo pcs resource debug-start clvmd
(gemini) $ ps -ef | grep clvmd
先程のワーニングは消えた。

とりあえず止める。
(gemini) $ sudo pcs resource debug-stop clvmd

となると、systemctl から clvmd が起動してくれればイケそうだな。
以前、clvmd の起動はココで苦労したんだけど、この記事若干間違っているので、ここで再度整理して実行しよう。

lvm2-clvmd.service の定義ファイルが誤っているっぽいので、コピーして修正する。
(gemini) $ sudo cp -pi /lib/systemd/system/lvm2-clvmd.service \
    /etc/systemd/system/
(gemini) $ sudo vi /etc/systemd/system/lvm2-clvmd.service
----
ExecStart=/sbin/clvmd $CLVMD_OPTS

ExecStart=/usr/sbin/clvmd $CLVMD_OPTS
----
以前の記事では、うだうだと色々いじっているが、実際にいじるのは上記だけだ。

これで起動してみる。
(gemini) $ sudo systemctl daemon-reload
(gemini) $ sudo systemctl start lvm2-cluster-activation.service

pcsd の画面から、 clvmd-clone リソースを Cleanup して暫く待ったら、無事に動き出した。(ただし、リソース自体はgeminiでしか動いていない。cancer側の修正が出来てないから当たり前だが)
(gemini) $ sudo pcs resource

lvm2-cluster-activation.service は自動起動になっていないようなので、自動起動にしておく。
(gemini) $ systemctl is-enabled lvm2-cluster-activation.service
(gemini) $ sudo systemctl enable lvm2-cluster-activation.service
(gemini) $ systemctl is-enabled lvm2-cluster-activation.service

同じようにcancerをカスタマイズする。
(cancer) $ sudo cp -pi /lib/systemd/system/lvm2-clvmd.service \
    /etc/systemd/system/
(cancer) $ sudo vi /etc/systemd/system/lvm2-clvmd.service
----
ExecStart=/sbin/clvmd $CLVMD_OPTS

ExecStart=/usr/sbin/clvmd $CLVMD_OPTS
----

起動してみる。
(cancer) $ sudo systemctl daemon-reload
(cancer) $ sudo systemctl start lvm2-cluster-activation.service

また、pcsd の画面から、clvm-clone リソースを Cleanup して暫く待つ。
cancer側でも動いているのを確認する。
(cancer) $ sudo pcs resource

動いているのが確認できたら、cancer でも lvm2-cluster-activation.service を自動起動にする。
(cancer) $ systemctl is-enabled lvm2-cluster-activation.service
(cancer) $ sudo systemctl enable lvm2-cluster-activation.service
(cancer) $ systemctl is-enabled lvm2-cluster-activation.service

さて、あとは op monitor interval=30s on-fail=fence と interleave=true ordered=true の設定だな。
サクッと片付けよう。
(gemini) $ sudo pcs resource show clvmd-clone
(gemini) $ sudo pcs resource op remove clvmd monitor
(gemini) $ sudo pcs resource op add clvmd monitor interval=30s on-fail=fence
(gemini) $ sudo pcs resource show clvmd-clone

interleave=true と ordered=true は、pcsd の画面の Meta Attrib から足したらおしまいだ。

とりあえずココまで。

追記
cancerのlvmetadを止めておくのを忘れていたので止めておく。
(cancer) $ systemctl status lvm2-lvmetad.service
(cancer) $ sudo systemctl stop lvm2-lvmetad.service
(cancer) $ systemctl status lvm2-lvmetad.service

2018年9月4日火曜日

lvmconf(gfs2用)

続いて、lvmconfコマンド。
これは以前、この辺りで書いてた内容を、新しい gemini / cancer で実行するだけのお話。
さっそくやってみよう。
(gemini) $ sudo cp -pi /etc/lvm/lvm.conf /etc/lvm/lvm.conf.orig
(gemini) $ sudo lvmconf --enable-cluster
(gemini) $ diff -c /etc/lvm/lvm.conf.orig /etc/lvm/lvm.conf
locking_type が 3に、use_lvmetad が 0 に更新された。

同じように cancer も。
(cancer) $ sudo cp -pi /etc/lvm/lvm.conf /etc/lvm/lvm.conf.orig
(cancer) $ sudo lvmconf --enable-cluster
(cancer) $ diff -c /etc/lvm/lvm.conf.orig /etc/lvm/lvm.conf

はて、lvmetadは可動しっぱなしだけど、OS再起動とか lvm2-lvmetad.service の停止は不要なのかの?

2018年9月3日月曜日

dlmリソース作成(gfs2用)

続いて、dlmをリソースとして作成する。
RedHat社のサイトを参照すると、以下のコマンドがサンプルとして載っている。
pcs resource create dlm \
  ocf:pacemaker:controld \
  op monitor \
       interval=30s \
       on-fail=fence \
     clone \
     interleave=true \
     ordered=true

今回は、pcsdを使ってセットアップしているので、このコマンド例を参考にpcsdの画面にどのように入力するのか?

まずは、pcsdの画面からgfs2-clusterを選択する。
そして、RESOURCESタブから「Add」を選んで、リソース情報入力ダイアログを表示させよう。
で、ダイアログを以下のように設定する。
  • Class/Provider : ocf:pacemaker
  • Type : controld
  • Resource Group : None
  • Clone : チェックOn
  • Master/Slave : チェックOff
  • Disabled : チェックOff
  • ResourceID : dlm
  • args : なし
  • configdir : なし
  • daemon : なし
  • allow_stonith_disabled : なし
これで、Create Resourceボタンを押して作ってみる。
cloneリソースとして作成しているので、自動的にdlm-cloneというグループ?が作られて、そこにdlmリソースが定義される。

作成したdlmリソースに関して、コマンドラインでも確認してみよう。
(gemini) $ sudo pcs resource show
(cancer) $ sudo pcs resource show
cloneリソースとして、dlmリソースが提議されているのが確認でき、Startedになっているのが確認できる。

詳細確認
(gemini) $ sudo pcs resource show dlm --full
(cancer) $ sudo pcs resource show dlm --full

詳細を見てみると、start / stop / monitor の3つの項目に、それぞれ interval やその他のパラメータが設定されていることがわかる。
redhat社のサイトでは、op monitor interval=30s on-fail=fence と指定しているので、おそらく monitor 項目の interval パラメータを 30s 、on-fail パラメータを fence に設定しているのだろう。

pcsd の画面からはどうやって設定するのだろうか?
今回のリソースはクローンリソース(複数のノードで同じリソースが稼働するタイプ)で、interval項目は、個別のノードごとに設定を変える必要は無さそうだ。
つまり、全体に影響させればいい。
ということは、dlmではなくdlm-cloneリソースの方のパラメータだろう。
pcsdの画面から、dlm-cloneリソースを選択し、Resource-Meta-Attributeを開いてみる。
Meta Attribute と Value という入力項目があるので、そこに interval と 30s を入れてみる。
…変化なし…。

どうも良くわからないのだが、Operationsパラメータは、pcsdの画面からは修正することが出来ないようだ。
コマンドラインから設定してみることにする。
(gemini) $ sudo pcs resource op add dlm monitor interval=30s on-fail=fence
おっとエラーになった。
monitor 定義が既に入っているので、重ねて定義出来ないよ、もし重ねて定義したいのなら、--force を付けてね、とのこと。
同じ interval パラメータ等を定義しても意味が無さそうなので、一旦削除してから定義する。
(gemini) $ sudo pcs resource op remove dlm monitor
(gemini) $ sudo pcs resource show dlm --full
monitor定義が消えたのを確認して
(gemini) $ sudo pcs resource op add dlm monitor interval=30s on-fail=fence
(gemini) $ sudo pcs resource show dlm --full

一応、cancerの方でも確認してみる。
(cancer) $ sudo pcs resource show dlm --full
反映されているようだ。

これで、redhat社のサイトに掲示されていたコマンドのうち、op monitor interval=30s on-fail=fence の部分は対応できた。
残りは interleave=true と orderded=true だ。
これは結論から言うと、pcsd の画面の dlm-clone リソースから Resource Meta Attribute を入力することで設定することになる。
というわけで、dlm-clone リソースの Resource Meta Attribute の Meta Attribute と Value にそれぞれ以下の値を入れよう。
Meta AtributeValue
interleavetrue
orderdedtrue

確認
(gemini) $ sudo pcs resource show dlm --full
(cancer) $ sudo pcs resource show dlm --full

Meta Attrs に値が表示されていればOKだ。

とりあえず今回はここまで。