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ファイルを作成できます。例
service_type: host addr: host01 hostname: host01 location: root: default datacenter: DC1 labels: - osd - mon - mgr --- service_type: host addr: host02 hostname: host02 location: datacenter: DC1 labels: - osd - mon --- service_type: host addr: host03 hostname: host03 location: datacenter: DC1 labels: - osd - mds - rgw --- service_type: host addr: host04 hostname: host04 location: root: default datacenter: DC2 labels: - osd - mon - mgr --- service_type: host addr: host05 hostname: host05 location: datacenter: DC2 labels: - osd - mon --- service_type: host addr: host06 hostname: host06 location: datacenter: DC2 labels: - osd - mds - rgw --- service_type: host addr: host07 hostname: host07 labels: - mon --- service_type: mon placement: label: "mon" --- service_id: cephfs placement: label: "mds" --- service_type: mgr service_name: mgr placement: label: "mgr" --- service_type: osd service_id: all-available-devices service_name: osd.all-available-devices placement: label: "osd" spec: data_devices: all: true --- service_type: rgw service_id: objectgw service_name: rgw.objectgw placement: count: 2 label: "rgw" spec: rgw_frontend_port: 8080--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例
[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 mypassword1重要cephadm bootstrapコマンドでは、さまざまなコマンドオプションを使用できます。ただし、サービス設定ファイルを使用して、ホストの場所を設定するには、--apply-specオプションを常に含めてください。
方法 2: デプロイメント後に場所を設定する
前提条件
- ノードへの root レベルのアクセス。
手順
非 tiebreaker モニターの場所を設定する予定の 2 つのバケットを CRUSH マップに追加し、バケットタイプを
datacenterとして指定します。構文
ceph osd crush add-bucket BUCKET_NAME BUCKET_TYPE例
[ceph: root@host01 /]# ceph osd crush add-bucket DC1 datacenter [ceph: root@host01 /]# ceph osd crush add-bucket DC2 datacenterroot=defaultの下にバケットを移動します。構文
ceph osd crush move BUCKET_NAME root=default例
[ceph: root@host01 /]# ceph osd crush move DC1 root=default [ceph: root@host01 /]# ceph osd crush move DC2 root=default必要な CRUSH 配置に従って、OSD ホストを移動します。
構文
ceph osd crush move HOST datacenter=DATACENTER例
[ceph: root@host01 /]# ceph osd crush move host01 datacenter=DC1
4.3.1. ストレッチモードに入る リンクのコピーリンクがクリップボードにコピーされました!
新しいストレッチモードは、2 つのサイトを処理するように、設計されています。2 サイトクラスターでは、コンポーネントの可用性が失われるリスクが低くなります。
前提条件
- ノードへの root レベルのアクセス。
- CRUSH ロケーションがホストに設定されている。
手順
CRUSH マップに合わせて、各モニターの位置を設定します。
構文
ceph mon set_location HOST datacenter=DATACENTER例
[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各データセンターに 2 つのコピーを配置する CRUSH ルールを生成します。
構文
ceph osd getcrushmap > COMPILED_CRUSHMAP_FILENAME crushtool -d COMPILED_CRUSHMAP_FILENAME -o DECOMPILED_CRUSHMAP_FILENAME例
[ceph: root@host01 /]# ceph osd getcrushmap > crush.map.bin [ceph: root@host01 /]# crushtool -d crush.map.bin -o crush.map.txt逆コンパイルされた CRUSH マップファイルを編集して、新しいルールを追加します。
例
rule stretch_rule { id 11 type replicated min_size 1 max_size 10 step take DC12 step chooseleaf firstn 2 type host step emit step take DC23 step chooseleaf firstn 2 type host step emit }注記このルールにより、クラスターはデータセンター
DC1に対して読み取りアフィニティーを持ちます。したがって、すべての読み取りまたは書き込みは、DC1に配置された Ceph OSD を介して行われます。これが望ましくなく、読み取りまたは書き込みがゾーン全体に均等に分散される場合、CRUSH ルールは次のようになります。
例
rule stretch_rule { id 1 type replicated min_size 1 max_size 10 step take default step choose firstn 0 type datacenter step chooseleaf firstn 2 type host step emit }このルールでは、データセンターはランダムかつ自動的に選択されます。
firstnおよびindepオプションの詳細は、CRUSH ルール を参照してください。
CRUSH マップを挿入して、クラスターでルールを使用できるようにします。
構文
crushtool -c DECOMPILED_CRUSHMAP_FILENAME -o COMPILED_CRUSHMAP_FILENAME ceph osd setcrushmap -i COMPILED_CRUSHMAP_FILENAME例
[ceph: root@host01 /]# crushtool -c crush.map.txt -o crush2.map.bin [ceph: root@host01 /]# ceph osd setcrushmap -i crush2.map.bin接続モードでモニターを実行しない場合は、選択戦略を
connectivityに設定します。例
[ceph: root@host01 /]# ceph mon set election_strategy connectivitytiebreaker モニターの場所をデータセンター間で分割するように設定して、ストレッチモードに入ります。
構文
ceph mon set_location HOST datacenter=DATACENTER ceph mon enable_stretch_mode HOST stretch_rule datacenter例
[ceph: root@host01 /]# ceph mon set_location host07 datacenter=DC3 [ceph: root@host01 /]# ceph mon enable_stretch_mode host07 stretch_rule datacenterこの例では、モニター
mon.host07が tiebreaker です。重要タイブレーカーモニターの場所は、以前に非 tiebreaker モニターを設定したデータセンターとは異なる必要があります。上記の例では、データセンター
DC3です。重要ストレッチモードに入ろうとすると、次のエラーが発生するため、このデータセンターを CRUSH マップに追加しないでください。
Error EINVAL: there are 3 datacenters in the cluster but stretch mode currently only works with 2!注記Ceph をデプロイするための独自のツールを作成している場合、
ceph mon set_locationコマンドを実行する代わりに、モニターの起動時に新しい--set-crush-locationオプションを使用できます。このオプションは、ceph-mon --set-crush-location 'datacenter=DC1'など、1 つのbucket=locationペアのみを受け入れます。これは、enable_stretch_modeコマンドの実行時に指定したバケットタイプに一致する必要があります。ストレッチモードが正常に有効になっていることを確認します。
例
[ceph: root@host01 /]# ceph osd dump epoch 361 fsid 1234ab78-1234-11ed-b1b1-de456ef0a89d created 2023-01-16T05:47:28.482717+0000 modified 2023-01-17T17:36:50.066183+0000 flags sortbitwise,recovery_deletes,purged_snapdirs,pglog_hardlimit crush_version 31 full_ratio 0.95 backfillfull_ratio 0.92 nearfull_ratio 0.85 require_min_compat_client luminous min_compat_client luminous require_osd_release quincy stretch_mode_enabled true stretch_bucket_count 2 degraded_stretch_mode 0 recovering_stretch_mode 0 stretch_mode_bucket 8Stretch_mode_enabledはtrueに設定する必要があります。また、ストレッチバケット、ストレッチモードバケットの数、およびストレッチモードが低下しているか回復しているかを確認することもできます。モニターが適切な場所にあることを確認します。
例
[ceph: root@host01 /]# ceph mon dump epoch 19 fsid 1234ab78-1234-11ed-b1b1-de456ef0a89d last_changed 2023-01-17T04:12:05.709475+0000 created 2023-01-16T05:47:25.631684+0000 min_mon_release 16 (pacific) election_strategy: 3 stretch_mode_enabled 1 tiebreaker_mon host07 disallowed_leaders host07 0: [v2:132.224.169.63:3300/0,v1:132.224.169.63:6789/0] mon.host07; crush_location {datacenter=DC3} 1: [v2:220.141.179.34:3300/0,v1:220.141.179.34:6789/0] mon.host04; crush_location {datacenter=DC2} 2: [v2:40.90.220.224:3300/0,v1:40.90.220.224:6789/0] mon.host01; crush_location {datacenter=DC1} 3: [v2:60.140.141.144:3300/0,v1:60.140.141.144:6789/0] mon.host02; crush_location {datacenter=DC1} 4: [v2:186.184.61.92:3300/0,v1:186.184.61.92:6789/0] mon.host05; crush_location {datacenter=DC2} dumped monmap epoch 19また、どのモニターが tiebreaker であるか、およびモニターの選択戦略も確認できます。
4.3.2. ストレッチモード用の CRUSH マップを設定する リンクのコピーリンクがクリップボードにコピーされました!
この情報を使用して、ストレッチモードの CRUSH マップを設定します。
前提条件
始める前に、次の前提条件が満たされていることを確認してください。
- ノードへの root レベルのアクセス。
- CRUSH ロケーションがホストに設定されている。
手順
crushtoolコマンドを使用するために ceph-base RPM パッケージをインストールして、この OSD クラッシュトポロジーを利用する CRUSH ルールを作成します。構文
dnf -y install ceph-baseコンパイルされた CRUSH マップをクラスターから取得します。
構文
ceph osd getcrushmap > /etc/ceph/crushmap.binCRUSH マップを逆コンパイルし、テキストファイルに変換して編集します。
構文
crushtool -d /etc/ceph/crushmap.bin -o /etc/ceph/crushmap.txtファイルの末尾にある
/etc/ceph/crushmap.txtを編集して、以下のルールを CRUSH マップに追加します。このルールは、読み取りと書き込みをデータセンター全体に均等に分散します。構文
rule stretch_rule { id 1 type replicated step take default step choose firstn 0 type datacenter step chooseleaf firstn 2 type host step emit }必要に応じて、データセンター 1 に対する読み取り/書き込みアフィニティーを持つクラスターを作成します。
構文
rule stretch_rule { id 1 type replicated step take DC1 step chooseleaf firstn 2 type host step emit step take DC2 step chooseleaf firstn 2 type host step emit }The CRUSH rule declared contains the following information: Rule name Description: A unique name for identifying the rule. Value: stretch_rule id Description: A unique whole number for identifying the rule. Value: 1 type Description: Describes a rule for either a storage drive replicated or erasure-coded. Value: replicated step take default Description: Takes the root bucket called default, and begins iterating down the tree. step take DC1 Description: Takes the bucket called DC1, and begins iterating down the tree. step choose firstn 0 type datacenter Description: Selects the datacenter bucket, and goes into its subtrees. step chooseleaf firstn 2 type host Description: Selects the number of buckets of the given type. In this case, it is two different hosts located in the datacenter it entered at the previous level. step emit Description: Outputs the current value and empties the stack. Typically used at the end of a rule, but may also be used to pick from different trees in the same rule.
/etc/ceph/crushmap.txtから新しい CRUSH マップをコンパイルし、バイナリーファイル/etc/ceph/crushmap2.binに変換します。構文
crushtool -c /path/to/crushmap.txt -o /path/to/crushmap2.bin例
[ceph: root@host01 /]# crushtool -c /etc/ceph/crushmap.txt -o /etc/ceph/crushmap2.bin新しく作成された CRUSH マップをクラスターに再度注入します。
構文
ceph osd setcrushmap -i /path/to/compiled_crushmap例
[ceph: root@host01 /]# ceph osd setcrushmap -i /path/to/compiled_crushmap 17注記数字 17 はカウンターであり、CRUSH マップに加えられた変更に応じて増加します (18、19 など)。
検証
新しく作成された stretch_rule が使用可能であることを確認します。
構文
ceph osd crush rule ls
例
[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 クラスターの
election_strategyは、デフォルトで1に設定されています。例
[ceph: root@host01 /]# ceph mon dump | grep election_strategy dumped monmap epoch 9 election_strategy: 1選出ストラテジーを
connectivityに変更します。構文
ceph mon set election_strategy connectivity選出ストラテジーの設定の詳細は、モニター選択ストラテジーの設定 を参照してください。
ceph mon dumpコマンドを使用して、選出ストラテジーが3に更新されたことを確認します。例
[ceph: root@host01 /]# ceph mon dump | grep election_strategy dumped monmap epoch 22 election_strategy: 3tiebreaker モニターの場所を、データセンター間で分割するように設定します。
構文
ceph mon set_location TIEBREAKER_HOST datacenter=DC3例
[ceph: root@host01 /]# ceph mon set_location host07 datacenter=DC3tiebreaker モニターが期待どおりに設定されていることを確認します。
構文
ceph mon dump例
[ceph: root@host01 /]# ceph mon dump epoch 8 fsid 4158287e-169e-11f0-b1ad-fa163e98b991 last_changed 2025-04-11T07:14:48.652801+0000 created 2025-04-11T06:29:24.974553+0000 min_mon_release 19 (squid) election_strategy: 3 0: [v2:10.0.57.33:3300/0,v1:10.0.57.33:6789/0] mon.host07; crush_location {datacenter=DC3} 1: [v2:10.0.58.200:3300/0,v1:10.0.58.200:6789/0] mon.host05; crush_location {datacenter=DC2} 2: [v2:10.0.58.47:3300/0,v1:10.0.58.47:6789/0] mon.host02; crush_location {datacenter=DC1} 3: [v2:10.0.58.104:3300/0,v1:10.0.58.104:6789/0] mon.host04; crush_location {datacenter=DC2} 4: [v2:10.0.58.38:3300/0,v1:10.0.58.38:6789/0] mon.host01; crush_location {datacenter=DC1} dumped monmap epoch 8 0ストレッチモードに入ります。
構文
ceph mon enable_stretch_mode TIEBREAKER_HOST STRETCH_RULE STRETCH_BUCKET以下の例では、下記の点を前提としています。
- tiebreaker ノードは host07 として設定されている。
- ストレッチルールは、xx で作成された stretch_rule である。
- ストレッチバケットはデータセンターとして設定されている。
[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;done例
[ceph: root@host01 /]# 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ストレッチモードが有効になっていることを確認します。
stretch_mode_enabledがtrueに設定されていることを確認します。構文
ceph osd dump出力には次の情報が含まれます。
- stretch_mode_enabled
-
ストレッチモードが有効な場合は
trueに設定します。 - stretch_bucket_count
- OSD を備えたデータセンターの数。
- degraded_stretch_mode
-
デグレードしていない場合は
0を出力します。ストレッチモードがデグレードしている場合は、アップサイトの数を出力します。 - recovering_stretch_mode
-
回復しない場合は
0を出力します。ストレッチモードが回復中の場合、出力は1です。 - stretch_mode_bucket
各 CRUSH バケットタイプに設定される一意の値。この値は通常、データセンターの場合は
8に設定されます。例
"stretch_mode": { "stretch_mode_enabled": true, "stretch_bucket_count": 2, "degraded_stretch_mode": 0, "recovering_stretch_mode": 1, "stretch_mode_bucket": 8
ceph mon dumpを使用して、ストレッチモードが mon マップを使用していることを確認します。以下の点を行うようにしてください。
-
stretch_mode_enabledが1に設定されている -
正しい mon ホストが
tiebreaker_monとして設定されている 正しい mon ホストが
disallowed_leadersとして設定されている構文
ceph mon dump例
[ceph: root@host01 /]# ceph mon dump epoch 16 fsid ff19789c-f5c7-11ef-8e1c-fa163e4e1f7e last_changed 2025-02-28T12:12:51.089706+0000 created 2025-02-28T11:34:59.325503+0000 min_mon_release 19 (squid) election_strategy: 3 stretch_mode_enabled 1 tiebreaker_mon host07 disallowed_leaders host07 0: [v2:10.0.56.37:3300/0,v1:10.0.56.37:6789/0] mon.host01; crush_location {datacenter=DC1} 1: [v2:10.0.59.188:3300/0,v1:10.0.59.188:6789/0] mon.host05; crush_location {datacenter=DC2} 2: [v2:10.0.59.35:3300/0,v1:10.0.59.35:6789/0] mon.host02; crush_location {datacenter=DC1} 3: [v2:10.0.56.189:3300/0,v1:10.0.56.189:6789/0] mon.host07; crush_location {datacenter=DC3} 4: [v2:10.0.56.13:3300/0,v1:10.0.56.13:6789/0] mon.host04; crush_location {datacenter=DC2} dumped monmap epoch 16
-
次のステップ
- Ceph Object Gateway をデプロイ、設定、管理します。詳細は、Ceph Object Gateway を参照してください。
- Ceph ブロックデバイスを管理、作成、設定、および使用します。詳細は、Ceph ブロックデバイス を参照してください。
- Ceph File System (CephFS) を作成、マウント、操作します。詳細は、Ceph File Systems を参照してください。