nasの領域をsystemdによる自動マウントにすることができた。
どうせなら、システムバックアップ領域もsystemdを使用した自動マウントにしようと思う。
やり方は、/etc/fstab の更新、バックアップスクリプトの修正、の2点だ。
/etc/fstab の更新
$ sudo vi /etc/fstab
--/media/backup のマウント行を以下のように書き換える
//(nasのIP)/(バックアップ取得共有名) cifs noauto,guest,sfu,vers=1.0,dir_mode=0777,file_mode=0777,_netdev,nofail,x-systemd.automount,x-systemd.idle-timeout=60,x-systemd.device-timeout=60 0 0
--
設定の再読み込み
$ sudo systemctl daemon-reload
$ sudo systemctl restart remote-fs.target
$ ls /media/backup
バックアップスクリプトの修正
修正、と言っても、マウントとアンマウントを無効化するだけだ。
$ sudo -i
# vi backup/bin/0000_backup
--以下2行を無効化(先頭に # を付与)する
${BINDIR}/0010_mount
${BINDIR}/0100_umount
--
終わったらバックアップを取っておこう。
# time backup/bin/0000_backup
# exit
主にUbuntuで実験した内容を書くかもしれない。 もしかしたら、つまらない時事ネタかも。 いつか、紙媒体の書籍にしたいので、このブログの内容の転載はお控え願います。引用は可。 まずは、「目指せ!電子書籍化!」です。
2020年3月29日日曜日
2020年3月28日土曜日
/mnt/nas01/iso-osをautofsからsystemdへ
ココやココで、nasのcifs領域を /mnt/iso-os へ自動マウントする手順を書いている。
この時は autofs を使用していたが、今は systemd でほぼ同様のことができる。
(分かっている唯一の違いは、autofs はワイルドカード指定ができるが、systemd ではできない、という点)
で、systemd で出来るのなら、autofs 不要じゃん、ということで systemd 制御に移行する。
まずは autofs を停止し、自動起動を外す。
$ sudo systemctl stop autofs
$ sudo systemctl disable autofs
続いて、/etc/fstab に /mnt/nas01/iso-os のマウント情報を記載する
$ sudo vi /etc/fstab
--
//(NASのIP)/(共有名) /mnt/nas01/iso-os cifs noauto,guest,dir_mode=0777,file_mode=0777,_netdev,nofail,x-systemd.automount,x-systemd.idle-timeout=60,x-systemd.device-timeout=60 0 0
--
fstab を書き換えたので、設定を読み直す
$ sudo systemctl daemon-reload
$ sudo systemctl restart remote-fs.target
確認
$ df | grep /mnt/nas01
$ ls /mnt/nas01/iso-os
$ df | grep /mnt/nas01
autofs が不要になったので削除する
$ sudo apt-get remove autofs
$ sudo apt autoremove
$ dpkg -l | grep ^rc
$ sudo apt-get purge autofs
$ sudo rm /etc/autofs.conf
$ sudo rm -rf /etc/auto.master.d
こんな感じ。
この時は autofs を使用していたが、今は systemd でほぼ同様のことができる。
(分かっている唯一の違いは、autofs はワイルドカード指定ができるが、systemd ではできない、という点)
で、systemd で出来るのなら、autofs 不要じゃん、ということで systemd 制御に移行する。
まずは autofs を停止し、自動起動を外す。
$ sudo systemctl stop autofs
$ sudo systemctl disable autofs
続いて、/etc/fstab に /mnt/nas01/iso-os のマウント情報を記載する
$ sudo vi /etc/fstab
--
//(NASのIP)/(共有名) /mnt/nas01/iso-os cifs noauto,guest,dir_mode=0777,file_mode=0777,_netdev,nofail,x-systemd.automount,x-systemd.idle-timeout=60,x-systemd.device-timeout=60 0 0
--
fstab を書き換えたので、設定を読み直す
$ sudo systemctl daemon-reload
$ sudo systemctl restart remote-fs.target
確認
$ df | grep /mnt/nas01
$ ls /mnt/nas01/iso-os
$ df | grep /mnt/nas01
autofs が不要になったので削除する
$ sudo apt-get remove autofs
$ sudo apt autoremove
$ dpkg -l | grep ^rc
$ sudo apt-get purge autofs
$ sudo rm /etc/autofs.conf
$ sudo rm -rf /etc/auto.master.d
こんな感じ。
iSCSI領域をローカルマウントする時の注意
前回、ディスク構成を変更すると書いたけど、そこでちょっと問題が発生した。
iSCSIでLUNを作成し、LVM構成を組んでファイルシステム作成、ローカルマウントする、という流れだけど、これが上手く行かなかった。
具体的には、LVM VGの自動アクティベートが成功しない、もっと細かく書くと、7つのLUNのうち、1つ目のLUNのみ認識されている状態でアクティベートしようとしてしまい、中途半端な状態のアクティベートになってしまう、というもの。
どうやらOS起動時の流れが、OS LVMアクティベート→ネットワーク有効化→iSCSI有効化→他のLVMアクティベート、という順番のようで、iSCSI有効化後、iSCSIディスクを認識する処理と、LVMアクティベートの処理が並行してしまうようだ。
それが原因で、iSCSI領域のLVMアクティベートが失敗してしまう。
自動アクティベーションの対象は、/etc/lvm/lvm.conf に記載されている。
このファイルの auto_activation_volume_list に定義されている VG は、PV を認識したら自動でアクティベートしてしまう。
今回、iSCSIディスク7つのLUNで1つのVGを構成しているが、1つ目を認識した時点でアクティベーションしようとしてしまうようだ。
auto_activation_volume_list は初期値は未設定。
未設定というのは、全てのVGを自動アクティベーションする、ということ。
そのため、iSCSI LUNの認識が中途半端な状態でアクティベーションが走ってしまっていた。
そのため、iSCSIで作っているVGを、この自動アクティベートから外し、LUN全部認識した後にアクティベートするように手を加えたい。
まずは /etc/lvm/lvm.conf の auto_activation_volume_list を以下のように書き換える。
auto_activation_volume_list = [ "vg-root", "kvmcluster" ]
1つ目のパラメータはOS用のvg名、2つ目のパラメータはaqauariusとの共有VG名。
一瞬、2つ目のパラメータは不要だと思えるが、ここに入れておかないとclvmdを起動したときにkvmclusterがアクティベートされない。
クラスタの方で、dlm→clvmd→マウント という流れでresourceを作成した場合、auto_activation_volume_listにkvmclusterを入れていないと、マウントのタイミングでkvmclusterがアクティベートされず、マウントに失敗する。
ocf:heartbeat:LVM もしくは ocf:heartbeat:LVM-activate というリソースエージェントを間に挟めば、vg/lv単位でのアクティベート・ディアクティベートをクラスタで制御できるみたいだが、現時点ではそれが入っていない。
そのため、一旦はauto_activation_volume_listに"kvmcluster"を入れておく。
また、先日気づいたんけど /etc/lvm/lvm.conf を書き換えた場合、どうやら initramfs を再構築しないと、OS起動時の処理には反映されないようだ。
そのため、initramfs を再構築する。
$ sudo update-initramfs -u
これで再起動すれば、iSCSI LUN で作成したローカル用の VG はアクティベートされないはずだ。
続いて、iSCSI LUN 認識後に、ローカル用の VG をアクティベートする処理を入れる。
systemd で実現するが、少しずつ systemd に慣れてきて、ようやくそれなりに処理できるようになってきた。
細かい説明は省くが、以下の3つのファイルを作成する。
/etc/systemd/system/iscsi-after.service
--ココから
[Unit]
Description=wait at iscsi
After=open-iscsi.service multipathd.service
[Service]
ExecStart=/bin/sleep 10
Type=oneshot
[Install]
WantedBy=multi-user.target
--ココまで
/etc/systemd/system/vg-before.service
--ココから
[Unit]
Description=before vgchange
After=iscsi-after.service
Requires=iscsi-after.service
[Service]
ExecStart=/bin/true
Type=oneshot
RemainAfterExit=yes
--ココまで
/etc/systemd/system/vgchange@.service
--ココから
[Unit]
Description=vgchange -a [yn] %I
After=vg-before.service
Requires=vg-before.service
Before=libvirtd.service
[Service]
ExecStart=/sbin/vgchange -a y %I
Type=oneshot
[Install]
WantedBy=multi-user.target
--ココまで
2つ有効にする(もしかしたら、iscsi-after.service の有効化は不要かもしれない)
$ sudo systemctl daemon-reload
$ sudo systemctl enable iscsi-after.service
$ sudo systemctl enable vgchange@kvmsagi.service
(アンダースコアの kvmsagi の部分は、iSCSI領域で作った VG 名だ。変な名前だが、 sagittarius 専用の kvm 領域という名前を付けている)
ちなみに、sagittarius 専用の iSCSI 領域は、以下の2つの LV で構成されている。
$ sudo vi /etc/fstab
--/etc/libvirt と /var/lib/libvirt のマウントを、以下のように修正する
/dev/kvmsagi/etc-libvirt /etc/libvirt ext4 noauto,_netdev,nofail,x-systemd.automount,x-systemd.idle-timeout=60,x-systemd.device-timeout=60 0 0
/dev/kvmsagi/var-lib-libvirt /var/lib/libvirt ext4 noauto,_netdev,nofail,x-systemd.automount,x-systemd.idle-timeout=60,x-systemd.device-timeout=60 0 0
--
これで再起動すれば、sagittarius 専用の iSCSI 領域がアクティベートされ、/etc/libvirt と /var/lib/libvirt にマウントされるはずだ。
ちょっと今回は詳細まで踏み込んでおらず、中身の説明も全然足りていない。
興味があったら調べてみてほしい。
iSCSIでLUNを作成し、LVM構成を組んでファイルシステム作成、ローカルマウントする、という流れだけど、これが上手く行かなかった。
具体的には、LVM VGの自動アクティベートが成功しない、もっと細かく書くと、7つのLUNのうち、1つ目のLUNのみ認識されている状態でアクティベートしようとしてしまい、中途半端な状態のアクティベートになってしまう、というもの。
どうやらOS起動時の流れが、OS LVMアクティベート→ネットワーク有効化→iSCSI有効化→他のLVMアクティベート、という順番のようで、iSCSI有効化後、iSCSIディスクを認識する処理と、LVMアクティベートの処理が並行してしまうようだ。
それが原因で、iSCSI領域のLVMアクティベートが失敗してしまう。
自動アクティベーションの対象は、/etc/lvm/lvm.conf に記載されている。
このファイルの auto_activation_volume_list に定義されている VG は、PV を認識したら自動でアクティベートしてしまう。
今回、iSCSIディスク7つのLUNで1つのVGを構成しているが、1つ目を認識した時点でアクティベーションしようとしてしまうようだ。
auto_activation_volume_list は初期値は未設定。
未設定というのは、全てのVGを自動アクティベーションする、ということ。
そのため、iSCSI LUNの認識が中途半端な状態でアクティベーションが走ってしまっていた。
そのため、iSCSIで作っているVGを、この自動アクティベートから外し、LUN全部認識した後にアクティベートするように手を加えたい。
まずは /etc/lvm/lvm.conf の auto_activation_volume_list を以下のように書き換える。
auto_activation_volume_list = [ "vg-root", "kvmcluster" ]
1つ目のパラメータはOS用のvg名、2つ目のパラメータはaqauariusとの共有VG名。
一瞬、2つ目のパラメータは不要だと思えるが、ここに入れておかないとclvmdを起動したときにkvmclusterがアクティベートされない。
クラスタの方で、dlm→clvmd→マウント という流れでresourceを作成した場合、auto_activation_volume_listにkvmclusterを入れていないと、マウントのタイミングでkvmclusterがアクティベートされず、マウントに失敗する。
ocf:heartbeat:LVM もしくは ocf:heartbeat:LVM-activate というリソースエージェントを間に挟めば、vg/lv単位でのアクティベート・ディアクティベートをクラスタで制御できるみたいだが、現時点ではそれが入っていない。
そのため、一旦はauto_activation_volume_listに"kvmcluster"を入れておく。
また、先日気づいたんけど /etc/lvm/lvm.conf を書き換えた場合、どうやら initramfs を再構築しないと、OS起動時の処理には反映されないようだ。
そのため、initramfs を再構築する。
$ sudo update-initramfs -u
これで再起動すれば、iSCSI LUN で作成したローカル用の VG はアクティベートされないはずだ。
続いて、iSCSI LUN 認識後に、ローカル用の VG をアクティベートする処理を入れる。
systemd で実現するが、少しずつ systemd に慣れてきて、ようやくそれなりに処理できるようになってきた。
細かい説明は省くが、以下の3つのファイルを作成する。
/etc/systemd/system/iscsi-after.service
--ココから
[Unit]
Description=wait at iscsi
After=open-iscsi.service multipathd.service
[Service]
ExecStart=/bin/sleep 10
Type=oneshot
[Install]
WantedBy=multi-user.target
--ココまで
/etc/systemd/system/vg-before.service
--ココから
[Unit]
Description=before vgchange
After=iscsi-after.service
Requires=iscsi-after.service
[Service]
ExecStart=/bin/true
Type=oneshot
RemainAfterExit=yes
--ココまで
/etc/systemd/system/vgchange@.service
--ココから
[Unit]
Description=vgchange -a [yn] %I
After=vg-before.service
Requires=vg-before.service
Before=libvirtd.service
[Service]
ExecStart=/sbin/vgchange -a y %I
Type=oneshot
[Install]
WantedBy=multi-user.target
--ココまで
2つ有効にする(もしかしたら、iscsi-after.service の有効化は不要かもしれない)
$ sudo systemctl daemon-reload
$ sudo systemctl enable iscsi-after.service
$ sudo systemctl enable vgchange@kvmsagi.service
(アンダースコアの kvmsagi の部分は、iSCSI領域で作った VG 名だ。変な名前だが、 sagittarius 専用の kvm 領域という名前を付けている)
ちなみに、sagittarius 専用の iSCSI 領域は、以下の2つの LV で構成されている。
- /dev/kvmsagi/etc-libvirt
- 4MB
- ext4
- /dev/kvmsagi/var-lib-libvirt
- 数百GB
- ext4
$ sudo vi /etc/fstab
--/etc/libvirt と /var/lib/libvirt のマウントを、以下のように修正する
/dev/kvmsagi/etc-libvirt /etc/libvirt ext4 noauto,_netdev,nofail,x-systemd.automount,x-systemd.idle-timeout=60,x-systemd.device-timeout=60 0 0
/dev/kvmsagi/var-lib-libvirt /var/lib/libvirt ext4 noauto,_netdev,nofail,x-systemd.automount,x-systemd.idle-timeout=60,x-systemd.device-timeout=60 0 0
--
これで再起動すれば、sagittarius 専用の iSCSI 領域がアクティベートされ、/etc/libvirt と /var/lib/libvirt にマウントされるはずだ。
ちょっと今回は詳細まで踏み込んでおらず、中身の説明も全然足りていない。
興味があったら調べてみてほしい。
2020年3月16日月曜日
KVMクラスタとストレージ
色々あってかなり間が開いてしまった。
その間も色々調査していたんだけど、構成が根本的にマズいということが分かった。
クラスタを組んで、gfs2による共有ファイルシステムをマウントするのなら、その領域は/var/lib/libvirt以外にしておくべきだった。
/var/lib/libvirtはローカルディスクにしておいて、共有ファイルシステムは別の領域にマウントする。
ただし、sagittarius/aquarius共に内蔵ディスクは容量が少ないため、専用領域を確保する余裕がない。
そこで、iSCSIターゲットを今までのsagittarius/aquarius共用とは別に、sagittarius専用、aquarius専用の2つを作成、それぞれLUNをアサインする形にする。
細かな作業手順は今回省略するが、過去の手順を元に実施して欲しい。
その間も色々調査していたんだけど、構成が根本的にマズいということが分かった。
クラスタを組んで、gfs2による共有ファイルシステムをマウントするのなら、その領域は/var/lib/libvirt以外にしておくべきだった。
/var/lib/libvirtはローカルディスクにしておいて、共有ファイルシステムは別の領域にマウントする。
ただし、sagittarius/aquarius共に内蔵ディスクは容量が少ないため、専用領域を確保する余裕がない。
そこで、iSCSIターゲットを今までのsagittarius/aquarius共用とは別に、sagittarius専用、aquarius専用の2つを作成、それぞれLUNをアサインする形にする。
| 図.1 |
ただし、ローカルマウントの領域は、fstabによる直接マウントでも、automountdによる自動マウントでもなく、systemdによる自動マウントにする。
その手順は別途記載することにする。
2019年7月21日日曜日
リソースが起動しない
16.04 から 18.04 へのバージョンアップは実施できたけど、pacemaker のリソースが起動しない。
stonith は起動しているようなんだけど、リソースが起動しなきゃクラスタにならないじゃん。
で、corosync.log を見てみると、どうも stonith(fence_scsi) でエラー出している様子。
pcs status だと起動しているように見えるので、問題無いかと思っていたんだけど、もともと 16.04 時代の設定も誤っていたんじゃないか?で、偶然上手く動いていた、と。
というわけで、stonith(fence_scsi) の設定を見直してみる。
そもそも、pcmk_host_list って必要なのか?
nodenameは?
どうやら、fence_scsi で全ノードを管理する場合は、pcmk_host_list も nodename も未設定で良かったらしい…。
オプションパラメータをきちんとチェックしないとアカンなぁ…。
この後分かったんだが、pcmk_host_list は設定していないとアカンらしい。
ん…?もしかして pcmk って pacemaker のことか?
というわけで再設定する。
あと、corosync.log を見ていたら、 Startup probes: disabled (dangerous) という記載があった。以前、enable-startup-probes を false に設定していたが、これも誤りのようだ。
元に戻しておこう。
stonith 関連の設定が問題だったので、幾つかテストしてみる。
まずは普通にクラスタの起動停止
続いて、片方のノードのクラスタ停止起動
今度は、ノード自体の再起動だ。
その前に、以前設定した tmpfiles の設定を削除してみよう。fence_scsi の設定が誤っていたことが原因なのかもしれないので。
手で起動する。
さて…次は鬼門。vm-leo が稼働したままの sagittarius を再起動させるパターンだ。
sagittarius のコンソールを見ている限り、vm-leo が停止し切る前にその他のリソースが停止しようとしてエラーとなり、それが原因で libvirt や iscsi-initiater の停止が上手く行かず、強制停止が完了するまでリブートしない、という状態のようだ。
この辺りは、リソース停止のタイムアウト値を設定したりすれば解決しそうだ。
ただ、これまではこの症状が起きると、aquarius 側の dlm もハングしてしまい、aquarius も再起動させないと復旧しなかった。
今回は、aquarius は正常稼働している。この辺りが、fence_scsi の設定を見直した結果か。
vm-leo が停止するのに必要なタイムアウト設定は別途調べることにしよう。
vm-leo はオンラインマイグレーションさせる方法も調べて実装しておきたいし。
続いて、フェンシングとアンフェンシングのテストをやってみる。
sagittarius から aquarius をフェンシング
この時点で気になるのは、stonith(scsi-fence) が sagittarius 上で動いていない、という点。aquarius をシャットダウンさせた時は、scsi-fence は sagittarius 上で動き出したのだが…。
一旦、aquarius 上の corosync を止めてみるか…。
一旦この状態で、sagittarius を再起動させてみたい。一応、クラスタは正常終了させてからね。
fence された aquarius は、プロセスが中途半端の状態のはずなので、きっちり再起動させておこう。
いや、どうやら停止処理がハングしたようだ…。一旦強制的に(物理的に)電源Off/ONしよう。
pacemaker プロセスを systemctl で停止させたのが問題だったのかもしれない。
aquarius が起動してきたらクラスタを起動させ、もう一度同じことを実施してみる。
aquarius からクラスタの停止は…?
クラスタ起動は…?
イマイチ対応方法が良くわからない。リブートさせて復旧させるけど、--force のオプションをつけよう。
再びクラスタに組み入れておこう。
fence されたノードは、再起動させないと復旧出来ないような記載を何処かで見かけたので、--force で再起動させるしかないか。オプションつけ忘れると、再起動がハングするという最悪の自体になるので、何か他に方法はありそうだが…。
よく考えてみたら、stonith の説明は主に UPS や IPMI による強制停止・強制再起動が中心だ。ってことは、fence 発生時は相手方は強制的に電源が落ちる(or再起動する)ことが前提になっていて、今回採用しているような fence_scsi はある意味例外なのかもしれない。
であれば、再起動に手間がかかるのは、例外として受け入れるしか無いのかな?
まぁ、当初の目的であった「リソースが起動しない」という問題は解決したから、これでヨシとするか。
stonith は起動しているようなんだけど、リソースが起動しなきゃクラスタにならないじゃん。
で、corosync.log を見てみると、どうも stonith(fence_scsi) でエラー出している様子。
pcs status だと起動しているように見えるので、問題無いかと思っていたんだけど、もともと 16.04 時代の設定も誤っていたんじゃないか?で、偶然上手く動いていた、と。
というわけで、stonith(fence_scsi) の設定を見直してみる。
そもそも、pcmk_host_list って必要なのか?
$ sudo pcs stonith update scsi-fence pcmk_host_list=ダメだ。
$ sudo pcs stonith show scsi-fence
$ sudo pcs status --full
nodenameは?
$ sudo pcs stonith update scsi-fence nodename=上がってきた…。
$ sudo pcs stonith show scsi-fence
$ sudo pcs status --full
どうやら、fence_scsi で全ノードを管理する場合は、pcmk_host_list も nodename も未設定で良かったらしい…。
オプションパラメータをきちんとチェックしないとアカンなぁ…。
この後分かったんだが、pcmk_host_list は設定していないとアカンらしい。
ん…?もしかして pcmk って pacemaker のことか?
というわけで再設定する。
$ sudo pcs stonith show scsi-fence
$ sudo pcs stonith update scsi-fence pcmk_host_list="sagittarius aquarius"
$ sudo pcs stonith show scsi-fence
あと、corosync.log を見ていたら、 Startup probes: disabled (dangerous) という記載があった。以前、enable-startup-probes を false に設定していたが、これも誤りのようだ。
元に戻しておこう。
$ sudo pcs property set enable-startup-probes=
$ sudo pcs property show --all | grep enable-startup-probes
stonith 関連の設定が問題だったので、幾つかテストしてみる。
まずは普通にクラスタの起動停止
$ sudo pcs cluster stop --all問題なしだ。
$ sudo pcs cluster start --all
$ sudo pcs status --full
続いて、片方のノードのクラスタ停止起動
(sagittarius) $ sudo pcs cluster stop aquarius問題なし。
(sagittarius) $ sudo pcs status --full
(sagittarius) $ sudo pcs cluster start aquarius
(sagittarius) $ sudo pcs status --full
(aquarius) $ sudo pcs cluster stop sagittarius問題無いようだ。
(aquarius) $ sudo pcs status --full
(aquarius) $ sudo pcs cluster start sagittarius
(aquarius) $ sudo pcs status --full
今度は、ノード自体の再起動だ。
その前に、以前設定した tmpfiles の設定を削除してみよう。fence_scsi の設定が誤っていたことが原因なのかもしれないので。
$ cat /etc/tmpfiles.d/var-run.confおっといけない。まだクラスタの自動起動を設定していないんだった。
$ sudo rm /etc/tmpfiles.d/var-run.conf
(aquarius) $ sudo systemctl reboot
(sagittarius) $ sudo pcs status --full
手で起動する。
(aquarius) $ sudo pcs cluster start aquarius問題なさげだ。(tmpfiles の /var/run/cluster も自動生成されてる)
(sagittarius) $ sudo pcs status --full
さて…次は鬼門。vm-leo が稼働したままの sagittarius を再起動させるパターンだ。
(sagittarius) $ sudo systemctl rebootやっぱり、sagittarius の停止に詰まる症状が出る。
(aquarius) $ sudo pcs status --full
sagittarius のコンソールを見ている限り、vm-leo が停止し切る前にその他のリソースが停止しようとしてエラーとなり、それが原因で libvirt や iscsi-initiater の停止が上手く行かず、強制停止が完了するまでリブートしない、という状態のようだ。
この辺りは、リソース停止のタイムアウト値を設定したりすれば解決しそうだ。
ただ、これまではこの症状が起きると、aquarius 側の dlm もハングしてしまい、aquarius も再起動させないと復旧しなかった。
今回は、aquarius は正常稼働している。この辺りが、fence_scsi の設定を見直した結果か。
(sagittarius) $ sudo pcs cluster start sagittariusう~ん。なんとか起動してきたな。
vm-leo が停止するのに必要なタイムアウト設定は別途調べることにしよう。
vm-leo はオンラインマイグレーションさせる方法も調べて実装しておきたいし。
続いて、フェンシングとアンフェンシングのテストをやってみる。
sagittarius から aquarius をフェンシング
(sagittarius) $ sudo pcs status --fullクラスタから aquarius が切り離され、aquarius 上の pacemaker プロセスがダウンした。ん? corosync は起動しているぞ…?
(sagittarius) $ sudo pcs stonith fence aquarius
(sagittarius) $ sudo pcs status --full
この時点で気になるのは、stonith(scsi-fence) が sagittarius 上で動いていない、という点。aquarius をシャットダウンさせた時は、scsi-fence は sagittarius 上で動き出したのだが…。
一旦、aquarius 上の corosync を止めてみるか…。
(aquarius) $ sudo systemctl stop corosyncあー、aquarius 上の corosync を停止させたら、scsi-fence が sagittarius 上で動き出した。そーゆーことか。
(sagittarius) $ sudo pcs status
一旦この状態で、sagittarius を再起動させてみたい。一応、クラスタは正常終了させてからね。
(sagittarius) $ sudo pcs cluster stop sagittarius --forceリブートしてきたら、クラスタが( sgaittarius 単独で)起動するか確認だ。
(sagittarius) $ sudo systemctl reboot
(sagittarius) $ sudo pcs cluster start sagittariussagittarius 上で起動してきたな。
(sagittarius) $ sudo pcs status
fence された aquarius は、プロセスが中途半端の状態のはずなので、きっちり再起動させておこう。
(aquarius) $ sudo systemctl rebootむぅ。停止処理に時間がかかってるな…。fence されたことで、プロセス状態が半端な状態になっているのが原因か。
いや、どうやら停止処理がハングしたようだ…。一旦強制的に(物理的に)電源Off/ONしよう。
pacemaker プロセスを systemctl で停止させたのが問題だったのかもしれない。
aquarius が起動してきたらクラスタを起動させ、もう一度同じことを実施してみる。
(aquarius) $ sudo pcs cluster start aquarius
$ sudo pcs status
(sagittarius) $ sudo pcs status --full
(sagittarius) $ sudo pcs stonith fence aquarius
(sagittarius) $ sudo pcs status --full
aquarius からクラスタの停止は…?
(aquarius) $ sudo pcs cluster stop aquariusう~ん…。それっぽい動きはしたが、dlm プロセスが中途半端だ…。
クラスタ起動は…?
(aquarius) $ sudo pcs cluster start aquariusダメだな…。
イマイチ対応方法が良くわからない。リブートさせて復旧させるけど、--force のオプションをつけよう。
(aquarius) $ sudo systemctl reboot --forceかなり時間はかかるが起動してくるはずだ。
再びクラスタに組み入れておこう。
(aquarius) $ sudo pcs cluster start aquarius
fence されたノードは、再起動させないと復旧出来ないような記載を何処かで見かけたので、--force で再起動させるしかないか。オプションつけ忘れると、再起動がハングするという最悪の自体になるので、何か他に方法はありそうだが…。
よく考えてみたら、stonith の説明は主に UPS や IPMI による強制停止・強制再起動が中心だ。ってことは、fence 発生時は相手方は強制的に電源が落ちる(or再起動する)ことが前提になっていて、今回採用しているような fence_scsi はある意味例外なのかもしれない。
であれば、再起動に手間がかかるのは、例外として受け入れるしか無いのかな?
まぁ、当初の目的であった「リソースが起動しない」という問題は解決したから、これでヨシとするか。
2019年7月10日水曜日
16.04から18.04へバージョンアップ(sagittarius)
aquarius のバージョンアップも何とか終わり、続いて sagittarius のバージョンアップを行う。
流れは基本的に aquarius で実施した手順と同じだ。
バックアップまでは前回実施済みなので、クラスタ停止とクラスタの自動起動停止からだ。
そしたらバージョンアップ実施。これはコンソールから実施しよう。
同じように対応しよう。
あれ?何故か Postfix Configuration の画面が出てきた。
選択肢としては
Postfix なんて設定したかな…?まぁ、No configuration にしておくか。必要なら別途セットアップすりゃいい。
バージョンアップと再起動が終わったら、設定の確認と反映だ。
/etc/lvm/lvm.conf は、直接編集するのではなく、コマンドで編集しよう。
/etc/ssh/sshd_config は直接編集する。
/etc/default/libvirt-guests も直接編集だ。
systemd の unit 定義も。
再読込。
fstab も直しておこう。
No longer supported になっているパッケージを削除して再起動だ。
う~む。postfix が起動に失敗するなぁ。そもそも、aquarius には導入していない。どこで導入されたんだろうか…?
使ってないから削除しておこう。必要ならまた入れればいいからね。
再起動して、systemd が正しく動いているようなら、バックアップ取っておしまい。
次回以降、クラスタ再設定を行う。
あぁそうそう、18.04 の標準のネットワークは netplan になっている。
今回は 16.04 からそのまま引き継いで ifupdown にしていて、netplan には切り替えていない。
OpenvSwitch が netplan には対応していないようなので、そのまま ifupdown にしている。
もし、18.04 を素でインストールしたのなら、 netplan を削除して ifupdown を導入しないと駄目なので要注意。
流れは基本的に aquarius で実施した手順と同じだ。
バックアップまでは前回実施済みなので、クラスタ停止とクラスタの自動起動停止からだ。
$ sudo pcs cluster stop sagittarius --force
$ sudo pcs cluster disable sagittarius
そしたらバージョンアップ実施。これはコンソールから実施しよう。
$ sudo LANG=C do-relase-upgrade出てくるメッセージや、設定ファイルの更新の情報は、aquarius の時と同じはずだ。
同じように対応しよう。
あれ?何故か Postfix Configuration の画面が出てきた。
選択肢としては
No configurationとなっていて、デフォルトでは Internet Site にフォーカスが当たってる。
Internet Site
Internet with smarthost
Satellite system
Local only
Postfix なんて設定したかな…?まぁ、No configuration にしておくか。必要なら別途セットアップすりゃいい。
バージョンアップと再起動が終わったら、設定の確認と反映だ。
$ sudo systemctl status
$ sudo systemctl --state=failed
/etc/lvm/lvm.conf は、直接編集するのではなく、コマンドで編集しよう。
$ grep -e locking_type -e use_lvmetad /etc/lvm/lvm.conf
$ sudo lvmconf --enable-cluster
$ grep -e locking_type -e use_lvmetad /etc/lvm/lvm.conf
/etc/ssh/sshd_config は直接編集する。
$ sudo vi /etc/ssh/sshd_config
-----
PasswordAuthentication が含まれている行(コメントになっているはずだ)を探し、その下に以下の行を追加する。
PasswordAuthentication no
最後に以下の行を追加する。
Match Address 192.168.55.0/24
PasswordAuthentication yes
Match Address 127.0.0.0/8
PasswordAuthentication yes
-----
/etc/default/libvirt-guests も直接編集だ。
$ sudo vi /etc/default/libvirt-guests
-----
ON_SHUTDOWN の行を探して、以下のように書き換える。(追加する)
ON_SHUTDOWN=shutdown
-----
systemd の unit 定義も。
$ sudo EDITOR=vi systemctl edit ovsdb-server.service
-----
以下のように作成
[Unit]
Before=networking.service
-----
$ sudo EDITOR=vi systemctl edit ovs-vswitchd.service
-----
以下のように作成
[Unit]
Before=networking.service
-----
再読込。
$ sudo systemctl daemon-reload
$ sudo systemctl list-dependencies --before ovsdb-server.service
$ sudo systemctl list-dependencies --before ovs-vswitchd.service
fstab も直しておこう。
$ sudo vi /etc/fstab
-----他にも、/etc/fstab エントリや、 /etc/auto.master.d/ とかで cifs マウント設定が入っているところがある。vers=1.0 を追加しておこう。
バックアップボリュームをマウントする行のオプションに
vers=1.0
を追加する
-----
No longer supported になっているパッケージを削除して再起動だ。
$ sudo apt-get remove gcc-5-base gcc-6-base tcpd
う~む。postfix が起動に失敗するなぁ。そもそも、aquarius には導入していない。どこで導入されたんだろうか…?
使ってないから削除しておこう。必要ならまた入れればいいからね。
$ sudo apt-get --simulate remove postfix
$ sudo apt-get remove postfix
$ sudo apt autoremove
再起動して、systemd が正しく動いているようなら、バックアップ取っておしまい。
次回以降、クラスタ再設定を行う。
あぁそうそう、18.04 の標準のネットワークは netplan になっている。
今回は 16.04 からそのまま引き継いで ifupdown にしていて、netplan には切り替えていない。
OpenvSwitch が netplan には対応していないようなので、そのまま ifupdown にしている。
もし、18.04 を素でインストールしたのなら、 netplan を削除して ifupdown を導入しないと駄目なので要注意。
2019年7月7日日曜日
16.04から18.04へバージョンアップ(aquarius)
さて、色々検証が中途半端になってしまったが、いい加減18.04にバージョンアップしよう。
過去に一度、sagittarius をバージョンアップしたが、別の問題が出てリストアしている。
今回はそのリベンジだ。
まずは慎重に、両サーバのパッチ適用(16.04の最新版)を行う。
aquarius から実行する。
続いて sagittarius から実行。
両方のノードをバックアップしておこう。
バックアップスクリプトは今まで使用していたもので OK だ。
バックアップが終わったら、いよいよバージョンアップだ。
バージョンアップはコンソールから実行しよう。
aquarius から。
設定ファイル類の反映で、幾つかが「カスタマイズされているけど、ディストリビューター版を入れるか?今使っているものをそのまま使うか?」という選択肢が出てくる。
/etc/default/libvirt-guests
過去に有効にした ON_SHUTDOWN=shutdown が無効になる。
こちらは、ディストリビューター版を採用して、後で書き換えよう。
/etc/ssh/sshd_config
差分が多いが、外からログインする時の設定以外はディストリビューター版で良さそうだ。
後から、
/etc/apt/apt.conf.d/50unattended-upgrades
こちらは、カーネル類を自動アップデートしないように明示的に指定している。
これ、多分ディストリビューター版をそのまま採用して問題無いだろう。
ちなみに、Unattended-Upgrade::Package-Blacklist { } に
/etc/lvm/lvm.conf
こちらは、クラスタlvmを使用するために
無事にアップグレードが済み、リブートされたら、検証と設定の戻しを行おう。
設定ファイルを修正するのは以下の3ファイル
/etc/default/libvirt-guests
/etc/ssh/sshd_config
/etc/lvm/lvm.conf
/etc/lvm/lvm.conf は、直接編集するのではなく、コマンドで編集しよう。
/etc/ssh/sshd_config は直接編集する。
/etc/default/libvirt-guests も直接編集だ。
ここまで編集したら、再起動しよう。
見てみると、networking.service 起動時に、/var/run/openvswitch/db.sock が無い、というエラーになっている。
どうやら、ifupdown で使用する interface 定義、OpenvSwitch 関連のところが誤っていたようだ。(誤っていたのか、仕様が変わったのかは良くわからないが…)
ちょっと原因が違ったので、ここから先は全面書き換え。
ココを見ると、systemd の unit 定義が間違っているようだ。
なので、それの対応を行う。
再読込。
全面書き換えココまで
これで再起動したら、問題なく上がってくるはずだ。
ここで、クラスタへの組み直しをやってみたいところだが、corosync のバージョンが異なる機器間でクラスタを組もうとすると、内部DB(cib) のフォーマットが違うためか、マトモに動かない。
それどころか、syslog や corosync.log に大量にログが吐き出され、 /var/log がパンクしてしまうという事象が発生する。
そのため、クラスタ組み直しは、sagittarius のバージョンアップが終わってからにしよう。
最後に、No longer supported になっている3つのパッケージを削除しておこう。
とりあえずこれで、18.04へのバージョンアップは完了かな?
おっと、せっかく18.04へのバージョンアップが出来たので、バックアップを取っておくのを忘れないように。
だけど、18.04 にしてから CIFS へのアクセスが異常に遅くなった。
バックアップするのもシャレにならないほどの遅さだ。どうやら、cifsのデフォルトが変わったことによるものらしい。
aquarius はバックアップボリュームのマウントを、fstab で指定しているので、それを修正しよう。
ちょっと長くなってしまったので、sagittarius のバージョンアップは次回。
過去に一度、sagittarius をバージョンアップしたが、別の問題が出てリストアしている。
今回はそのリベンジだ。
まずは慎重に、両サーバのパッチ適用(16.04の最新版)を行う。
aquarius から実行する。
$ sudo pcs cluster stop aquarius
$ sudo pcs cluster disable aquarius
$ sudo apt-get update
$ sudo apt-get dist-upgrade
$ sudo apt autoremove
$ sudo systemctl reboot
$ sudo pcs cluster enable aquarius
$ sudo pcs cluster start aquarius
$ sudo fence_scsi -o on -n aquarius -d /dev/mapper/fence-device
続いて sagittarius から実行。
$ sudo pcs cluster stop sagittarius
$ sudo pcs cluster disable sagittarius
$ sudo apt-get update
$ sudo apt-get dist-upgrade
$ sudo apt autoremove
$ sudo systemctl reboot
$ sudo pcs cluster enable sagittarius
$ sudo pcs cluster start sagittarius
$ sudo fence_scsi -o on -n sagittarius -d /dev/mapper/fence-device
両方のノードをバックアップしておこう。
バックアップスクリプトは今まで使用していたもので OK だ。
バックアップが終わったら、いよいよバージョンアップだ。
バージョンアップはコンソールから実行しよう。
aquarius から。
$ sudo pcs cluster stop aquarius途中、No longer supported として gcc-5-base gcc-6-base tcpd の3つがリストアップされた。まぁ不要なので、あとで削除しておけばいいか。
$ sudo pcs cluster disable aquarius
$ LANG=C sudo do-release-upgrade
設定ファイル類の反映で、幾つかが「カスタマイズされているけど、ディストリビューター版を入れるか?今使っているものをそのまま使うか?」という選択肢が出てくる。
/etc/default/libvirt-guests
過去に有効にした ON_SHUTDOWN=shutdown が無効になる。
こちらは、ディストリビューター版を採用して、後で書き換えよう。
/etc/ssh/sshd_config
差分が多いが、外からログインする時の設定以外はディストリビューター版で良さそうだ。
後から、
PasswordAuthentication noを書き加えることにする。
Match Address 192.68.55.0/24
PasswordAuthentication yes
Match Address 127.0.0.0/8
PasswordAuthentication yes
/etc/apt/apt.conf.d/50unattended-upgrades
こちらは、カーネル類を自動アップデートしないように明示的に指定している。
これ、多分ディストリビューター版をそのまま採用して問題無いだろう。
ちなみに、Unattended-Upgrade::Package-Blacklist { } に
"linux-headers-generic";を足し込んでいる。
"linux-signed-generic";
"linux-signed-image-generic";
/etc/lvm/lvm.conf
こちらは、クラスタlvmを使用するために
locking_type = 3を指定しているが、ディストリビューター版を導入し、後から修正することにする。
use_lvmetad = 0
無事にアップグレードが済み、リブートされたら、検証と設定の戻しを行おう。
$ sudo systemctl statuslvm2-pvscan が一部失敗しているが、多分これは /etc/lvm/lvm.conf を修正すれば正しくなるはず。
$ sudo systemctl --state=failed
設定ファイルを修正するのは以下の3ファイル
/etc/default/libvirt-guests
/etc/ssh/sshd_config
/etc/lvm/lvm.conf
/etc/lvm/lvm.conf は、直接編集するのではなく、コマンドで編集しよう。
$ grep -e locking_type -e use_lvmetad /etc/lvm/lvm.conf
$ sudo lvmconf --enable-cluster
$ grep -e locking_type -e use_lvmetad /etc/lvm/lvm.conf
/etc/ssh/sshd_config は直接編集する。
$ sudo vi /etc/ssh/sshd_config
-----
PasswordAuthentication が含まれている行(コメントになっているはずだ)を探し、その下に以下の行を追加する。
PasswordAuthentication no
最後に以下の行を追加する。
Match Address 192.168.55.0/24
PasswordAuthentication yes
Match Address 127.0.0.0/8
PasswordAuthentication yes
-----
/etc/default/libvirt-guests も直接編集だ。
$ sudo vi /etc/default/libvirt-guests
-----
ON_SHUTDOWN の行を探して、以下のように書き換える。(追加する)
ON_SHUTDOWN=shutdown
-----
ここまで編集したら、再起動しよう。
$ sudo systemctl rebootあれ?リブートしたら、ネットワークの起動が上手く行かなかった。
$ sudo ifdown extsw通信はできるな…。もう一度再起動してみる。
$ sudo ifup extsw
$ sudo systemctl rebootやっぱり駄目だ。
見てみると、networking.service 起動時に、/var/run/openvswitch/db.sock が無い、というエラーになっている。
どうやら、ifupdown で使用する interface 定義、OpenvSwitch 関連のところが誤っていたようだ。(誤っていたのか、仕様が変わったのかは良くわからないが…)
ちょっと原因が違ったので、ここから先は全面書き換え。
ココを見ると、systemd の unit 定義が間違っているようだ。
なので、それの対応を行う。
$ sudo EDITOR=vi systemctl edit ovsdb-server.service
-----
以下のように作成
[Unit]
Before=networking.service
-----
$ sudo EDITOR=vi systemctl edit ovs-vswitchd.service
-----
以下のように作成
[Unit]
Before=networking.service
-----
再読込。
$ sudo systemctl daemon-reload
$ sudo systemctl list-dependencies --before ovsdb-server.service
$ sudo systemctl list-dependencies --before ovs-vswitchd.service
全面書き換えココまで
これで再起動したら、問題なく上がってくるはずだ。
ここで、クラスタへの組み直しをやってみたいところだが、corosync のバージョンが異なる機器間でクラスタを組もうとすると、内部DB(cib) のフォーマットが違うためか、マトモに動かない。
それどころか、syslog や corosync.log に大量にログが吐き出され、 /var/log がパンクしてしまうという事象が発生する。
そのため、クラスタ組み直しは、sagittarius のバージョンアップが終わってからにしよう。
最後に、No longer supported になっている3つのパッケージを削除しておこう。
$ sudo apt-get remove gcc-5-base gcc-6-base tcpd
とりあえずこれで、18.04へのバージョンアップは完了かな?
おっと、せっかく18.04へのバージョンアップが出来たので、バックアップを取っておくのを忘れないように。
だけど、18.04 にしてから CIFS へのアクセスが異常に遅くなった。
バックアップするのもシャレにならないほどの遅さだ。どうやら、cifsのデフォルトが変わったことによるものらしい。
aquarius はバックアップボリュームのマウントを、fstab で指定しているので、それを修正しよう。
$ sudo vi /etc/fstab
-----これで大丈夫なはず。
バックアップボリュームをマウントする行のオプションに
vers=1.0
を追加する
-----
ちょっと長くなってしまったので、sagittarius のバージョンアップは次回。
登録:
投稿 (Atom)