運用が楽になる分散データベース Riak

50
運用が楽になる 分散データベース Riak Bashoジャパン株式会社 Software Engineer 佐藤貴彦 2013/07/31 BPStudy#71

description

BPStudy #71 での発表資料です。

Transcript of 運用が楽になる分散データベース Riak

Page 1: 運用が楽になる分散データベース Riak

運用が楽になる 分散データベース Riak

Bashoジャパン株式会社 Software Engineer

佐藤貴彦 2013/07/31 BPStudy#71

Page 2: 運用が楽になる分散データベース Riak

©2013 BASHO TECHNOLOGIES INC. ALL RIGHTS RESERVED.

自己紹介 •  佐藤貴彦

•  2013年7月より Basho ジャパン株式会社

•  前職も製品ベンダーで、RDBMSや分散キャッシュ製品を中心とした、コンサルティングを担当

•  インフラ大好き

•  著書(共著)

•  絵で見てわかるITインフラの仕組み

Page 3: 運用が楽になる分散データベース Riak

©2013 BASHO TECHNOLOGIES INC. ALL RIGHTS RESERVED.

Basho Technologies, Inc •  設立:2008年1月設立

•  本社:マサチューセッツ州ケンブリッジ

•  製品

•  分散データベース Riak

•  分散型クラウドストレージ RiakCS

Page 4: 運用が楽になる分散データベース Riak

©2013 BASHO TECHNOLOGIES INC. ALL RIGHTS RESERVED.

オープンソース版

エンタープライズ版 ・複数クラスター間レプリケーション  ・SNMP  /  JMXサポート  ・Bashoのエンジニアによるサポート  

Riak と Riak CS

分散型クラウドストレージ 分散データベース

Page 5: 運用が楽になる分散データベース Riak

©2013 BASHO TECHNOLOGIES INC. ALL RIGHTS RESERVED.

Page 6: 運用が楽になる分散データベース Riak

©2013 BASHO TECHNOLOGIES INC. ALL RIGHTS RESERVED.

理想のシステム

「どんな故障が起こっても

データを常に整合させつつ

 サービスも止まることはない

 システム」

は存在しません   = CAP定理

Page 7: 運用が楽になる分散データベース Riak

©2013 BASHO TECHNOLOGIES INC. ALL RIGHTS RESERVED.

Riakの設計ポリシー •  Amazon Dynamo論文をベースに設計された分散KVS

•  以下に重点を置いている

•  可用性(Availability)

•  耐障害性(Fault-tolerance)

•  運用の容易性(Operational simplicity)

•  スケーラビリティ(Scalability)

Page 8: 運用が楽になる分散データベース Riak

©2013 BASHO TECHNOLOGIES INC. ALL RIGHTS RESERVED.

Dynamo 論文より •  Dynamo: Amazon’s Highly Available Key-value Store

•  可用性第一:常に書き込みができること → 書き込み時ではなく、読み込み時に整合性チェック → 例:ECサイトで常にショッピングカートを動かしたい

•  一貫性の考え方:Eventual Consistency → AP優先だが、チューニング可能

•  レイテンシの考え方: → 99.9パーセンタイルの応答を一定時間内に返す

Page 9: 運用が楽になる分散データベース Riak

©2013 BASHO TECHNOLOGIES INC. ALL RIGHTS RESERVED.

Riakは Erlang/OTP上で動作 •  クラスタリングやノード間のメッセージングなどは、

Erlang/OTPにまかせている

•  Erlang/OTPとは?

•  元々はエリクソン社が電話交換機プログラムのために開発。 「分散環境」「耐障害性」「無停止動作」を目的とした システムを構築できるように設計されている。

Riakを使ったシステムもこの恩恵を享受できる

Page 10: 運用が楽になる分散データベース Riak

©2013 BASHO TECHNOLOGIES INC. ALL RIGHTS RESERVED.

Riak概要  

Page 11: 運用が楽になる分散データベース Riak

©2013 BASHO TECHNOLOGIES INC. ALL RIGHTS RESERVED.

RiakはRDBではなくKVS •  Riakは永続性を持ったキーバリューストア

•  Key と Value ペアで、データを Bucket に格納する

•  バイナリで格納するため、文字列、画像、あらゆるデータを格納可能

11

Key Value

•  ID: 0001 •  Name: Basho •  Product: Riak •  Logo:

Page 12: 運用が楽になる分散データベース Riak

©2013 BASHO TECHNOLOGIES INC. ALL RIGHTS RESERVED.

RiakのデータとRDBのデータ比較

12

RDBのデータ構造 Riakのデータ構造

Key/Value

Bucket

Key Value

Record(行)

Table (表)

PK

Page 13: 運用が楽になる分散データベース Riak

©2013 BASHO TECHNOLOGIES INC. ALL RIGHTS RESERVED.

Riakノードとは •  1つのRiakノードは、OSプロセス上は1つのErlangプロセス

•  1つの物理サーバーにつき、1Riakノードを起動

•  GCを気にして複数プロセスに分けるといった必要はない

ノード1 ノード2

物理サーバー1 物理サーバー2

Page 14: 運用が楽になる分散データベース Riak

©2013 BASHO TECHNOLOGIES INC. ALL RIGHTS RESERVED.

•  データは Riak によって自動的に分散配置される

•  ユーザーはデータがどこにあるかを意識する必要はない

データの自動分散配置

サーバー何台あっても���気にならないよ!

14

Page 15: 運用が楽になる分散データベース Riak

©2013 BASHO TECHNOLOGIES INC. ALL RIGHTS RESERVED.

自動クラスタリング •  クラスタの参加離脱(サーバーの追加削除)はコマンド

を実行すればあとは自動的に行われる

•  すべてのサーバーは対等な関係(マスターレス)であり 単一障害点(SPOF)が無い

15

クラスタに 参加させて! 僕らは皆対等な

関係です!

Page 16: 運用が楽になる分散データベース Riak

©2013 BASHO TECHNOLOGIES INC. ALL RIGHTS RESERVED.

データの自動再配置 •  サーバー追加時などは自動でデータの再配置が行われる

16

Page 17: 運用が楽になる分散データベース Riak

©2013 BASHO TECHNOLOGIES INC. ALL RIGHTS RESERVED.

•  データの更新時は、異なるRiakノードに自動複製される

•  デフォルト設定では3つのサーバーにデータを保存

•  つまり2重障害(ディスク障害)でもデータが失われない

データの自動レプリケーション

1 2 3

更新

17

Page 18: 運用が楽になる分散データベース Riak

©2013 BASHO TECHNOLOGIES INC. ALL RIGHTS RESERVED.

•  アクセスできないサーバーへの問い合わせはスキップ

•  一時的に他のサーバーが受け持つ

故障ノードの自動回避

しばらく代理を引き受けます 更新

18

1 2 3

Page 19: 運用が楽になる分散データベース Riak

©2013 BASHO TECHNOLOGIES INC. ALL RIGHTS RESERVED.

•  障害などで失われたデータの複製は自動復旧される

データの自動復旧

19

Page 20: 運用が楽になる分散データベース Riak

©2013 BASHO TECHNOLOGIES INC. ALL RIGHTS RESERVED.

クラスタ間自動レプリケーション •  複数のRiakクラスタ間でデータのレプリケーション

•  DRサイトの作成を実現

•  Riak の Enterprise版でのみ提供

関東クラスタ 関西クラスタ(DRサイト)

20

Page 21: 運用が楽になる分散データベース Riak

©2013 BASHO TECHNOLOGIES INC. ALL RIGHTS RESERVED.

つまり

もし夜中にノードが落ちたら? 夜はゆっくり寝て、翌朝対応!

Page 22: 運用が楽になる分散データベース Riak

©2013 BASHO TECHNOLOGIES INC. ALL RIGHTS RESERVED.

Riak  詳細  

Page 23: 運用が楽になる分散データベース Riak

©2013 BASHO TECHNOLOGIES INC. ALL RIGHTS RESERVED.

仮想ノード(vnode) •  Riakノードの内部はさらにvnodeと呼ばれる仮想ノード

•  実際のデータは、Keyから計算されたハッシュ値により処理されるvnodeが決定される

vnode

vnode

vnode

vnode

vnode

vnode

vnode

vnode

Riakノード(OSプロセス)

Page 24: 運用が楽になる分散データベース Riak

©2013 BASHO TECHNOLOGIES INC. ALL RIGHTS RESERVED.

仮想ノード(vnode)のデータ •  vnode内のデータはファイルシステム上に保存される

•  vnodeと同じ数だけ各ノードに配置される

node1 node2 node3 node4

Page 25: 運用が楽になる分散データベース Riak

©2013 BASHO TECHNOLOGIES INC. ALL RIGHTS RESERVED.

1つのパーティションを 1つのvnodeが担当

Riakにおける仮想ノードとRing hash(bucket/key) から160bitのハッシュ値を計算

02 - 1 160

160bitのハッシュ空間を、P個の パーティション(範囲)に分解

vnode

この範囲のデータは 僕が担当します。

Page 26: 運用が楽になる分散データベース Riak

©2013 BASHO TECHNOLOGIES INC. ALL RIGHTS RESERVED.

1つのパーティションを 1つのvnodeが担当

Riakにおける仮想ノードとRing hash(bucket/key) から160bitのハッシュ値を計算

例)P=32 の場合���32個のパーティションを32個のvnodeで配分

160bitのハッシュ空間を、P個の パーティション(範囲)に分解

Ring

vnode

この範囲のデータは 僕が担当します。

02 - 1 160

Page 27: 運用が楽になる分散データベース Riak

©2013 BASHO TECHNOLOGIES INC. ALL RIGHTS RESERVED.

Riakにおける仮想ノードとRing hash(bucket/key) から160bitのハッシュ値を計算

vnode

この範囲のデータは 僕が担当します。

160bitのハッシュ空間を、P個の パーティション(範囲)に分解

Ring

1つのパーティションを 1つのvnodeが担当

node3

node2

node1

node4

02 - 1 160

例)P=32, 4ノードの場合���32個のパーティションを32個のvnodeで配分し、 4つのRiakノードで配分。

Page 28: 運用が楽になる分散データベース Riak

©2013 BASHO TECHNOLOGIES INC. ALL RIGHTS RESERVED.

Riakにおける正常時の挙動  

Page 29: 運用が楽になる分散データベース Riak

©2013 BASHO TECHNOLOGIES INC. ALL RIGHTS RESERVED.

書き込み(put)時の挙動 •  Riakノードにデータがputされるとき、

N個の複製を生成する(default N=3)。

•  複製は隣接するvnodeに保存される。 (隣接するvnodeは必ず異なるRiakノード上にある) → 物理ノード障害に対応

•  W個の保存に成功した時点でクライアントに応答を返す。(default W=2)

•  すべてのノードの応答を待たない。これはレイテンシを短くするため。

RiakClient

node3

node2

node1

node4

put

Page 30: 運用が楽になる分散データベース Riak

©2013 BASHO TECHNOLOGIES INC. ALL RIGHTS RESERVED.

読み込み(get)時の挙動 •  Riakノードからデータをgetする

とき、R個のノードが応答を返した次点で、クライアントに返す(default R=2)

RiakClient

node3

node2

node1

node4

get

Page 31: 運用が楽になる分散データベース Riak

©2013 BASHO TECHNOLOGIES INC. ALL RIGHTS RESERVED.

レプリカの整合性を保つ Quorum-based Protocol

•  put/getや、put/putの競合が発生しても以下の条件を満たせば競合を解決できる

•  W+R > N → put/getが競合しても、get側は必ず最新のオブジェクトを得られる

•  W > N/2 → put/putが競合しても、衝突を知ることができる。

•  Riakのデフォルト値は N=3, W=2, R=2

•  あとはオブジェクトの時間を比較可能

RiakClient

node3

node2

node1

node4

RiakClient

put get

Page 32: 運用が楽になる分散データベース Riak

©2013 BASHO TECHNOLOGIES INC. ALL RIGHTS RESERVED.

整合性を保てる例保てない例

•  N=4, W=3, R=2 の場合 W+R > N , W > N/2 を満たす

•  N=3, W=3, R=1 の場合 W+R > N , W > N/2 を満たす

put

get

put

get

old new

•  N=3, W=2, R=1 の場合 W+R > N を満たしていない

put

get 古いデータを読んでしまうかも

Page 33: 運用が楽になる分散データベース Riak

©2013 BASHO TECHNOLOGIES INC. ALL RIGHTS RESERVED.

オブジェクトの内部時計 Vector Clocks

•  競合が発生した場合、最新オブジェクトを得るには、どのオブジェクトが最新かを比較する必要がある → オブジェクトのバージョン管理

•  各オブジェクトは「誰」が「いつ」更新したを記録する、オブジェクトの世界における時計 Vector Clocks を持っている。

•  オブジェクトの系譜をたどれる

RiakClient

node3

node2

node1

node4

RiakClient

過去 現在

put get

Page 34: 運用が楽になる分散データベース Riak

©2013 BASHO TECHNOLOGIES INC. ALL RIGHTS RESERVED.

put時の競合の解決は? LWWとSiblings

•  put/putの競合が起こった場合、Vector Clocks で新旧判断がつくなら、新しい方を残す。判断がつかない場合は?

•  Last Write Wins → 後から処理された方を残す。

•  Siblings Vector Clocksからは、新旧判断がつかないオブジェクトは、両方共残す。

 

RiakClient

node3

node2

node1

node4

RiakClient

事実はなかったことに…

put put

どちらも最新バージョン

Page 35: 運用が楽になる分散データベース Riak

©2013 BASHO TECHNOLOGIES INC. ALL RIGHTS RESERVED.

Riakにおける障害時の挙動  

Page 36: 運用が楽になる分散データベース Riak

©2013 BASHO TECHNOLOGIES INC. ALL RIGHTS RESERVED.

ノード障害時の書き込み挙動 Hinted Handoff

•  ノード障害が発生して書き込みができない場合、一時的に次のノードに書き込みに行く。この動作を Handoff と呼ぶ。

•  PUT,GET,DELETEリクエストは、フォールバックノードに転送。

put

RiakClient

node3

node2

node1

node4

フォールバックノードに レプリカが保存される

障害中・・・

Page 37: 運用が楽になる分散データベース Riak

©2013 BASHO TECHNOLOGIES INC. ALL RIGHTS RESERVED.

ノード復旧時の書き込み挙動 Hinted Handoff

•  障害ノードが復帰した場合、フォールバックノードから、あずかっていたオブジェクトを受け取る。

node3

node2

node1

node4

復旧しました

Page 38: 運用が楽になる分散データベース Riak

©2013 BASHO TECHNOLOGIES INC. ALL RIGHTS RESERVED.

障害から復旧しなかったら? Read Repair

•  保存データの部分消失があった場合 get時に気がつくことができる。

•  再度複製を生成。

•  vnode間でオブジェクトの最新バージョンを維持しようとする。

node3

node2

node1

node4

RiakClient

get

レプリカ足りない…?

Page 39: 運用が楽になる分散データベース Riak

©2013 BASHO TECHNOLOGIES INC. ALL RIGHTS RESERVED.

自動修復機能 Active Anti-Entropy

•  データの複製が失われた状態を、実際にgetするまで気がつけないことは危険。

•  AAE機能により定期的に自動修復

•  vnode単位でデータのハッシュツリーを持っている。定期的にハッシュ値の比較を行うことで、データ複製間の不整合を検知し、Read Repairを行う。

node3

node2

node1

node4

このvnodeのハッシュだけ 一致しないぞ・・・?

Page 40: 運用が楽になる分散データベース Riak

©2013 BASHO TECHNOLOGIES INC. ALL RIGHTS RESERVED.

Riakデータアクセス  

Page 41: 運用が楽になる分散データベース Riak

©2013 BASHO TECHNOLOGIES INC. ALL RIGHTS RESERVED.

Riakのデータ問い合わせの種類 •  Key/Valueの読み書き

•  セカンダリインデックス(2i)によるタグ付け

•  MapReduceによる分散処理(複雑なクエリ)

•  全文検索

41

get

tagA tagB

put

Page 42: 運用が楽になる分散データベース Riak

©2013 BASHO TECHNOLOGIES INC. ALL RIGHTS RESERVED.

DEMO  

Page 43: 運用が楽になる分散データベース Riak

©2013 BASHO TECHNOLOGIES INC. ALL RIGHTS RESERVED.

RiakCS  ちょっとだけ

Page 44: 運用が楽になる分散データベース Riak

©2013 BASHO TECHNOLOGIES INC. ALL RIGHTS RESERVED.

Riak CS の特徴 •  Riak CS は「分散」オブジェクトストレージ

•  Riakをベースに作られており、Riakの持つ拡張性、可用性、耐障害性、運用容易性をそのまま受け継いでいる

•  Amazon S3 互換のAPI(NFS、CIFSなどのAPIは持たない)

•  Riak CS を使うことで、Amazon S3 互換のクラウドを構築できる

44

Page 45: 運用が楽になる分散データベース Riak

©2013 BASHO TECHNOLOGIES INC. ALL RIGHTS RESERVED.

Riak 上に作られた Riak CS

45

1MB単位に分割してRiakへ

高可用性があって 拡張できる大きなストレージとして使えます

Page 46: 運用が楽になる分散データベース Riak

©2013 BASHO TECHNOLOGIES INC. ALL RIGHTS RESERVED.

まとめ  

Page 47: 運用が楽になる分散データベース Riak

©2013 BASHO TECHNOLOGIES INC. ALL RIGHTS RESERVED.

まとめ

もし夜中にノードが落ちたら? ゆっくり寝て翌朝対応できる。 運用が楽になる分散データベース ���

Page 48: 運用が楽になる分散データベース Riak

©2013 BASHO TECHNOLOGIES INC. ALL RIGHTS RESERVED.

Use  Cases  /  Customers  

Page 49: 運用が楽になる分散データベース Riak

©2013 BASHO TECHNOLOGIES INC. ALL RIGHTS RESERVED.

Riak/Riak CS 適用業界の例 •  小売業(ECサイト)

•  医療

•  広告 / マーケティング

•  モバイルサービス

•  ゲーム

•  メディア

•  ソーシャルネットワーク

•  課金 / 支払い

•  セキュリティ

•  クラウドサービス

大量データの保存が必要な場合はもちろん、非常に高い可用性や耐障害性を求めて弊社製品を使って頂いております!

49

Page 50: 運用が楽になる分散データベース Riak

©2013 BASHO TECHNOLOGIES INC. ALL RIGHTS RESERVED.

Basho ユーザー

50