Skip to content

Latest commit

 

History

History
1117 lines (1024 loc) · 94.3 KB

RELEASE-NOTES.ja.md

File metadata and controls

1117 lines (1024 loc) · 94.3 KB

Riak 2.0.1 リリースノート

クライアント証明書による認証

先日リリースされた2.0以降、Riakでは認証と認可の機能が利用できるようになりました。

2.0.0では誤ったクライアント証明書が受け付けられていましたが、 この問題は2.0.1で修正されました。

マージ済PR

Riak 2.0.0 リリースノート

2.0の主な機能と改善

バージョン 2.0 での新機能の一覧と説明は 公式ドキュメント をご覧ください。関連するドキュメントへのリンクも含まれています。 また、Upgrading to 2.0 Guide もあります。以下は、その技術的な詳細になります。

バケットタイプ

Riakの以前のバージョンではキーを論理的にグループ化する仕組みとしてバケッ トを利用し、特定データの種類とその設定を関連付けていました。Riak 2.0で はバケットタイプの追加により、設定とバケットのグループを関連付けます。 それにより、これはもうひとつの名前空間として振る舞います。

バケットタイプは、その情報をクラスタ内に適切に行き渡らせるため、使用前 に明示的な作成と有効化が必要であります。この点はバケットと異なります。 また consistent および datatype プロパティは作成後の変更ができない ので注意して下さい。これらはそれぞれ Strong Consistency と Riak データ 型に関わる設定で、以下に説明があります。その他のプロパティは変更が可能 です。バケットタイプでグループ化されたバケットはバケットタイプの全プロ パティを継承します。各バケットはプロパティを個別に上書きできますが、上 書きできないプロパティもいくつか存在します。

バケットタイプは riak-admin bucket-type コマンドだけから管理できます。 このコマンドの形式は今後のパッチリリースで変更される可能性があります。 本リリースではコマンドの操作に対応する API は含まれません。しかし、 Bucket Properties HTTP API および Protocol Buffers メッセージ、そして サポートされたクライアントにはバケットタイプ配下のバケットに対する Bucket Propertiesの設定、参照ができるよう更新されています。

バケットタイプに関する詳細は 公式ドキュメント をご覧ください。

収束データ型(Convergent Data Types)

Riak 1.4 では結果整合カウンター(eventually consistent conunter)が Riakへ追加されました。バージョン 2.0 ではこの成果を踏まえ、更なる収束デー タ型(Riak データ型と呼びます)を提供します。これらのデータ型はCRDT[1]で あり、豊富でさらに増加しつつある理論的な研究を基にしています。これまで の Riak は保存された値を不透明なものとしてだけ扱っていましたが、データ 型により、その振る舞いから脱却します。Riakはこれらのデータ型について 「知って」いるのです。具体的には、レプリカの衝突に際して、それを収束さ せる規則を知っています。

データ型を使うには、まず countersetmap のいずれかが datatype プロパティに設定されたバケットタイプが必要です。そして、その バケットタイプに紐付くバケットへ保存する必要があります。注意点として、 そのバケットは allow_mult プロパティとして true を持つことが必要で す。詳細は データ型バケットタイプ のドキュメントをご覧ください。

これらのデータ型は通常のriak_objectに含まれ、 Riakの値に関するサイズ制限はデータ型に対しても適用されます。 以下のデータ型が現状で利用可能です。

Counters

Counterは、型の衝突を起こさないために Riakの新しい bucket type 機能を 利用できることを除いて、1.4 の時と同様に振る舞います。 ドキュメントは ここ. にあります。

Sets

キーに対して複数の区別できる不透明なバイナリ値の保存ができます。 使用方法と用語に関しては ドキュメント をご覧ください。

Maps

Mapはネストされた再帰的な構造体、もしくは連想配列です。これらを複数のデー タタイプから構成されるアドホックなデータ構造のコンテナとみなします。 Mapの内部にはSet、Counter、フラグ(booleanの類似物)、レジスタ(Last Write Winsによりバイナリを保存するもの)や他の Map さえ保存できます。使 用方法と用語に関しては ドキュメント をご覧ください。

API

データ型はこれまでのRiakの操作からのさらなる脱却をもたらします。 それは operation based な API を持っているのです。 これまでは、データ構造を取得し衝突を解消したうえで、その結果を変更し書き戻していましたが、 Riak に対してデータ型へ適用される操作を伝えることになります。

操作の例をいくつか紹介します:

  • "counterを10だけ増やす"
  • "setへ'joe'を追加する",
  • "Mapから 'friends' と呼ばれるSetのフィールドを削除する"
  • "Mapの内にある prepay フラグを true へセットする"
Context

データ型を正確に動かすには read によって得た不透明な context を次の場合に 返さなければなりません

  • フラグを false へ設定した
  • Mapからフィールドを削除した
  • Setから要素を削除した

この基本ルールは「あなたが見ていないものは削除できない」、そして context はRiakにあなたが実際に見たものを伝えます。Javaクライアントを除 き、全ての公式Riakクライアントは不透明contextを扱えます。詳細は ドキュメント をご覧ください。

Mapに関する既知の不具合が2つあります。 後述する 既知の不具合 に目 を通してください。

sibling の抑制

以前のバージョンのRiakでは行儀の良いクライアントでさえ、"sibling explosion"と呼ばれる問題を引き起こすことが普通でした。本質的には、リト ライや入れ子になった書き込みは、クライアントが書き込む前にsiblingsを解 決したとしても、際限の無いsibling増加をもたらす可能性がありました。 vector clockは各書き込みに付与され、クロックは正確に進みますが、各 siblings値に対する因果関係の情報が失われることにより、この問題が発生し ていました。同じ書き込みを起源とする値が重複する可能性があったのです。

Riak 2.0ではこの問題に関する Preguiça、Baquero らの 研究プロトタイプ の 成果を活かし、これに対処しました。各 sibling の書き込みイベントを表すマー カー("dot" と呼びます)を付与することにより、siblingsは **実際の並列数 ** までしか上昇しません。つまり、オブジェクトの書き込み回数や、マージ回 数、他のクラスタへの複製回数には関係しなくなりました。さらなる情報は Dotted Version Vectors のドキュメント参照ください。

riak_control

Search 2 (Yokozuna)

Riak Search は、設計から完全に仕切りなおされました。 それは Yokozuna というコードネームで、開発中にメンテナンスされていた個別の リリースノート があります。Riak 2.0の新しい検索機能に関連する情報はこちらでご覧ください。 さらに3つの公式ドキュメントがあります。

Strong Consistency

Riak の新しい Strong Consistency 機能はオープンソースとなっており、 Riak Enterprise ではサポートされていません。 公式ドキュメントは次のとおりです。

さらに深い技術的な情報はインターナルなドキュメントを参照ください。 ここここ. にあります。

また、既知の問題 に目を通すことを強く推奨します。

Security

Riak 2.0 で認証、認可機能を追加されました。これは異なる環境への誤接続防 止(例:開発中のアプリケーションを本番のクラスタに繋いでしまう)や、悪 意のある攻撃への防衛策に役立ちます。無論、依然としてRiakをセキュアでな いネットワークへ直接公開すべきではありません。

Bashoのドキュメントサイトには この新機能の詳細な説明 があります。またsecurity機能を有効化する際にいくつかの重要な注意点があ ります:

  • まだ監査機能はサポートされていません。これは今後のロードマップに含ま れます。
  • 2つの廃止予定の機能はsecurityを有効化すると動作しません。(link walking、および旧riak search)
  • securityが有効な際に、MapReduceジョブに対して公開されるErlangモジュー ルに制限があります。 その制限は、 ここ で説明されています。
  • securityを有効化する場合はアプリケーション側の対応が必要です。対応の選択肢は、 設定変更中のサーバ応答の違いに対し適切に振る舞よう設計するか、 もしくは セキュリティ有効化前にアプリケーションを一旦停止させ、有効化 後にセキュリティ機能をサポートしたアプリケーションのバージョンをオン ラインに戻すことです。

Packaging / Supported Platforms

2.0 のサポートリストへ多くのプラットフォームが追加されました。

  • FreeBSD 10, with new pkgng format
  • SUSE SLES 11.2
  • Ubuntu 14.04 ('trusty')
  • CentOS/RHEL 7

その他、1.4 から既にサポートされていたプラットフォームで更新されたものがあります。

  • Fedora packages went from a Fedora 17, to Fedora 19 base
  • SmartOS continued to support 1.8 and 13.1 datasets, but dropped 1.6

Apt/Yum Repositories

我々はaptとyumリポジトリを2.0のユーザーへ提供していますが、パッケージを 提供するサービスへの移行をお願いしています。

Packagecloud はapt/yumリポジトリのホス ティングに関わる多くのの苦痛を取り払うことはもちろん、ユーザーのみなさ んに多くの機能を提供する素晴らしいサービスです。みなさんにとって最も重 要な機能はユニバーサルインストーラです。これは対象のOSとバージョンを検 知し、適切なリポジトリとセキュリティキーの自動インストールを提供します。

2.0 パッケージは Packagecloud にホストされる一方で、いまのところ 1.4 パッ ケージは[apt|yum].basho.comに残ります。我々は追加機能によるメリットが、 みなさんのツール内のURL更新に伴うあらゆる苦痛を補うことを願っています。 このような変更をして申し訳ありませんが、これは今後への良き投資であると 考えています。

Client libraries

ほぼすべての Basho サポートのクライアントライブラリ は、2.0 用に更新されています。

PHP ライブラリはまだ更新が終わっていません。予定は決まっていません。

Bitcask

  • 今回データ走査に使うイテレータの複数稼働が可能になりました。以前、 Bitcaskのデータ走査イテレータは一つだけで、これはAAEやfullsyncの処理 をブロックする可能性がありました。また本リリースでは、インメモリのキー ディレクトリは複数のスナップショットが共存し、1つのエントリに複数の 値を持つように修正されました。これはイテレータが頻繁に使われる際に、 メモリを以前より消費することを意味します。
  • リスタート後に削除済みの値が復活する問題を修正。新しいtombstoneフォー マットと削除アルゴリズムに対応するため、ヒントファイルとデータファイ ルのフォーマットが変更されました。マージアルゴリズムの削除マークが付 与されたファイルは、今回setuidビットの代わりにexecutionビットがセット されます。フォーマット変更により、ダウングレードする場合は旧バージョ ンのRiakは新フォーマットのファイル読み込みに失敗するため、ヒントファ イルを削除する必要があります。Riakは新フォーマットファイルを再生成す るため、全てのBitcaskファイルの段階的なマージを実施します。このマージ はmerge window設定に従い、ノードが高負荷にならないように分割して実行 されます。マージは完全にスキップもしくは調整する設定項目がいくつか用 意されています。Bitcaskはマージしてもしなくても正常に動作します。以前 の旧フォーマットファイルの領域解放よりも、Bitcaskが多くの時間を必要と するようになるため、できるだけ早くディスクスペースを解放することがこ の設定の狙いです。
  • 起動中のマージに関する問題を修正。マージは riak_kv サービスの起動ま で延期されます。

HTTP API

歴史的に、Basho のライブラリは Riak アクセスのための HTTP とプロトコルバッファ をどちらもサポートしてきました。 最近まで、HTTP はすべての Riak の機能をサポートしている強みがありました。

今ではプロトコルバッファが機能的に同等となり、またプロトコルバッファが 一般にはより速いことから、Basho は クライアントライブラリだけからは HTTP サポートを取り除きつつあります。 データベースとしての HTTP API を削除する予定はありません。

Python クライアントは HTTP サポートを残していますが、Java、Ruby、 Erlang は HTTP をサポートしません。

廃止予定の機能

Riak 2.0 はいくつかの機能を廃止予定とします。 後述する 廃止される機能 もご覧ください。

  • Link Walking は廃止予定となり、security が有効化されると動作しません。
  • Key Filters は廃止予定です。key listing は、その負荷のため、プロダクション環境で 使うべきではありません。たとえば、キーインデックスを Riak のバリューとして 保存するほうが良い選択肢です。 (このようなインデックスには、新しい set data type が有用です)
  • JavaScript MapReduce は廃止予定です。移行を手助けするため、 Erlang MapReduce ドキュメントはすでに拡充済みです。
  • Riak Search 1.0 は新しい Solr ベースの Riak Search 2.0 を選択したため、段階的に廃止されます。 バージョン 1.0 は security が有効化されると動作しません。
  • v2 レプリケーション (Riak Enterprise の機能です)は v3 に置き換えられ、 将来削除予定です。
  • レガシーゴシップ(Riak の最初のゴシップ機構でしたが、1.0 で置き換えられました) は将来削除予定です。 その時点で 1.0 以前の Riak ノードはクラスタに join 出来なくなります。
  • レガシー vnode ルーティング (サーバ間のリクエスト管理のための初期の仕 組み)は廃止予定です。もし vnode_routing が Riak capability システム により legacy に設定されている場合、将来のアップグレードでの問題を 防ぐため、それを取り除くべきです。
  • 過去に Riak の内部 API (例 riak:local_client/1) を使っているユーザ がいましたが、この API はいつでも変更される可能性があります。代わりに Erlang client library (もしくは いずれかのクライアントライブラリ) を利用することを強く推奨します。

廃止される機能

  • riak-admin backup は廃止されました。バックアップとリストアについて の詳細な手順は ドキュメント をご覧ください。
  • Client ID-based vector clocks は削除されました。 ノードベースの vector clock がより好ましいことから、vnode_vclocks 設定により この機能は以前からデフォルトで停止されていました。
  • LevelDB の設定から cache_sizemax_open_files が廃止されました。 代わりに leveldb.maximum_memory.percent を使ってください。詳細は Configuring eLevelDB をご覧ください。

既知の問題

バージョン 2.0 での既知の問題は この Riak wiki ページ. で 完全なリストを見ることが出来ます。

アップグレードノート

2.0 へアップグレードする完全なドキュメントは 公式のページ にあります。 以下の情報はそれを補完するものです。

インストール後のダウングレード

重要: 2.0 は主要な新機能を導入します。そのうちのいくつかは Riak 1.x と互換ではありません。 そのような機能は bucket types に依存しています。 バケットタイプが ひとつでも 作成され有効化された後には、ダウングレードは できません。

Riak 1.x へダウングレードする前には、必要な手順についての情報のため 2.0 downgrade notes を参照してください。

設定ファイル

1.4 および以前の設定ファイル (app.config and vm.args) から2.0の 新しい設定ファイルへの変換は自動でできません。以前 の設定ファイル app.configvm.args は、設定ファイルのディレクトリ 内にあれば動作しますが、設定のカスタマイズ内容を riak.confadvanced.config へ反映させ、今後の設定を簡単にすることをお勧めします。 追加の情報は configuration files documentation にあります。

バグフィックス / 1.4.x からの変更

下記のリストは1.4.x 2.0間でマージされた全てのPRです。2.0 で追加された次 のリポジトリはこれに含みません。リストに加えてこれらのリポジトリからの 全てのPRにも注意して下さい。

2.0 で追加されたリポジトリ

マージ済PR


[1] http://doi.acm.org/10.1145/2332432.2332497 Nuno Preguiça, Carlos Bauqero, Paulo Sérgio Almeida, Victor Fonte, and Ricardo Gonçalves. 2012. Brief announcement: efficient causality tracking in distributed storage systems with dotted version vectors. In Proceedings of the 2012 ACM symposium on Principles of distributed computing (PODC '12).