Slide 1

Slide 1 text

BLUECORE.NET 趣味で自宅にITインフラ触ってる者だ -LVMと連携したディスク排他制御- 2021年2月6日 BLUECORE.NET管理人 ろーかるゆーざー

Slide 2

Slide 2 text

BLUECORE.NET 趣味で自宅にITインフラ触ってる者だ BLUECORE.NET 趣味で自宅にITインフラ触ってる者だ ここで確認したかった内容 • クラスタにおいて、ディスク切り替え制御はどのように行われているんだろ う? • LVM-Activation-Agentの動作を確認する • クラスタにおけるLVMディスク排他制御とDBサービス間の連携 • 現在提供されているOCF系エージェントの構成前提 • 現在私の環境で実装している内容について

Slide 3

Slide 3 text

BLUECORE.NET 趣味で自宅にITインフラ触ってる者だ 説明上想定している構成について

Slide 4

Slide 4 text

BLUECORE.NET 趣味で自宅にITインフラ触ってる者だ BLUECORE.NET 趣味で自宅にITインフラ触ってる者だ MariaDBクラスタ構成例(今私の環境にあるもの) Server Segment Storage Segment

Slide 5

Slide 5 text

BLUECORE.NET 趣味で自宅にITインフラ触ってる者だ BLUECORE.NET 趣味で自宅にITインフラ触ってる者だ MariaDBクラスタにおける構成

Slide 6

Slide 6 text

BLUECORE.NET 趣味で自宅にITインフラ触ってる者だ LVMによるディスク排他制御

Slide 7

Slide 7 text

BLUECORE.NET 趣味で自宅にITインフラ触ってる者だ BLUECORE.NET 趣味で自宅にITインフラ触ってる者だ LVM(Logical Volume Manager)の構造

Slide 8

Slide 8 text

BLUECORE.NET 趣味で自宅にITインフラ触ってる者だ BLUECORE.NET 趣味で自宅にITインフラ触ってる者だ クラスタ上でのLVMに対して行われてる制御を確認

Slide 9

Slide 9 text

BLUECORE.NET 趣味で自宅にITインフラ触ってる者だ BLUECORE.NET 趣味で自宅にITインフラ触ってる者だ ブロックデバイスとしての認識状況を確認

Slide 10

Slide 10 text

BLUECORE.NET 趣味で自宅にITインフラ触ってる者だ BLUECORE.NET 趣味で自宅にITインフラ触ってる者だ SCSIデバイスの接続状況を確認

Slide 11

Slide 11 text

BLUECORE.NET 趣味で自宅にITインフラ触ってる者だ BLUECORE.NET 趣味で自宅にITインフラ触ってる者だ 何を持って排他制御とするか?

Slide 12

Slide 12 text

BLUECORE.NET 趣味で自宅にITインフラ触ってる者だ BLUECORE.NET 趣味で自宅にITインフラ触ってる者だ 関係するリソースエージェント(System-IDの場合) • • • • • • • • • •

Slide 13

Slide 13 text

BLUECORE.NET 趣味で自宅にITインフラ触ってる者だ BLUECORE.NET 趣味で自宅にITインフラ触ってる者だ リソースエージェントを眺めてみる(Activate処理)

Slide 14

Slide 14 text

BLUECORE.NET 趣味で自宅にITインフラ触ってる者だ BLUECORE.NET 趣味で自宅にITインフラ触ってる者だ リソースエージェントを眺めてみる(De-Activate処理)

Slide 15

Slide 15 text

BLUECORE.NET 趣味で自宅にITインフラ触ってる者だ BLUECORE.NET 趣味で自宅にITインフラ触ってる者だ リソースエージェントを眺めてみる(De-Activate処理)

Slide 16

Slide 16 text

BLUECORE.NET 趣味で自宅にITインフラ触ってる者だ BLUECORE.NET 趣味で自宅にITインフラ触ってる者だ リソースエージェントがやっていること VG VG VG

Slide 17

Slide 17 text

BLUECORE.NET 趣味で自宅にITインフラ触ってる者だ BLUECORE.NET 趣味で自宅にITインフラ触ってる者だ 要注意事項 • uname -nの出力結果とクラスタで認識するノード名は合わせよう • 私の環境では・・ • クラスタで認識するノード名:nd001.bluecore.net と言う形式 • uname nの結果 : ND001と言う形式 ->名称不一致のため、想定通りに動作しなかった。 ->nmtuiコマンドを実行し、ホスト名をFQDN形式(小文字)にして解決した。 • VG単位で制御されることを理解しよう • VolumeGroup単位でノード間は移動する。 • 細かくLogicalVolumeを組んでる場合、まとめてまるごと移動することになる。 • ボリューム設計の際は1VG/1LV構成にしておくと構成要素が単純化して運用しやすいのかも。 • 所詮はソフトウェア排他制御 • 何も制御しない場合よりは排他制御が確実に行えそう • SystemIdが異なる場合、それは恐らくActivationが拒否られるものと考えられる • ただし、同時にvgchangeアクセスが発生したときにそれが処理しきれるかどうかは別の話 • まだStonithで最終的な制御はさせた方がクラスタの信頼性は高いのではないかと思う ->つまり、Stonithが不要だとは言い切れない構成であるという点は認識を持った方がよい。

Slide 18

Slide 18 text

BLUECORE.NET 趣味で自宅にITインフラ触ってる者だ サービスの制御:RDBMS側

Slide 19

Slide 19 text

BLUECORE.NET 趣味で自宅にITインフラ触ってる者だ BLUECORE.NET 趣味で自宅にITインフラ触ってる者だ SystemdにおけるMariadbの設定

Slide 20

Slide 20 text

BLUECORE.NET 趣味で自宅にITインフラ触ってる者だ BLUECORE.NET 趣味で自宅にITインフラ触ってる者だ サービス制御時の留意点 • RDBMSのリソースエージェントはそれが何を前提にしているのか、確認が 必要 • Promote/DemoteをさせるエージェントはMaster/Slave構成を前提としてる。 • Master/Slave構成を取る->大抵は「レプリケーション」を前提としている • ぶっちゃけSystemdベースのサービス監視のみでも対応出来るように思 う。 • ただし、DB上の論理障害には弱い場合がある(SQL監視はしないため) • 単純にプロセス監視を行ってsystemdによってstart/stop/restartしてるだけ なので、この関連処理をみずから組んでSystemdと連携させるようにすると尚良 いのかもしれない。 • ocf::heartbeat:mysqlなどは、定期的にSQLコマンドとして表の行数をカウントす る処理を発行して動作の妥当性を監視している。