第4章 Red Hat Ceph Storage ストレッチクラスターの設定
cephadm
を使用して Red Hat Ceph Storage クラスターが完全にデプロイされたら、次の手順でストレッチクラスターモードを設定します。新しいストレッチモードは、2 サイトのケースを処理するように設計されています。
手順
ceph mon dump コマンドを使用して、モニターが使用している現在の選挙戦略を確認します。ceph クラスターのデフォルトでは、接続はクラシックに設定されています。
ceph mon dump | grep election_strategy
出力例:
dumped monmap epoch 9 election_strategy: 1
モニターの選択を接続に変更します。
ceph mon set election_strategy connectivity
前の cephmondump コマンドを再度実行して、election_strategy 値を確認します。
$ ceph mon dump | grep election_strategy
出力例:
dumped monmap epoch 10 election_strategy: 3
さまざまな選択戦略の詳細については、Configuring monitor election strategy を参照してください。
すべての Ceph モニターの場所を設定します。
ceph mon set_location ceph1 datacenter=DC1 ceph mon set_location ceph2 datacenter=DC1 ceph mon set_location ceph4 datacenter=DC2 ceph mon set_location ceph5 datacenter=DC2 ceph mon set_location ceph7 datacenter=DC3
各モニターに適切な場所があることを確認します。
$ ceph mon dump
出力例:
epoch 17 fsid dd77f050-9afe-11ec-a56c-029f8148ea14 last_changed 2022-03-04T07:17:26.913330+0000 created 2022-03-03T14:33:22.957190+0000 min_mon_release 16 (pacific) election_strategy: 3 0: [v2:10.0.143.78:3300/0,v1:10.0.143.78:6789/0] mon.ceph1; crush_location {datacenter=DC1} 1: [v2:10.0.155.185:3300/0,v1:10.0.155.185:6789/0] mon.ceph4; crush_location {datacenter=DC2} 2: [v2:10.0.139.88:3300/0,v1:10.0.139.88:6789/0] mon.ceph5; crush_location {datacenter=DC2} 3: [v2:10.0.150.221:3300/0,v1:10.0.150.221:6789/0] mon.ceph7; crush_location {datacenter=DC3} 4: [v2:10.0.155.35:3300/0,v1:10.0.155.35:6789/0] mon.ceph2; crush_location {datacenter=DC1}
crushtool
コマンドを使用するためにceph-base
RPM パッケージをインストールして、この OSD クラッシュトポロジーを利用する CRUSH ルールを作成します。$ dnf -y install ceph-base
CRUSH ルールセットの詳細については、Ceph CRUSH ruleset を参照してください。
コンパイルされた CRUSH マップをクラスターから取得します。
$ ceph osd getcrushmap > /etc/ceph/crushmap.bin
CRUSH マップを逆コンパイルし、これをテキストファイルに変換して編集できるようにします。
$ crushtool -d /etc/ceph/crushmap.bin -o /etc/ceph/crushmap.txt
ファイルの末尾にあるテキストファイル
/etc/ceph/crushmap.txt
を編集して、以下のルールを CRUSH マップに追加します。$ vim /etc/ceph/crushmap.txt
rule stretch_rule { id 1 type replicated min_size 1 max_size 10 step take DC1 step chooseleaf firstn 2 type host step emit step take DC2 step chooseleaf firstn 2 type host step emit } # end crush map
注記ルール
id
は一意である必要があります。この例では、id 0 のクラッシュルールがもう 1 つしかないため、id 1 を使用しています。デプロイメントにさらにルールが作成されている場合は、次の空き ID を使用します。宣言された CRUSH ルールには、次の情報が含まれています。
Rule name
:- 説明: ルールを識別する一意の完全な名前。
-
値:
stretch_rule
id
:- 説明: ルールを識別する一意の整数。
-
値:
1
type
:- 説明: レプリケートまたはイレイジャーコーディングされたストレージドライブのルールを説明しています。
-
値:
replicated
min_size
:- 説明: プールがこの数よりも小さいレプリカを使用する場合、CRUSH はこのルールを選択しません。
-
値:
1
max_size
:- 説明: プールがこの数よりも大きいレプリカを使用する場合、CRUSH はこのルールを選択しません。
-
値:
10
step take DC1
- 説明: バケット名 (DC1) を取り、ツリーを下ってイテレートを開始します。
step chooseleaf firstn 2 type host
- 説明: 指定のタイプのバケット数を選択します。この例では、DC1 にある 2 つの異なるホストになります。
step emit
- 説明: 現在の値を出力し、スタックを除算します。通常、ルールの最後に使用されますが、同じルール内の異なるツリーを選択する際に使用することもできます。
step take DC2
- 説明: バケット名 (DC2) を取り、ツリーを下ってイテレートを開始します。
step chooseleaf firstn 2 type host
- 説明: 指定のタイプのバケット数を選択します。この例では、DC2 にある 2 つの異なるホストになります。
step emit
- 説明: 現在の値を出力し、スタックを除算します。通常、ルールの最後に使用されますが、同じルール内の異なるツリーを選択する際に使用することもできます。
ファイル
/etc/ceph/crushmap.txt
から新しい CRUSH マップをコンパイルし、これを/etc/ceph/crushmap2.bin
というバイナリーファイルに変換します。$ crushtool -c /etc/ceph/crushmap.txt -o /etc/ceph/crushmap2.bin
作成した新しいクラッシュマップをクラスターに注入します。
$ ceph osd setcrushmap -i /etc/ceph/crushmap2.bin
出力例:
17
注記数字の 17 はカウンターであり、クラッシュマップに加えた変更に応じて増加します (18、19 など)。
作成したストレッチルールが使用可能になったことを確認します。
ceph osd crush rule ls
出力例:
replicated_rule stretch_rule
ストレッチクラスターモードを有効にします。
$ ceph mon enable_stretch_mode ceph7 stretch_rule datacenter
この例では、
ceph7
がアービターノード、stretch_rule
が前の手順で作成したクラッシュルール、datacenter
が分割バケットです。すべてのプールが、Ceph クラスターに作成した
stretch_rule
CRUSH ルールを使用していることを確認します。$ for pool in $(rados lspools);do echo -n "Pool: ${pool}; ";ceph osd pool get ${pool} crush_rule;done
出力例:
Pool: device_health_metrics; crush_rule: stretch_rule Pool: cephfs.cephfs.meta; crush_rule: stretch_rule Pool: cephfs.cephfs.data; crush_rule: stretch_rule Pool: .rgw.root; crush_rule: stretch_rule Pool: default.rgw.log; crush_rule: stretch_rule Pool: default.rgw.control; crush_rule: stretch_rule Pool: default.rgw.meta; crush_rule: stretch_rule Pool: rbdpool; crush_rule: stretch_rule
これは、アービターモードで稼働中の Red Hat Ceph Storage ストレッチクラスターが利用可能になったことを示しています。