DRBD9 と LINSTOR のユーザーズガイド


目次

はじめにお読みください
I. DRBDの紹介
1. DRBDの基礎
1.1. カーネルモジュール
1.2. ユーザー空間の管理ツール
1.3. リソース
1.4. リソースのロール(役割)
2. DRBDの機能
2.1. シングルプライマリモード
2.2. デュアルプライマリモード
2.3. レプリケーションのモード
2.4. 2重以上の冗長性
2.5. リソースの自動プロモーション
2.6. 複数の転送プロトコル
2.6.1. TCPトランスポート
2.6.2. RDMAトランスポート
2.6.3. 転送プロトコルの決定
2.7. 効率的なデータ同期
2.7.1. 可変レート同期
2.7.2. 固定レート同期
2.7.3. チェックサムベース同期
2.8. レプリケーションの中断
2.9. オンライン照合
2.10. レプリケーション用トラフィックの整合性チェック
2.11. スプリットブレインの通知と自動修復
2.12. ディスクフラッシュのサポート
2.13. Trim/Discardのサポート
2.14. ディスクエラー処理ストラテジー
2.15. 無効データの処理ストラテジー
2.16. 3ノードレプリケーション
2.17. DRBD Proxyによる遠距離レプリケーション
2.18. トラック輸送によるレプリケーション
2.19. 動的対向ノード
2.20. データ再配置(ストレージの水平スケール)
2.21. DRBDクライアント
2.22. クォーラム
2.22.1. タイブレーカー
2.23. DRBDとVCSの統合
II. DRBDのコンパイル、インストールおよび設定
3. コンパイル済みDRBDバイナリパッケージのインストール
3.1. LINBIT社が提供するパッケージ
3.2. LINBIT社が提供する Docker イメージ
3.3. ディストリビューションベンダが提供するパッケージ
3.3.1. SUSE Linux Enterprise Server
3.3.2. CentOS
3.3.3. Ubuntu Linux
3.4. ソースからパッケージをコンパイルする
III. LINSTOR
4. 共通の管理
4.1. 概念と用語
4.2. よりハイレベルな適用
4.3. パッケージ
4.4. コンテナ
4.5. クラスタの初期化
4.6. LINSTORクライアントの使用
4.7. ノードをクラスタに追加する
4.8. ストレージプール
4.8.1. 下位デバイスごとのストレージプール
4.9. クラスタ構成
4.9.1. 利用可能なストレージプラグイン
4.10. リソース、ボリュームの作成と配備
4.10.1. 手動配備
4.10.2. 自動配備
4.10.3. DRBDクライアント
4.10.4. 1つのリソースから異なるストレージプールへのボリューム
4.11. ネットワークインターフェイスカードの管理
4.12. 暗号化ボリューム
4.12.1. ユーザセキュリティを無効にする
4.12.2. 暗号化のコマンド
4.13. クラスタの状態をチェック
4.14. スナップショットの管理
4.14.1. スナップショットの作成
4.14.2. スナップショットの復元
4.14.3. スナップショットへのロールバック
4.14.4. スナップショットの削除
4.15. リソースのオプション設定
4.16. ディスクの追加と削除
4.16.1. ディスクの移行
4.17. LINSTORによるDRBD Proxy
4.18. 外部データベース
4.18.1. Postgresql
4.18.2. MariaDB/Mysql
4.19. ヘルプの利用
5. Kubernetes で LINSTOR ボリューム
5.1. Kubernetesの概要
5.2. LINSTOR CSIプラグインの配備
5.3. 基本的な構成と配備
5.4. スナップショット
5.5. ボリュームへのアクセス
5.6. 高度な設定
5.6.1. nodeList
5.6.2. autoPlace
5.6.3. replicasOnSame
5.6.4. replicasOnDifferent
5.6.5. localStoragePolicy
5.6.6. storagePool
5.6.7. disklessStoragePool
5.6.8. encryption
5.6.9. filesystem
5.6.10. fsOpts
5.6.11. mountOpts
6. Proxmox VE での LINSTOR ボリューム
6.1. Proxmox VE概要
6.2. Proxmoxプラグインのインストール
6.3. LINSTORの設定
6.4. Proxmoxプライグインの設定
6.5. コントローラの高可用性
7. OpenNebulaのLINSTORボリューム
7.1. OpenNebulaの概要
7.2. OpenNebulaアドオンのインストール
7.3. 配備オプション
7.4. ライブマイグレーション
7.5. 空き容量の計算
8. OpenStackでのLINSTORボリューム
8.1. Openstackの概要
8.2. OpenstackのLINSTORインストレーション
8.2.1. UbuntuでLINSTORクラスタをすばやく設定する方法について
8.2.2. LINSTORドライバファイルをインストール
8.3. LINSTORのCinder構成
8.3.1. /etc/cinder/ 内のCinder設定ファイル cinder.conf を次のように編集
8.3.2. ドライバ用のPythonのPythonライブラリを更新
8.3.3. LINSTOR用の新しいバックエンドタイプを作成
8.3.4. 最後にCinderサービスを再起動
8.3.5. 適切なインストールを確認
8.3.6. 追加設定
8.4. トランスポートプロトコルの選択
8.4.1. iSCSIトランスポート
8.4.2. DRBD/LINSTORトランスポート
8.4.3. トランスポートプロトコルの設定
9. DockerのLINSTORボリューム
9.1. Dockerの概要
9.2. Dockerインストール用のLINSTORプラグイン
9.3. Docker設定用のLINSTORプラグイン
9.4. 使用例
9.4.1. 例1 - 典型的なdockerパターン
9.4.2. 例2 - ホスト指定で1つのディスクフル割り当て、2つのディスクレスノード
9.4.3. 例3 - どこかに1つのディスクフル割り当て、2つのディスクレスノード
9.4.4. 例4 - ホスト指定で2つのディスクフル割り当て、charlie はディスクレス
9.4.5. 例5 - どこかに2つのディスクフル割り当て、1つのディスクレスノード
9.4.6. 例6 - dockerでなくcurlを使う、開発者向け
IV. DRBDの使い方
10. 一般的な管理作業
10.1. DRBDの設定
10.1.1. 下位レベルストレージの準備
10.1.2. ネットワーク構成の準備
10.1.3. リソースの設定
10.1.4. ネットワークコネクションの定義
10.1.5. トランスポートプロトコルの設定
10.1.6. リソースを初めて有効にする
10.1.7. デバイスの初期同期
10.1.8. トラックベースのレプリケーションの使用
10.1.9. 4ノードでの構成例
10.2. DRBDのステータスを確認する
10.2.1. drbdmon でステータスを取得する
10.2.2. drbdtop でDRBDのステータス取得し対話する
10.2.3. /proc/drbd でのステータス情報
10.2.4. drbdadm でのステータス情報
10.2.5. drbdsetup events2 を使用した一回のみ、またはリアルタイムでの監視
10.2.6. コネクションステータス
10.2.7. 複製ステータス
10.2.8. リソースのロール
10.2.9. ディスク状態
10.2.10. 接続情報データ
10.2.11. パフォーマンス指標
10.3. リソースの有効化と無効化
10.3.1. リソースの有効化
10.3.2. リソースを無効にする
10.4. リソースの再設定
10.5. リソースの昇格と降格
10.6. 基本的な手動フェイルオーバ
10.7. DRBDのアップグレード
10.7.1. 概要
10.7.2. リポジトリのアップデート
10.7.3. DRBDの状態を確認する
10.7.4. クラスタを停止する
10.7.5. パッケージのアップグレード
10.7.6. 新しいカーネルモジュールのロード
10.7.7. 設定ファイルの移行
10.7.8. メタデータの変更
10.7.9. DRBDを再び起動する
10.7.10. DRBD9からDRBD9
10.8. デュアルプライマリモードを有効にする
10.8.1. 永続的なデュアルプライマリモード
10.8.2. 一時的なデュアルプライマリモード
10.9. オンラインデバイス照合の使用
10.9.1. オンライン照合を有効にする
10.9.2. オンライン照合の実行
10.9.3. 自動オンライン照合
10.10. 同期速度の設定
10.10.1. 同期速度の計算
10.10.2. 可変同期速度設定
10.10.3. 永続的な固定同期速度の設定
10.10.4. 同期に関するヒント
10.11. チェックサムベース同期の設定
10.12. 輻輳ポリシーと中断したレプリケーションの構成
10.13. I/Oエラー処理方針の設定
10.14. レプリケーショントラフィックの整合性チェックを設定
10.15. リソースのサイズ変更
10.15.1. オンライン拡張
10.15.2. オフライン拡張する
10.15.3. オンライン縮小
10.15.4. オフライン縮小
10.16. 下位デバイスのフラッシュを無効にする
10.17. スプリットブレイン時の動作の設定
10.17.1. スプリットブレインの通知
10.17.2. スプリットブレインからの自動復旧ポリシー
10.18. スタック3ノード構成の作成
10.18.1. デバイススタックの留意事項
10.18.2. スタックリソースの設定
10.18.3. スタックリソースを有効にする
10.19. 永続的なディスクレスノード
10.20. データ再配置
10.20.1. ビットマップスロットの用意
10.20.2. 新しいノードの用意と有効化
10.20.3. 初期同期の開始
10.20.4. 接続確認
10.20.5. 初期同期後
10.20.6. クリーニング
10.20.7. まとめと他のステップ
10.21. クォーラム設定
10.21.1. 保証された最低限の冗長化
10.21.2. クォーラムを失った時の動作
10.21.3. タイブレーカーとしてのディスクレスノードを使用
11. DRBD Proxyの使用
11.1. DRBD Proxyの使用においての検討事項
11.2. インストール
11.3. ライセンスファイル
11.4. LINSTORを使用した設定
11.5. リソースファイルを使用した設定
11.6. DRBD Proxyの制御
11.7. DRBD Proxyプラグインについて
11.7.1. WAN側の帯域幅制限を使用する
11.8. トラブルシューティング
12. トラブルシューティングとエラーからの回復
12.1. ハードドライブの障害の場合
12.1.1. 手動でDRBDをハードドライブから切り離す
12.1.2. I/Oエラー時の自動切り離し
12.1.3. 障害が発生したディスクの交換(内部メタデータを使用している場合)
12.1.4. 障害の発生したディスクの交換(外部メタデータを使用している場合)
12.2. ノード障害に対処する
12.2.1. 一時的なセカンダリノードの障害に対処する
12.2.2. 一時的なプライマリノードの障害に対処する
12.2.3. 永続的なノード障害に対処する
12.3. スプリットブレインからの手動回復
V. DRBDとアプリケーションの組み合わせ
13. DRBDとPacemakerクラスタ
13.1. Pacemakerの基礎
13.2. DRBDをPacemakerクラスタで管理する
13.3. DRBDを下位デバイスにするマスターとスレーブのあるサービスのクラスタ設定
13.4. Pacemakerクラスタでリソースレベルのフェンシングを使用する
13.4.1. dopd でのリソースレベルフェンシング
13.4.2. CIB (Cluster Information Base)を使ったリソースレベルフェンシング
13.5. PacemakerクラスタでスタックDRBDリソースを使用する
13.5.1. オフサイトディザスタリカバリ機能をPacemakerクラスタに追加する
13.5.2. スタックリソースを使って、Pacemakerクラスタの4ノード冗長化を実現する
13.6. 2セットのSANベースPacemakerクラスタ間をDRBDでレプリケート
13.6.1. DRBDリソース構成
13.6.2. Pacemakerリソース構成
13.6.3. サイトのフェイルオーバ
14. DRBDとRed Hat Cluster Suite
14.1. Red Hat Clusterの背景情報
14.1.1. フェンシング
14.1.2. リソースグループマネージャ
14.2. Red Hat Clusterの設定
14.2.1. cluster.conf ファイル
14.3. Red Hat ClusterフェイルオーバクラスタでDRBDを使用する
14.3.1. クラスタ構成の設定
15. DRBDでのLVMの使用
15.1. LVMの基礎
15.2. DRBDの下位デバイスとして論理ボリュームを使用する
15.3. DRBD同期中の自動LVMスナップショットの使用
15.4. DRBDリソースを物理ボリュームとして構成する
15.5. 新しいDRBDボリュームを既存のボリュームグループへ追加する
15.6. DRBDを使用する入れ子のLVM構成
15.6.1. VGを他ノードに移動する
15.7. Pacemakerによる高可用性LVM
16. DRBDでGFSを使用する
16.1. GFS基礎
16.2. GFS用のDRBDリソースの作成
16.3. DRBDリソースを認識するようにLVMを設定する
16.4. GFS対応のためのクラスタ設定
16.5. GFSファイルシステムの作成
16.6. GFSファイルシステムを使用する
17. DRBDとOCFS2の使用
17.1. OCFS2の基礎
17.2. OCFS2用のDRBDリソースの作成
17.3. OCFS2ファイルシステムの作成
17.4. PacemakerによるOCFS2の管理
17.4.1. PacemakerにデュアルプライマリDRBDリソースを追加する
17.4.2. OCFS2をPacemakerで管理するには
17.4.3. PacemakerにOCFS2ファイルシステムを追加する
17.4.4. OCFS2ファイルシステムを管理するPacemakerの制約の追加
17.5. Pacemakerを使わないOCFS2管理
17.5.1. OCFS2をサポートするようにクラスタを設定する
17.5.2. OCFS2ファイルシステムの使用
18. DRBDでのXenの使用
18.1. Xenの基礎
18.2. Xenとともに使用するためにDRBDモジュールパラメータを設定する
18.3. Xen VBDとして適切なDRBDリソースを作成する
18.4. DRBD VBDの使用
18.5. DRBDで保護されたdomUの開始、停止、移行
18.6. DRBDとXen統合の内部
18.7. XenとPacemakerの統合
VI. DRBDパフォーマンスの最適化
19. ブロックデバイスのパフォーマンス測定
19.1. スループットの測定
19.2. レイテンシの測定
20. DRBDのスループット最適化
20.1. ハードウェアの検討事項
20.2. スループットオーバヘッドの予測
20.3. チューニングの推奨事項
20.3.1. max-buffersmax-epoch-size の設定
20.3.2. TCP送信バッファサイズの調整
20.3.3. アクティビティログサイズの調整
20.3.4. バリアとディスクフラッシュを無効にする
20.4. 冗長性を高め読み込み性能を向上させる
21. DRBDレイテンシの最適化
21.1. ハードウェアの検討事項
21.2. レイテンシオーバーヘッドの予測値
21.3. レイテンシ vs. IOPs
21.4. チューニングの推奨事項
21.4.1. CPUマスクの設定
21.4.2. ネットワークMTUの変更
21.4.3. deadline I/Oスケジューラを有効にする
VII. さらに詳しく知る
22. DRBDの内部
22.1. DRBDメタデータ
22.1.1. 内部メタデータ
22.1.2. 外部メタデータ
22.1.3. メタデータサイズの見積り
22.2. 世代識別子
22.2.1. データ世代
22.2.2. 世代識別子タプル
22.2.3. 世代識別子の変化
22.2.4. 世代識別子とDRBDの状態
22.3. アクティビティログ
22.3.1. 目的
22.3.2. アクティブエクステント
22.3.3. アクティビティログの適切なサイズの選択
22.4. クイック同期ビットマップ
22.5. peer fencingインタフェース
23. DRBD Manageについてのより詳しい情報
23.1. 空き容量の通知
23.2. デプロイを保留するポリシープラグイン
23.2.1. ドライバ書き込みについての詳細情報
24. 詳細情報の入手
24.1. 商用DRBDのサポート
24.2. 公開メーリングリスト
24.3. 公開IRCチャンネル
24.4. 公式twitterアカウント
24.5. 資料
24.6. その他の資料
VIII. 付録
最近の変更
1. コネクション
2. 自動プロモーション 機能
3. パフォーマンスの向上
4. 1リソース内の複数ボリューム
4.1. udevシンボリックリンクの変更
5. 設定上の構文の変更点
5.1. ブール型設定オプション
5.2. syncer セクションはなくなりました
5.3. protocol オプションが変則的ではなくなりました
5.4. 新しいリソース毎の options セクション
6. ネットワーク通信のオンライン変更
6.1. レプリケーションプロトコルの変更
6.2. シングルプライマリからデュアルプライマリのレプリケーションに変更する
7. drbdadm コマンドの変更点
7.1. pass-throughオプションの変更点
7.2. --overwrite-data-of-peer--force オプションに置き換わりました
8. デフォルト値の変更点
8.1. 同時にアクティブなアクティビティログのエクステント数(al-extents)
8.2. ランレングス符号化(use-rle)
8.3. I/Oエラーの処理ストラテジー(on-io-error)
8.4. 可変レート同期
8.5. 設定可能なDRBDデバイス数(minor-count)
25. DRBD Manage
25.1. クラスタの初期設定
25.2. ノードの追加
25.2.1. DRBD Manageノードの種類
25.2.2. コントロールノードの追加
25.2.3. ピュアコントローラーノード追加
25.2.4. サテライトノードの追加
25.2.5. ピュアクライアントノードの追加
25.2.6. 外部ノードの追加
25.3. クラスタ設定
25.4. ストレージプラグインの設定
25.4.1. LVM の設定
25.4.2. ZFS の設定
25.4.3. ストレージプラグインについての情報
25.5. リソース/ボリュームの作成とデプロイ
25.6. スナップショット管理
25.6.1. スナップショットの作成
25.6.2. スナップショットのリストア
25.6.3. スナップショット削除
25.7. クラスタ状態の確認
25.8. リソースのオプション設定をする
25.9. DRBD Manageでのデータ再配置
25.10. ヘルプ
26. OpenstackでのDRBDボリューム
26.1. Openstack概要
26.2. OpenstackへのDRBDインストール
26.2.1. 追加設定
26.3. トランスポートプロトコルの選択
26.3.1. iSCSIトランスポート
26.3.2. DRBDトランスポート
26.3.3. トランスポートプロトコルの設定
26.4. その他注意点
26.4.1. 空き容量の通知
26.4.2. Hyperconverged Setups
27. OpenNebulaでのDRBDボリューム
27.1. OpenNebula概要
27.2. OpenNebulaのインストール
27.3. デプロイメントポリシー
27.4. ライブマイグレーション
27.5. 空き領域の通知
28. DockerにおけるDRBDボリューム
28.1. Docker概説
28.2. Dockerプラグインのインストール
28.3. Dockerプラグイン使用例
29. DRBD Volumes in Proxmox VE
29.1. Proxmox VE Overview
29.2. Proxmox Plugin Installation
29.3. Proxmox Plugin Configuration

図の一覧

1.1. LinuxのI/OスタックでのDRBDの位置
2.1. 同期時間
2.2. DRBDリソーススタッキング
2.3. DRBDデータ再配置
6.1. シリアルポートの追加
6.2. シリアルポート付きのVM
6.3. LINBIT LINSTORコントローラアプライアンス
6.4. コントローラVMのHA設定
10.1. N 個のホストの時のコネクション数
10.2. syncer 速度の例(有効帯域幅が110MB/sの場合)
10.3. syncer 速度の例(有効帯域幅が80MB/sの場合)
10.4. 単一スタックの構成
10.5. DRBDデータ再配置
13.1. PacemakerクラスタのDRBDリソースのスタック
13.2. PacemakerクラスタのDRBDリソースのスタック
13.3. SANベースのクラスタ間のレプリケートにDRBDを用いる
15.1. LVM概要
22.1. DRBDメタデータサイズの計算(正確)
22.2. DRBDメタデータサイズの見積り(概算)
22.3. 新規データ世代の開始時に変化するGIタプル
22.4. 同期速度とターゲットの同期時間にもとづくアクティブエクステントの計算
22.5. 同期速度とターゲット同期時間にもとづくアクティブエクステントの計算(例)
25.1. DRBDのノードの種類
25.2. サテライトノードを使ったクラスタ構成
25.3. DRBDデータ再配置

表の一覧

22.1. fence-peer ハンドラの終了コード
25.1. DRBD Manageストレージプラグイン比較表
26.1. ディストリビューション依存の設定