4.3. CRUSH ロケーションをデーモンに設定する
ストレッチモードに入る前に、CRUSH ロケーションを Red Hat Ceph Storage クラスターのデーモンに設定して、クラスターを準備する必要があります。これには 2 つの方法があります。
- サービス設定ファイルを介してクラスターをブートストラップします。このファイルでは、配置の一部として場所がホストに追加されます。
-
クラスターがデプロイされた後、
ceph osd crush add-bucketおよびceph osd crush moveコマンドを使用して、場所を手動で設定します。
方法 1: クラスターのブートストラップ
前提条件
- ノードへの root レベルのアクセス。
手順
新しいストレージクラスターをブートストラップする場合は、ノードを Red Hat Ceph Storage クラスターに追加し、サービスを実行する場所に特定のラベルを設定するサービス設定
.yamlファイルを作成できます。例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow --apply-specオプションを使用してストレージクラスターをブートストラップします。構文
cephadm bootstrap --apply-spec CONFIGURATION_FILE_NAME --mon-ip MONITOR_IP_ADDRESS --ssh-private-key PRIVATE_KEY --ssh-public-key PUBLIC_KEY --registry-url REGISTRY_URL --registry-username USER_NAME --registry-password PASSWORD
cephadm bootstrap --apply-spec CONFIGURATION_FILE_NAME --mon-ip MONITOR_IP_ADDRESS --ssh-private-key PRIVATE_KEY --ssh-public-key PUBLIC_KEY --registry-url REGISTRY_URL --registry-username USER_NAME --registry-password PASSWORDCopy to Clipboard Copied! Toggle word wrap Toggle overflow 例
cephadm bootstrap --apply-spec initial-config.yaml --mon-ip 10.10.128.68 --ssh-private-key /home/ceph/.ssh/id_rsa --ssh-public-key /home/ceph/.ssh/id_rsa.pub --registry-url registry.redhat.io --registry-username myuser1 --registry-password mypassword1
[root@host01 ~]# cephadm bootstrap --apply-spec initial-config.yaml --mon-ip 10.10.128.68 --ssh-private-key /home/ceph/.ssh/id_rsa --ssh-public-key /home/ceph/.ssh/id_rsa.pub --registry-url registry.redhat.io --registry-username myuser1 --registry-password mypassword1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要cephadm bootstrapコマンドでは、さまざまなコマンドオプションを使用できます。ただし、サービス設定ファイルを使用して、ホストの場所を設定するには、--apply-specオプションを常に含めてください。
方法 2: デプロイメント後に場所を設定する
前提条件
- ノードへの root レベルのアクセス。
手順
非 tiebreaker モニターの場所を設定する予定の 2 つのバケットを CRUSH マップに追加し、バケットタイプを
datacenterとして指定します。構文
ceph osd crush add-bucket BUCKET_NAME BUCKET_TYPE
ceph osd crush add-bucket BUCKET_NAME BUCKET_TYPECopy to Clipboard Copied! Toggle word wrap Toggle overflow 例
[ceph: root@host01 /]# ceph osd crush add-bucket DC1 datacenter [ceph: root@host01 /]# ceph osd crush add-bucket DC2 datacenter
[ceph: root@host01 /]# ceph osd crush add-bucket DC1 datacenter [ceph: root@host01 /]# ceph osd crush add-bucket DC2 datacenterCopy to Clipboard Copied! Toggle word wrap Toggle overflow root=defaultの下にバケットを移動します。構文
ceph osd crush move BUCKET_NAME root=default
ceph osd crush move BUCKET_NAME root=defaultCopy to Clipboard Copied! Toggle word wrap Toggle overflow 例
[ceph: root@host01 /]# ceph osd crush move DC1 root=default [ceph: root@host01 /]# ceph osd crush move DC2 root=default
[ceph: root@host01 /]# ceph osd crush move DC1 root=default [ceph: root@host01 /]# ceph osd crush move DC2 root=defaultCopy to Clipboard Copied! Toggle word wrap Toggle overflow 必要な CRUSH 配置に従って、OSD ホストを移動します。
構文
ceph osd crush move HOST datacenter=DATACENTER
ceph osd crush move HOST datacenter=DATACENTERCopy to Clipboard Copied! Toggle word wrap Toggle overflow 例
[ceph: root@host01 /]# ceph osd crush move host01 datacenter=DC1
[ceph: root@host01 /]# ceph osd crush move host01 datacenter=DC1Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.3.1. ストレッチモードに入る リンクのコピーリンクがクリップボードにコピーされました!
新しいストレッチモードは、2 つのサイトを処理するように、設計されています。2 サイトクラスターでは、コンポーネントの可用性が失われるリスクが低くなります。
前提条件
- ノードへの root レベルのアクセス。
- CRUSH ロケーションがホストに設定されている。
手順
CRUSH マップに合わせて、各モニターの位置を設定します。
構文
ceph mon set_location HOST datacenter=DATACENTER
ceph mon set_location HOST datacenter=DATACENTERCopy to Clipboard Copied! Toggle word wrap Toggle overflow 例
[ceph: root@host01 /]# ceph mon set_location host01 datacenter=DC1 [ceph: root@host01 /]# ceph mon set_location host02 datacenter=DC1 [ceph: root@host01 /]# ceph mon set_location host04 datacenter=DC2 [ceph: root@host01 /]# ceph mon set_location host05 datacenter=DC2 [ceph: root@host01 /]# ceph mon set_location host07 datacenter=DC3
[ceph: root@host01 /]# ceph mon set_location host01 datacenter=DC1 [ceph: root@host01 /]# ceph mon set_location host02 datacenter=DC1 [ceph: root@host01 /]# ceph mon set_location host04 datacenter=DC2 [ceph: root@host01 /]# ceph mon set_location host05 datacenter=DC2 [ceph: root@host01 /]# ceph mon set_location host07 datacenter=DC3Copy to Clipboard Copied! Toggle word wrap Toggle overflow 各データセンターに 2 つのコピーを配置する CRUSH ルールを生成します。
構文
ceph osd getcrushmap > COMPILED_CRUSHMAP_FILENAME crushtool -d COMPILED_CRUSHMAP_FILENAME -o DECOMPILED_CRUSHMAP_FILENAME
ceph osd getcrushmap > COMPILED_CRUSHMAP_FILENAME crushtool -d COMPILED_CRUSHMAP_FILENAME -o DECOMPILED_CRUSHMAP_FILENAMECopy to Clipboard Copied! Toggle word wrap Toggle overflow 例
[ceph: root@host01 /]# ceph osd getcrushmap > crush.map.bin [ceph: root@host01 /]# crushtool -d crush.map.bin -o crush.map.txt
[ceph: root@host01 /]# ceph osd getcrushmap > crush.map.bin [ceph: root@host01 /]# crushtool -d crush.map.bin -o crush.map.txtCopy to Clipboard Copied! Toggle word wrap Toggle overflow 逆コンパイルされた CRUSH マップファイルを編集して、新しいルールを追加します。
例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記このルールにより、クラスターはデータセンター
DC1に対して読み取りアフィニティーを持ちます。したがって、すべての読み取りまたは書き込みは、DC1に配置された Ceph OSD を介して行われます。これが望ましくなく、読み取りまたは書き込みがゾーン全体に均等に分散される場合、CRUSH ルールは次のようになります。
例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow このルールでは、データセンターはランダムかつ自動的に選択されます。
firstnおよびindepオプションの詳細は、CRUSH ルール を参照してください。
CRUSH マップを挿入して、クラスターでルールを使用できるようにします。
構文
crushtool -c DECOMPILED_CRUSHMAP_FILENAME -o COMPILED_CRUSHMAP_FILENAME ceph osd setcrushmap -i COMPILED_CRUSHMAP_FILENAME
crushtool -c DECOMPILED_CRUSHMAP_FILENAME -o COMPILED_CRUSHMAP_FILENAME ceph osd setcrushmap -i COMPILED_CRUSHMAP_FILENAMECopy to Clipboard Copied! Toggle word wrap Toggle overflow 例
[ceph: root@host01 /]# crushtool -c crush.map.txt -o crush2.map.bin [ceph: root@host01 /]# ceph osd setcrushmap -i crush2.map.bin
[ceph: root@host01 /]# crushtool -c crush.map.txt -o crush2.map.bin [ceph: root@host01 /]# ceph osd setcrushmap -i crush2.map.binCopy to Clipboard Copied! Toggle word wrap Toggle overflow 接続モードでモニターを実行しない場合は、選択戦略を
connectivityに設定します。例
[ceph: root@host01 /]# ceph mon set election_strategy connectivity
[ceph: root@host01 /]# ceph mon set election_strategy connectivityCopy to Clipboard Copied! Toggle word wrap Toggle overflow tiebreaker モニターの場所をデータセンター間で分割するように設定して、ストレッチモードに入ります。
構文
ceph mon set_location HOST datacenter=DATACENTER ceph mon enable_stretch_mode HOST stretch_rule datacenter
ceph mon set_location HOST datacenter=DATACENTER ceph mon enable_stretch_mode HOST stretch_rule datacenterCopy to Clipboard Copied! Toggle word wrap Toggle overflow 例
[ceph: root@host01 /]# ceph mon set_location host07 datacenter=DC3 [ceph: root@host01 /]# ceph mon enable_stretch_mode host07 stretch_rule datacenter
[ceph: root@host01 /]# ceph mon set_location host07 datacenter=DC3 [ceph: root@host01 /]# ceph mon enable_stretch_mode host07 stretch_rule datacenterCopy to Clipboard Copied! Toggle word wrap Toggle overflow この例では、モニター
mon.host07が tiebreaker です。重要タイブレーカーモニターの場所は、以前に非 tiebreaker モニターを設定したデータセンターとは異なる必要があります。上記の例では、データセンター
DC3です。重要ストレッチモードに入ろうとすると、次のエラーが発生するため、このデータセンターを CRUSH マップに追加しないでください。
Error EINVAL: there are 3 datacenters in the cluster but stretch mode currently only works with 2!
Error EINVAL: there are 3 datacenters in the cluster but stretch mode currently only works with 2!Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記Ceph をデプロイするための独自のツールを作成している場合、
ceph mon set_locationコマンドを実行する代わりに、モニターの起動時に新しい--set-crush-locationオプションを使用できます。このオプションは、ceph-mon --set-crush-location 'datacenter=DC1'など、1 つのbucket=locationペアのみを受け入れます。これは、enable_stretch_modeコマンドの実行時に指定したバケットタイプに一致する必要があります。ストレッチモードが正常に有効になっていることを確認します。
例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Stretch_mode_enabledはtrueに設定する必要があります。また、ストレッチバケット、ストレッチモードバケットの数、およびストレッチモードが低下しているか回復しているかを確認することもできます。モニターが適切な場所にあることを確認します。
例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow また、どのモニターが tiebreaker であるか、およびモニターの選択戦略も確認できます。
4.3.2. ストレッチモード用の CRUSH マップを設定する リンクのコピーリンクがクリップボードにコピーされました!
この情報を使用して、ストレッチモードの CRUSH マップを設定します。
前提条件
始める前に、次の前提条件が満たされていることを確認してください。
- ノードへの root レベルのアクセス。
- CRUSH ロケーションがホストに設定されている。
手順
crushtoolコマンドを使用するために ceph-base RPM パッケージをインストールして、この OSD クラッシュトポロジーを利用する CRUSH ルールを作成します。構文
dnf -y install ceph-base
dnf -y install ceph-baseCopy to Clipboard Copied! Toggle word wrap Toggle overflow コンパイルされた CRUSH マップをクラスターから取得します。
構文
ceph osd getcrushmap > /etc/ceph/crushmap.bin
ceph osd getcrushmap > /etc/ceph/crushmap.binCopy to Clipboard Copied! Toggle word wrap Toggle overflow CRUSH マップを逆コンパイルし、テキストファイルに変換して編集します。
構文
crushtool -d /etc/ceph/crushmap.bin -o /etc/ceph/crushmap.txt
crushtool -d /etc/ceph/crushmap.bin -o /etc/ceph/crushmap.txtCopy to Clipboard Copied! Toggle word wrap Toggle overflow ファイルの末尾にある
/etc/ceph/crushmap.txtを編集して、以下のルールを CRUSH マップに追加します。このルールは、読み取りと書き込みをデータセンター全体に均等に分散します。構文
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 必要に応じて、データセンター 1 に対する読み取り/書き込みアフィニティーを持つクラスターを作成します。
構文
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Copy to Clipboard Copied! Toggle word wrap Toggle overflow
/etc/ceph/crushmap.txtから新しい CRUSH マップをコンパイルし、バイナリーファイル/etc/ceph/crushmap2.binに変換します。構文
crushtool -c /path/to/crushmap.txt -o /path/to/crushmap2.bin
crushtool -c /path/to/crushmap.txt -o /path/to/crushmap2.binCopy to Clipboard Copied! Toggle word wrap Toggle overflow 例
[ceph: root@host01 /]# crushtool -c /etc/ceph/crushmap.txt -o /etc/ceph/crushmap2.bin
[ceph: root@host01 /]# crushtool -c /etc/ceph/crushmap.txt -o /etc/ceph/crushmap2.binCopy to Clipboard Copied! Toggle word wrap Toggle overflow 新しく作成された CRUSH マップをクラスターに再度注入します。
構文
ceph osd setcrushmap -i /path/to/compiled_crushmap
ceph osd setcrushmap -i /path/to/compiled_crushmapCopy to Clipboard Copied! Toggle word wrap Toggle overflow 例
[ceph: root@host01 /]# ceph osd setcrushmap -i /path/to/compiled_crushmap 17
[ceph: root@host01 /]# ceph osd setcrushmap -i /path/to/compiled_crushmap 17Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記数字 17 はカウンターであり、CRUSH マップに加えられた変更に応じて増加します (18、19 など)。
検証
新しく作成された stretch_rule が使用可能であることを確認します。
構文
ceph osd crush rule ls
ceph osd crush rule ls
例
[ceph: root@host01 /]# ceph osd crush rule ls replicated_rule stretch_rule
[ceph: root@host01 /]# ceph osd crush rule ls
replicated_rule
stretch_rule
4.3.2.1. ストレッチモードへの切り替え リンクのコピーリンクがクリップボードにコピーされました!
ストレッチモードは 2 つのサイトを処理するように設計されています。2 サイトクラスターでは、コンポーネントの可用性が失われるリスクが低くなります。
前提条件
始める前に、次の前提条件が満たされていることを確認してください。
- ノードへの root レベルのアクセス。
- CRUSH ロケーションがホストに設定されている。
- ストレッチルールを含むように設定された CRUSH マップ。
- クラスター内にイレイジャーコーディングされたプールがない。
- 2 つのサイトの重みが同じである。
手順
モニターが使用する現在の選出ストラテジーを確認します。
構文
ceph mon dump | grep election_strategy
ceph mon dump | grep election_strategyCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注記Ceph クラスターの
election_strategyは、デフォルトで1に設定されています。例
[ceph: root@host01 /]# ceph mon dump | grep election_strategy dumped monmap epoch 9 election_strategy: 1
[ceph: root@host01 /]# ceph mon dump | grep election_strategy dumped monmap epoch 9 election_strategy: 1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 選出ストラテジーを
connectivityに変更します。構文
ceph mon set election_strategy connectivity
ceph mon set election_strategy connectivityCopy to Clipboard Copied! Toggle word wrap Toggle overflow 選出ストラテジーの設定の詳細は、モニター選択ストラテジーの設定 を参照してください。
ceph mon dumpコマンドを使用して、選出ストラテジーが3に更新されたことを確認します。例
[ceph: root@host01 /]# ceph mon dump | grep election_strategy dumped monmap epoch 22 election_strategy: 3
[ceph: root@host01 /]# ceph mon dump | grep election_strategy dumped monmap epoch 22 election_strategy: 3Copy to Clipboard Copied! Toggle word wrap Toggle overflow tiebreaker モニターの場所を、データセンター間で分割するように設定します。
構文
ceph mon set_location TIEBREAKER_HOST datacenter=DC3
ceph mon set_location TIEBREAKER_HOST datacenter=DC3Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例
[ceph: root@host01 /]# ceph mon set_location host07 datacenter=DC3
[ceph: root@host01 /]# ceph mon set_location host07 datacenter=DC3Copy to Clipboard Copied! Toggle word wrap Toggle overflow tiebreaker モニターが期待どおりに設定されていることを確認します。
構文
ceph mon dump
ceph mon dumpCopy to Clipboard Copied! Toggle word wrap Toggle overflow 例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ストレッチモードに入ります。
構文
ceph mon enable_stretch_mode TIEBREAKER_HOST STRETCH_RULE STRETCH_BUCKET
ceph mon enable_stretch_mode TIEBREAKER_HOST STRETCH_RULE STRETCH_BUCKETCopy to Clipboard Copied! Toggle word wrap Toggle overflow 以下の例では、下記の点を前提としています。
- tiebreaker ノードは host07 として設定されている。
- ストレッチルールは、xx で作成された stretch_rule である。
- ストレッチバケットはデータセンターとして設定されている。
[ceph: root@host01 /]# ceph mon enable_stretch_mode host07 stretch_rule datacenter
[ceph: root@host01 /]# ceph mon enable_stretch_mode host07 stretch_rule datacenter
検証
CROSREF を続行して、ストレッチモードが正しく実装されていることを確認します。
4.3.2.2. ストレッチモードの検証 リンクのコピーリンクがクリップボードにコピーされました!
この情報を使用して、実装された CRUSH ルールを使用してストレッチモードが正しく作成されたことを確認します。
手順
すべてのプールが Ceph クラスターで作成された CRUSH ルールを使用していることを確認します。これらの例では、CRUSH ルールは ストレッチモード用の CRUSH マップの設定 で作成された設定に従って、
stretch_ruleとして設定されています。構文
for pool in $(rados lspools);do echo -n "Pool: ${pool}; ";ceph osd pool get ${pool} crush_rule;donefor pool in $(rados lspools);do echo -n "Pool: ${pool}; ";ceph osd pool get ${pool} crush_rule;doneCopy to Clipboard Copied! Toggle word wrap Toggle overflow 例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ストレッチモードが有効になっていることを確認します。
stretch_mode_enabledがtrueに設定されていることを確認します。構文
ceph osd dump
ceph osd dumpCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力には次の情報が含まれます。
- stretch_mode_enabled
-
ストレッチモードが有効な場合は
trueに設定します。 - stretch_bucket_count
- OSD を備えたデータセンターの数。
- degraded_stretch_mode
-
デグレードしていない場合は
0を出力します。ストレッチモードがデグレードしている場合は、アップサイトの数を出力します。 - recovering_stretch_mode
-
回復しない場合は
0を出力します。ストレッチモードが回復中の場合、出力は1です。 - stretch_mode_bucket
各 CRUSH バケットタイプに設定される一意の値。この値は通常、データセンターの場合は
8に設定されます。例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
ceph mon dumpを使用して、ストレッチモードが mon マップを使用していることを確認します。以下の点を行うようにしてください。
-
stretch_mode_enabledが1に設定されている -
正しい mon ホストが
tiebreaker_monとして設定されている 正しい mon ホストが
disallowed_leadersとして設定されている構文
ceph mon dump
ceph mon dumpCopy to Clipboard Copied! Toggle word wrap Toggle overflow 例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
次のステップ
- Ceph Object Gateway をデプロイ、設定、管理します。詳細は、Ceph Object Gateway を参照してください。
- Ceph ブロックデバイスを管理、作成、設定、および使用します。詳細は、Ceph ブロックデバイス を参照してください。
- Ceph File System (CephFS) を作成、マウント、操作します。詳細は、Ceph File Systems を参照してください。