CTC 教育サービス
[IT研修]注目キーワード Python UiPath(RPA) 最新技術動向 Microsoft Azure Docker Kubernetes
みなさん、こんにちは。先日、分散ストレージソフトウェアCephのコミュニティイベント「Ceph Days Tokyo」に参加してきました。当初は、一般の参加者として顔を出す予定だったのですが、最後の「QA and Roundtable」という、参加者からの質問にスピーカーが答えるコーナーの司会者に抜擢されるというハプニングもありました。海外からのスピーカーを中心に英語で行われていたイベントなのですが、この最後のコーナーは、日本語で司会をして通訳をした方が参加者も気軽に質問できるだろうということで、主催者のRoss Turk(InktankからRed HatにやってきたCephのCommunity Manager)に突然、司会と通訳を依頼されたというわけです。
私ががんばって司会をしたおかげかどうかは分かりませんが、参加者からはさまざまな質問をいただいて、時間いっぱいまで、有意義なディスカッションが行われました。特に印象に残ったのは、今後、SSDの利用が一般的になった場合に、Cephの構成やアーキテクチャーがどのように変わっていくのかという話題、そしてもう一つは、大規模な環境でデータの冗長性がどのように担保されるのかという話題です。
そこで、今回は、Cephにおけるデータの冗長化について、その基本的な仕組みをあらためて解説したいと思います。
本連載では、これまでに2回、Cephの解説を行ってきました。まずは、次の記事でCephの基本的な仕組みを復習しておいてください。
特に、第44回の記事では、CRUSHアルゴリズムによって、オブジェクトの配置先が決定されることを説明しました(図1)。図では、1つのOSD(保存先ディスク)を決定していますが、実際には、事前に設定した数のOSDが決定されて、複数のOSDにレプリカが保存されます。これによって、データが冗長保存されることになります。
図1 CRUSHアルゴリズムによるオブジェクト配置の決定
ただし、冗長性の確保という意味では、これだけでは不十分です。障害などで、あるOSDにアクセスできなくなった際に、それを検知してオブジェクトの配置先を自動的に変更する仕組みが必要になります。Cephの場合、この処理は、クラスタマップの更新によって行われます。クラスタマップには、Cephのクラスタ全体の構成情報が収められており、現在利用可能なOSDの情報などもここに含まれます。CRUSHアルゴリズムで配置先のディスクを計算する際は、クラスタマップを参照して、現在利用可能なOSDのみを配置対象とします(*1)。
最新のクラスタマップは、モニターデーモン「MON」によって管理/保存されています。MONは、通常3台以上のサーバーで稼働しており、Paxosと呼ばれるプロトコルで、お互いに同一のクラスタマップを保持していることを確認しあいます。そして、CRUSHアルゴリズムの計算を行うクライアントとすべてのOSDは、起動時に、MONからクラスタマップを取得して、その内容をメモリ上に保持しています(図2)。クライアントだけではなく、OSDもCRUSHアルゴリズムによる計算を行う点に注意してください。たとえば、クライアントからオブジェクトを受け取ったOSDは、CURSHアルゴリズムを用いて、レプリカを保存するOSDを決定します。
図2 MONによるクラスタマップの管理
さらに、それぞれのOSDは、お互いの稼働状況をチェックしており、あるOSDが停止していることを検知すると、その情報をMONに通知します。この通知を受けたMONは、停止したOSDを除いた、新たなクラスタマップを作成して、その内容をOSDに配信していきます。クラスタマップには、バージョン番号が振られており、新しいクラスタマップには新しいバージョン番号が付与されます。MONから新しいクラスタマップを受け取ったOSDは、自身が保持しているオブジェクトについて、新しい配置先をCRUSHアルゴリズムで計算しなおして、必要な際は、オブジェクトの移動や再レプリケーションを行ないます。
この時、新しいクラスタマップは、MONからすべてのOSDに直接配信されるわけではなく、OSD間で順次伝達されていきます。このため、タイミングによっては、OSDごとに参照するクラスタマップが異なる可能性もあります。OSD間でレプリケーションなどの処理を行う際は、お互いにクラスタマップのバージョン番号を確認して、必ず、新しいクラスタマップを利用して、矛盾なく処理を行うように設計されています。
また、クラスタマップのバージョン番号のチェックは、クライアントからOSDにアクセスする際にも行われます。クライアントが保持しているクラスタマップとOSDが保持しているクラスタマップでバージョン番号が一致しない場合、最新のクラスタマップをMONから再取得するようになっています。このようなCephの内部構造については、公式ドキュメントにも記載がありますので、そちらも参考にしてください(*2)。
今回は、Cephのデータ保護の仕組みを解説しました。実は、冒頭のCeph Days Tokyoでの質問の中には、「Cephの最悪の障害パターンは何ですか?」というものもありました。そして、その場でスピーカーから出てきたのは、「クラスタマップのデータベースの破壊」というものでした。本文で説明したように、CRUSHアルゴリズムでは、クラスタマップを参照して計算が行われますので、MONが管理するクラスタマップが失われると、Cephは稼働を続けることができなくなります。MONは、3台以上のサーバーで稼働していますので、MONが完全停止する可能性は低いものと考えられますが、仮に、MONがクラスタマップを保存するデータベース(内部的には、キーバリューストアのLevelDBを使用しています)がすべて破壊された場合、クラスタマップを復元することすら困難になります。このデータベースの安定稼働には、特に注意を払う必要がありそうです。
さて、今週は、いよいよ、「OpenStack Summit Tokyo/2015」が開催されます。次回は、こちらからの話題をお届けしたいと思います。
*1 「Ceph アーキテクチャ概説」
*2 「Architecture - Ceph Documentation」
++ CTC教育サービスから一言 ++
このコラムでLinuxや周辺技術の技術概要や面白さが理解できたのではないかと思います。興味と面白さを仕事に変えるには、チューニングやトラブルシューティングの方法を実機を使用して多角的に学ぶことが有効であると考えます。CTC教育サービスでは、Linuxに関する実践力を鍛えられるコースを多数提供しています。興味がある方は以下のページもご覧ください。
CTC教育サービス Linuxのページ
http://www.school.ctc-g.co.jp/linux/
筆者書籍紹介 Software Design plusシリーズ 「独習Linux専科」サーバ構築/運用/管理 ――あなたに伝えたい技と知恵と鉄則 本物の基礎を学ぶ!新定番のLinux独習書 中井悦司 著 B5変形判/384ページ 定価3,129円(本体2,980円) ISBN 978-4-7741-5937-9 詳しくはこちら(出版社WEBサイト) |
[IT研修]注目キーワード Python UiPath(RPA) 最新技術動向 Microsoft Azure Docker Kubernetes