YUKI Hiroshi
null+****@clear*****
Wed Apr 29 23:08:14 JST 2015
YUKI Hiroshi 2015-04-29 23:08:14 +0900 (Wed, 29 Apr 2015) New Revision: 2fd918620770f033ac3b14ecf5f6ee53096381c4 https://github.com/droonga/droonga.org/commit/2fd918620770f033ac3b14ecf5f6ee53096381c4 Message: Update translation of the tutorial to add replica Modified files: _po/ja/tutorial/1.1.0/add-replica/index.po ja/tutorial/1.1.0/add-replica/index.md Modified: _po/ja/tutorial/1.1.0/add-replica/index.po (+225 -122) =================================================================== --- _po/ja/tutorial/1.1.0/add-replica/index.po 2015-04-29 23:08:02 +0900 (3a784a5) +++ _po/ja/tutorial/1.1.0/add-replica/index.po 2015-04-29 23:08:14 +0900 (4834b58) @@ -14,6 +14,10 @@ msgid "" "layout: en\n" "---" msgstr "" +"---\n" +"title: \"Droongaチュートリアル: 既存クラスタへのreplicaの追加\"\n" +"layout: ja\n" +"---" msgid "" "* TOC\n" @@ -21,15 +25,17 @@ msgid "" msgstr "" msgid "## The goal of this tutorial" -msgstr "" +msgstr "## チュートリアルのゴール" msgid "" "Learning steps to add a new replica node, remove an existing replica, and repl" "ace a replica with new one, for your existing [Droonga][] cluster." msgstr "" +"既存の[Droonga][]クラスタについて、新しいreplicaを追加し、既存のreplicaを削除し、および、既存のreplicaを新しいreplica" +"で置き換えるための手順を学ぶこと。" msgid "## Precondition" -msgstr "" +msgstr "## 前提条件" msgid "" "* You must have an existing Droonga cluster with some data.\n" @@ -38,6 +44,10 @@ msgid "" " Please complete the [\"How to backup and restore the database?\" tutorial](../" "dump-restore/) before this." msgstr "" +"* 何らかのデータが格納されている状態の[Droonga][]クラスタがあること。\n" +" このチュートリアルを始める前に、[「使ってみる」のチュートリアル](../groonga/)を完了しておいて下さい。\n" +"* 複数のクラスタの間でのデータの複製方法を把握していること。\n" +" このチュートリアルを始める前に、[バックアップと復元のチュートリアル](../dump-restore/)を完了しておいて下さい。" msgid "" "This tutorial assumes that there are two existing Droonga nodes prepared by th" @@ -47,12 +57,17 @@ msgid "" "If you have Droonga nodes with other names, read `node0`, `node1` and `node2` " "in following descriptions as yours." msgstr "" +"このチュートリアルでは、[最初のチュートリアル](../groonga/)で準備した2つの既存のDroongaノード:`node0` (`192.168.1" +"00.50`) 、 `node1` (`192.168.100.51`) と、新しいノードとして使うもう1台のコンピュータ `node2` (`192.16" +"8.100.52`) があると仮定します。\n" +"あなたの手元にあるDroongaノードがこれとは異なる名前である場合には、以下の説明の中の`node0`、`node1`、`node2`は実際の物に読み替え" +"て下さい。" msgid "## What's \"replica\"?" -msgstr "" +msgstr "## 「replica」とは?" msgid "There are two axes, \"replica\" and \"slice\", for Droonga nodes." -msgstr "" +msgstr "Droongaのノードの集合には、「replica」と「slice」という2つの軸があります。" msgid "" "All \"replica\" nodes have completely equal data, so they can process your reque" @@ -60,6 +75,8 @@ msgid "" "You can increase the capacity of your cluster to process increasing requests, " "by adding new replicas." msgstr "" +"「replica」のノード群は、完全に同一のデータを持っており、検索などのリクエストを各ノードが並行して処理する事ができます\n" +"新しいreplicaを追加する事によって、増加するリクエストに対して処理能力を増強することができます。" msgid "" "On the other hand, \"slice\" nodes have different data, for example, one node co" @@ -67,45 +84,85 @@ msgid "" "You can increase the capacity of your cluster to store increasing data, by add" "ing new slices." msgstr "" +"他方、「slice」のノード群はそれぞれ異なるデータを持ちます(例えば、あるノードは2013年のデータ、別のノードは2014年のデータ、という具合です)。\n" +"新しいsliceを追加する事によって、増大するデータ量に対してクラスタとしての容量を拡大することができます。" msgid "" "Currently, for a Droonga cluster which is configured as a Groonga compatible s" "ystem, only replicas can be added, but slices cannot be done.\n" "We'll improve extensibility for slices in the future." msgstr "" +"現在の所、Groonga互換のシステムとして設定されたDroongaクラスタについては、replicaを追加することはできますが、sliceを追加することは" +"できません。\n" +"この点については将来のバージョンで改善する予定です。" msgid "" "Anyway, this tutorial explains how to add a new replica node to an existing Dr" "oogna cluster.\n" "Here we go!" msgstr "" +"ともかく、このチュートリアルでは既存のDroongaクラスタに新しいreplicaを追加する手順を解説します。\n" +"早速始めましょう。" msgid "## Add a new replica node to an existing cluster" +msgstr "## 既存のクラスタに新しいreplicaノードを追加する" + +msgid "" +"*To do \"hot-add\" (dynamic changing of cluster members without downtime) a new " +"replica to a cluster, you must have two or more existing replicas in the clust" +"er.*\n" +"While the operation is in progress, one of existing replicas becomes the \"sour" +"ce\" to copy data to the newly added replica, and other replicas provide the se" +"rvice." +msgstr "" +"*クラスタへのreplicaノードの「Hot-Add」(サービスのダウンタイム無しでクラスタ構成を動的に変更すること。この場合はreplicaの動的な追加)" +"を行うためには、クラスタ内に2つ以上の既存replicaが存在している必要があります。*\n" +"この操作の進行中は、既存のreplicaのうち1つが新しいreplicaに対する「データのコピー元」となり、それ以外のノードがサービスを提供することになりま" +"す。" + +msgid "" +"If you have only one replica in the cluster, *you must stop any modification o" +"n the database until the operation completely finishes* - cronjob batches, cra" +"wlers, and so on.\n" +"Otherwise, databases in each replica can be irregularity.\n" +"This is the list of typical built-in commands which can modify the database:" msgstr "" +"クラスタ内に既存のreplicaが1つしかない場合には、cronjobによるバッチ処理、クローラなどの*データベースに対する変更操作を、操作が完了するまでの" +"間全て停止しておく必要があります*。\n" +"でないと、追加したreplicaと既存のreplicaの内容に不整合が発生します。\n" +"以下は、データベースに変更を加える代表的な組み込みのコマンドの一覧です:" msgid "" -"In this case you don't have to stop the cluster working, for any read-only req" -"uests like \"search\".\n" -"You can add a new replica, in the backstage, without downing your service." +" * `add`\n" +" * `column_create`\n" +" * `column_remove`\n" +" * `delete`\n" +" * `load`\n" +" * `table_create`\n" +" * `table_remove`" msgstr "" msgid "" -"On the other hand, you have to stop inpouring of new data to the cluster until" -" the new node starts working.\n" -"(In the future we'll provide mechanism to add new nodes completely silently wi" -"thout any stopping of data-flow, but currently can't.)" +"However, messages which never change existing data (like `search`, `system.sta" +"tus`, and others) are still acceptable.\n" +"In short, *you only have to stop your crawler while new replica is being added" +"*, when there is no extra existing replica." msgstr "" +"ただし、既存のデータに一切変更を加えない種類のメッセージ(`search`や`sytem.status`など)については、この操作の間も利用できます。\n" +"端的に言うと、既存のreplicaが1つだけしかない場合は、*新しいreplicaを追加する操作の間はクローリングを停止する必要がある*、という事ですね。" msgid "" "Assume that there is a Droonga cluster constructed with two replica nodes `nod" "e0` and `node1`, and we are going to add a new replica node `node2`." msgstr "" +"ここでは、`node0` と `node1` の2つのreplicaノードからなるDroongaクラスタがあり、新しいreplicaノードとして `node" +"2` を追加すると仮定します。" msgid "### Setup a new node" -msgstr "" +msgstr "### 新しいノードをセットアップする" msgid "First, prepare a new computer, install required softwares and configure them." -msgstr "" +msgstr "まず、新しいコンピュータをセットアップし、必要なソフトウェアのインストールと設定を済ませます。" msgid "" "~~~\n" @@ -124,6 +181,8 @@ msgid "" "If the computer was used as a Droonga node in old days, then you must clear ol" "d data at first." msgstr "" +"注意点として、空でないノードを既存のクラスタに追加することはできません。\n" +"もしそのコンピュータがかつてDroongaノードとして使われていた事があった場合には、最初に古いデータを消去する必要があります。" msgid "" "~~~\n" @@ -138,7 +197,7 @@ msgid "" msgstr "" msgid "Let's start services." -msgstr "" +msgstr "では、サービスを起動しましょう。" msgid "" "~~~\n" @@ -152,6 +211,8 @@ msgid "" "Currently, the new node doesn't work as a node of the existing cluster.\n" "You can confirm that, via the `system.status` command:" msgstr "" +"この時点で、この新しいノードは既存のクラスタのノードとしては動作していません。\n" +"この事は、`system.status`コマンドを通じて確認できます:" msgid "" "~~~\n" @@ -159,82 +220,71 @@ msgid "" "{\n" " \"nodes\": {\n" " \"node0:10031/droonga\": {\n" -" \"live\": true\n" +" \"status\": \"active\"\n" " },\n" " \"node1:10031/droonga\": {\n" -" \"live\": true\n" +" \"status\": \"active\"\n" " }\n" -" }\n" -"}\n" -"$ curl \"http://node1:10041/droonga/system/status\" | jq \".\"\n" -"{\n" -" \"nodes\": {\n" -" \"node0:10031/droonga\": {\n" -" \"live\": true\n" -" },\n" -" \"node1:10031/droonga\": {\n" -" \"live\": true\n" -" }\n" -" }\n" +" },\n" +" \"reporter\": \"...\"\n" "}\n" "$ curl \"http://node2:10041/droonga/system/status\" | jq \".\"\n" "{\n" " \"nodes\": {\n" " \"node2:10031/droonga\": {\n" -" \"live\": true\n" +" \"status\": \"active\"\n" " }\n" -" }\n" +" },\n" +" \"reporter\": \"...\"\n" "}\n" "~~~" msgstr "" -msgid "### Suspend inpouring of \"write\" requests" -msgstr "" - -msgid "" -"Before starting to change cluster composition, you must suspend inpouring of \"" -"write\" requests to the cluster, because we have to synchronize data to the new" -" replica.\n" -"Otherwise, the new added replica will contain incomplete data and results for " -"requests to the cluster become unstable." -msgstr "" +msgid "### Setting up constant inpouring messages" +msgstr "### 継続的に流入するメッセージの準備" msgid "" -"What's \"write\" request?\n" -"In particular, these commands modify data in the cluster:" -msgstr "" - -msgid "" -" * `add`\n" -" * `column_create`\n" -" * `column_remove`\n" -" * `delete`\n" -" * `load`\n" -" * `table_create`\n" -" * `table_remove`" +"If you are reading this tutorial sequentially after the [previous topic](../du" +"mp-restore/), you'll have no inpouring messages to the cluster yet.\n" +"To try hot-adding, let's prepare a virtual data source which adds new records " +"constantly, like:" msgstr "" +"[前の項目](../dump-restore/)に引き続いてこのチュートリアルを順番に読み進めている場合、クラスタに対してはデータの流入がまだ無い状態になっ" +"ているはずです。\n" +"Hot-Addを試してみるために、以下のようにして、継続的に新しいレコードを追加する仮想的なデータソースを準備しましょう:" msgid "" -"If you load new data via the `load` command triggered by a batch script starte" -"d as a cronjob, disable the job.\n" -"If a crawler agent adds new data via the `add` command, stop it.\n" -"If you put a fluentd as a buffer between crawler or loader and the cluster, st" -"op outgoing messages from the buffer." +"~~~\n" +"(on node0)\n" +"$ count=0; maxcount=500; \\\n" +" while [ \"$count\" -lt \"$maxcount\" ]; \\\n" +" do \\\n" +" droonga-add --host node0 --table Store --key \"dummy-store$count\" --name \"D" +"ummy Store $count\"; \\\n" +" count=$(($count + 1)); \\\n" +" sleep 1; \\\n" +" done\n" +"~~~" msgstr "" msgid "" -"If you are reading this tutorial sequentially after the [previous topic](../du" -"mp-restore/), there is no incoming requests, so you have nothing to do." +"This is an example to add totally 500 records (1 record for every seconds.)\n" +"`droonga-add` is one of Droonga's command line utilities, but currently you do" +"n't have to know details." msgstr "" +"これは、合計で500件のレコードを1秒ごとに1レコードずつ追加する例です。\n" +"`droonga-add`はDroongaが提供しているコマンドラインユーティリティですが、今のところは詳細について理解していなくても大丈夫です。" msgid "### Joining a new replica node to the cluster" -msgstr "" +msgstr "### 新しいreplicaをクラスタに参加させる" msgid "" -"To add a new replica node to an existing cluster, you just run a command `droo" -"nga-engine-join` on one of existing replica nodes or the new replica node, in " -"the directory the `catalog.json` is located, like:" +"To add a new replica node to an existing cluster, you just run the command `dr" +"oonga-engine-join` on one of existing replica nodes or the new replica node, l" +"ike:" msgstr "" +"既存のクラスタに新しいreplicaを追加するには、いずれかの既存のreplicaまたは新しく追加するreplicaの上で、`droonga-engine-" +"join`というコマンドを以下のようにして実行します:" msgid "" "~~~\n" @@ -244,20 +294,34 @@ msgid "" " --receiver-host=node2\n" "Start to join a new node node2\n" " to the cluster of node0\n" -" via node2 (this host)" +" via node2 (this host)\n" +" port = 10031\n" +" tag = droonga\n" +" dataset = Default" +msgstr "" + +msgid "Source Cluster ID: 8951f1b01583c1ffeb12ed5f4093210d28955988" msgstr "" msgid "" -"Joining new replica to the cluster...\n" -"...\n" -"Update existing hosts in the cluster...\n" -"...\n" +"Changing role of the joining node...\n" +"Configuring the joining node as a new replica for the cluster...\n" +"Registering new node to existing nodes...\n" +"Changing role of the source node...\n" +"Getting the timestamp of the last processed message in the source node...\n" +"The timestamp of the last processed message at the source node: xxxx-xx-xxTxx:" +"xx:xx.xxxxxxZ\n" +"Setting new node to ignore messages older than the timestamp...\n" +"Copying data from the source node...\n" +"100% done (maybe 00:00:00 remaining)\n" +"Restoring role of the source node...\n" +"Restoring role of the joining node...\n" "Done.\n" "~~~" msgstr "" msgid "You can run the command on different node, like:" -msgstr "" +msgstr "このコマンドは、以下のようにして別のノード上で実行することもできます:" msgid "" "~~~\n" @@ -268,6 +332,7 @@ msgid "" "Start to join a new node node2\n" " to the cluster of node0\n" " via node1 (this host)\n" +"...\n" "~~~" msgstr "" @@ -279,20 +344,27 @@ msgid "" " * You must specify the host name (or the IP address) of the working machine v" "ia the `--receiver-host` option." msgstr "" +" * `--host` オプションで、その新しいreplicaノードのホスト名(またはIPアドレス)を指定して下さい。\n" +" * `--replica-source-host` オプションで、クラスタ中の既存のノードの1つのホスト名(またはIPアドレス)を指定して下さい。\n" +" * `--receiver-host` オプションで、コマンドを実行しているマシン自身のホスト名(またはIPアドレス)を必ず指定して下さい。" msgid "" "Then the command automatically starts to synchronize all data of the cluster t" "o the new replica node.\n" -"After data is successfully synchronized, the node restarts and joins to the cl" -"uster automatically.\n" -"All nodes' `catalog.json` are also updated, and now, yes, the new node starts " -"working as a replica in the cluster." +"After all data is successfully synchronized, the new node starts working as a " +"replica in the cluster seamlessly." msgstr "" +"すると、このコマンドは自動的にクラスタ内のデータを新しいreplicaに同期し始めます。\n" +"全てのデータを無事に同期し終えたら、新しいノードはクラスタのreplicaとしてそのまま働き始めます。" msgid "" +"With that, a new replica node has successfully joined to your Droonga cluster." +"\n" "You can confirm that they are working as a cluster, via the `system.status` co" "mmand:" msgstr "" +"以上の操作で、新しいreplicaノードがDroongaクラスタへ無事に追加されました。\n" +"`system.status`コマンドを使って、これらのノードがクラスタとして動作していることを確かめましょう:" msgid "" "~~~\n" @@ -300,15 +372,16 @@ msgid "" "{\n" " \"nodes\": {\n" " \"node0:10031/droonga\": {\n" -" \"live\": true\n" +" \"status\": \"active\"\n" " },\n" " \"node1:10031/droonga\": {\n" -" \"live\": true\n" +" \"status\": \"active\"\n" " },\n" " \"node2:10031/droonga\": {\n" -" \"live\": true\n" +" \"status\": \"active\"\n" " }\n" -" }\n" +" },\n" +" \"reporter\": \"...\"\n" "}\n" "~~~" msgstr "" @@ -317,23 +390,44 @@ msgid "" "Because the new node `node2` has become a member of the cluster, `droonga-http" "-server` on each node distributes messages to `node2` also automatically." msgstr "" +"新しいノード`node2`がクラスタに参加したため、各ノードの`droonga-http-server`は自動的に、メッセージを`node2`にも分配するよ" +"うになります。" -msgid "### Resume inpouring of \"write\" requests" +msgid "" +"Equivalence of all replicas can be confirmed with the command `system.statisti" +"cs.object.count.per-volume`, like:" msgstr "" +"全てのreplicaが同等になっているかどうかは、`system.statistics.object.count.per-volume`を使って以下のように" +"確かめられます:" msgid "" -"OK, it's the time.\n" -"Because all replica nodes are completely synchronized, the cluster now can pro" -"cess any request stably.\n" -"Resume inpouring of requests which can modify the data in the cluster - cronjo" -"bs, crawlers, buffers, and so on." +"~~~\n" +"(on node0)\n" +"$ curl \"http://node0:10041/droonga/system/statistics/object/count/per-volume?o" +"utput\\[\\]=total\" | jq \".\"\n" +"{\n" +" \"node0:10031/droonga.000\": {\n" +" \"total\": 540\n" +" },\n" +" \"node1:10031/droonga.000\": {\n" +" \"total\": 540\n" +" },\n" +" \"node2:10031/droonga.000\": {\n" +" \"total\": 540\n" +" }\n" +"}\n" +"~~~" msgstr "" -msgid "With that, a new replica node has joined to your Droonga cluster successfully." +msgid "" +"Those numbers indicates how many objects are stored in each node.\n" +"Because all values are same, they replicas are equal to each other." msgstr "" +"出力されている数値は、各ノードのデータベースに何個のオブジェクトが保持されているかを示しています。\n" +"全ての値が同じなので、各レプリカはお互いに同等の状態になっているということが分かります。" msgid "## Remove an existing replica node from an existing cluster" -msgstr "" +msgstr "## 既存のクラスタからreplicaノードを削除する" msgid "" "A Droonga node can die by various fatal reasons - for example, OOM killer, dis" @@ -343,38 +437,45 @@ msgid "" " are some dead nodes.\n" "Then you have to remove dead nodes from the cluster." msgstr "" +"Droongaノードは、メモリ不足、ディスク容量不足、ハードウェア障害など、様々な致命的な理由によって動作しなくなり得ます。\n" +"Droongaクラスタ内のノードは互いに監視しあっており、動作しなくなったノードに対してはメッセージの配送を自動的に停止して、動作しないノードがあってもクラ" +"スタ全体としては動作し続けるようになっています。\n" +"このような時には、動作していないノードを取り除く必要があります。" msgid "" "Of course, even if a node is still working, you may plan to remove it to reuse" " for another purpose." -msgstr "" +msgstr "もちろん、他の目的に転用したいといった理由から、正常動作中のノードを取り除きたいと考える場合もあるでしょう。" msgid "" "Assume that there is a Droonga cluster constructed with trhee replica nodes `n" "ode0`, `node1` and `node2`, and planning to remove the last node `node2` from " "the cluster." msgstr "" +"ここでは、`node0` 、 `node1` 、`node2` の3つのreplicaノードからなるDroongaクラスタがあり、最後のノード `node2" +"` をクラスタから離脱させようとしていると仮定します。" msgid "### Unjoin an existing replica from the cluster" -msgstr "" +msgstr "### 既存のreplicaをクラスタから分離する" msgid "" "To remove a replica from an existing cluster, you just run the `droonga-engine" "-unjoin` command on any existing node in the cluster, like:" msgstr "" +"replicaノードを既存のクラスタから削除するには、クラスタ内のいずれかのノードの上で、以下のようにして `droonga-engine-unjoin` " +"コマンドを実行します:" msgid "" "~~~\n" "(on node0)\n" "$ droonga-engine-unjoin --host=node2 \\\n" " --receiver-host=node0\n" -"Start to unjoin a node node2\n" +"Start to unjoin a node node2:10031/droonga\n" " by node0 (this host)" msgstr "" msgid "" "Unjoining replica from the cluster...\n" -"...\n" "Done.\n" "~~~" msgstr "" @@ -385,17 +486,18 @@ msgid "" " * You must specify the host name (or the IP address) of the working machine v" "ia the `--receiver-host` option." msgstr "" +" * `--host` オプションで、クラスタから削除するノードのホスト名(またはIPアドレス)を指定して下さい。\n" +" * `--receiver-host` オプションで、コマンドを実行しているマシン自身のホスト名(またはIPアドレス)を必ず指定して下さい。" -msgid "" -"Then the specified node automatically unjoins from the cluster, and all nedes'" -" `catalog.json` are also updated.\n" -"Now, the node has been successfully unjoined from the cluster." -msgstr "" +msgid "Then the specified node automatically unjoins from the cluster." +msgstr "すると、指定されたノードがクラスタから自動的に離脱します。" msgid "" -"You can confirm that the `node2` is successfully unjoined, via the `system.sta" -"tus` command:" +"Now, the node has been successfully unjoined from the cluster.\n" +"You can confirm that the `node2` is unjoined, via the `system.status` command:" msgstr "" +"これで、ノードのクラスタからの切り離しは無事に完了しました。\n" +"`node2`が本当にクラスタから離脱しているかどうかは、`system.status コマンドを使って以下のように確かめられます:" msgid "" "Because the node `node2` is not a member of the cluster anymore, `droonga-http" @@ -404,23 +506,29 @@ msgid "" "On the other hand, because `droonga-http-server` on `node2` is associated only" " to the `droonga-engine` on same node, it never sends messages to other nodes." msgstr "" +"ノード`node2`はもはやクラスタの一員ではないため、`node0`と`node1`の`droonga-http-server`は`node2`の`dro" +"onga-engine`へはもうメッセージを送りません。\n" +"またその一方で、`node2`の`droonga-http-server`はそのノード上の`droonga-engine`にのみ関連付けられており、他のノー" +"ドへはメッセージを送りません。" msgid "## Replace an existing replica node in a cluster with a new one" -msgstr "" +msgstr "## クラスタ内の既存のreplicaノードを新しいreplicaノードで置き換える" msgid "Replacing of nodes is a combination of those instructions above." -msgstr "" +msgstr "ノードの置き換えは、上記の手順の組み合わせで行います。" msgid "" "Assume that there is a Droonga cluster constructed with two replica nodes `nod" "e0` and `node1`, the node `node1` is unstable, and planning to replace it with" " a new node `node2`." msgstr "" +"ここでは、`node0` と `node1` の2つのreplicaノードからなるDroongaクラスタがあり、`node1` が不安定で、それを新しいre" +"plicaノード `node2` で置き換えようとしていると仮定します。" msgid "" "First, remove the unstable node.\n" "Remove the node from the cluster, like:" -msgstr "" +msgstr "まず、不安定になっているノードを取り除きます。以下のようにしてクラスタからノードを離脱させて下さい:" msgid "" "~~~\n" @@ -432,7 +540,7 @@ msgstr "" msgid "" "Now the node has been gone.\n" "You can confirm that via the `system.status` command:" -msgstr "" +msgstr "これで、ノードがクラスタから離脱しました。この事は `system.status` コマンドで確かめられます:" msgid "" "~~~\n" @@ -440,28 +548,31 @@ msgid "" "{\n" " \"nodes\": {\n" " \"node0:10031/droonga\": {\n" -" \"live\": true\n" +" \"status\": \"active\"\n" " }\n" -" }\n" +" },\n" +" \"reporter\": \"...\"\n" "}\n" "~~~" msgstr "" msgid "### Add a new replica" -msgstr "" +msgstr "### 新しいreplicaを追加する" msgid "" "Next, setup the new replica `node2`.\n" "Install required packages, generate the `catalog.json`, and start services." msgstr "" +"次に、新しいreplica `node2`を用意します。\n" +"必要なパッケージをインストールし、`catalog.json`を生成して、サービスを起動します。" msgid "" "If the computer was used as a Droonga node in old days, then you must clear ol" "d data instead of installation:" -msgstr "" +msgstr "そのコンピュータがかつてDroongaノードの一員だったことがある場合は、インストール作業の代わりに、古いデータを消去する必要があります:" msgid "Then, join the node to the cluster." -msgstr "" +msgstr "そうしたら、そのノードをクラスタに参加させましょう。" msgid "" "~~~\n" @@ -474,10 +585,10 @@ msgstr "" msgid "" "Finally a Droonga cluster constructed with two nodes `node0` and `node2` is he" "re." -msgstr "" +msgstr "最終的に、`node0` と `node2` の2つのノードからなるDroongaクラスタができあがりました。" msgid "You can confirm that, via the `system.status` command:" -msgstr "" +msgstr "この事は、`system.status` コマンドの結果を見ると確認できます:" msgid "" "~~~\n" @@ -485,29 +596,19 @@ msgid "" "{\n" " \"nodes\": {\n" " \"node0:10031/droonga\": {\n" -" \"live\": true\n" +" \"status\": \"active\"\n" " },\n" " \"node2:10031/droonga\": {\n" -" \"live\": true\n" +" \"status\": \"active\"\n" " }\n" -" }\n" -"}\n" -"$ curl \"http://node2:10041/droonga/system/status\" | jq \".\"\n" -"{\n" -" \"nodes\": {\n" -" \"node0:10031/droonga\": {\n" -" \"live\": true\n" -" },\n" -" \"node2:10031/droonga\": {\n" -" \"live\": true\n" -" }\n" -" }\n" +" },\n" +" \"reporter\": \"...\"\n" "}\n" "~~~" msgstr "" msgid "## Conclusion" -msgstr "" +msgstr "## まとめ" msgid "" "In this tutorial, you did add a new replica node to an existing [Droonga][] cl" @@ -515,6 +616,8 @@ msgid "" "Moreover, you did remove an existing replica, and did replace a replica with a" " new one." msgstr "" +"このチュートリアルでは、既存の[Droonga][]クラスタに新しいreplicaノードを追加する方法を学びました。\n" +"また、既存のreplicaを取り除く方法と、既存のreplicaを新しいreplicaで置き換える方法も学びました。" msgid "" " [Ubuntu]: http://www.ubuntu.com/\n" Modified: ja/tutorial/1.1.0/add-replica/index.md (+102 -94) =================================================================== --- ja/tutorial/1.1.0/add-replica/index.md 2015-04-29 23:08:02 +0900 (db3425e) +++ ja/tutorial/1.1.0/add-replica/index.md 2015-04-29 23:08:14 +0900 (2715308) @@ -47,11 +47,23 @@ Droongaのノードの集合には、「replica」と「slice」という2つの ## 既存のクラスタに新しいreplicaノードを追加する -このケースでは、検索のように読み取りのみを行うリクエストに対しては、クラスタの動作を止める必要はありません。 -サービスを停止することなく、その裏側でシームレスに新しいreplicaを追加することができます。 +*クラスタへのreplicaノードの「Hot-Add」(サービスのダウンタイム無しでクラスタ構成を動的に変更すること。この場合はreplicaの動的な追加)を行うためには、クラスタ内に2つ以上の既存replicaが存在している必要があります。* +この操作の進行中は、既存のreplicaのうち1つが新しいreplicaに対する「データのコピー元」となり、それ以外のノードがサービスを提供することになります。 -その一方で、クラスタへの新しいデータの流入は、新しいノードが動作を始めるまでの間停止しておく必要があります。 -(将来的には、新しいノードを完全に無停止で追加できるようにする予定ですが、今のところはそれはできません。) +クラスタ内に既存のreplicaが1つしかない場合には、cronjobによるバッチ処理、クローラなどの*データベースに対する変更操作を、操作が完了するまでの間全て停止しておく必要があります*。 +でないと、追加したreplicaと既存のreplicaの内容に不整合が発生します。 +以下は、データベースに変更を加える代表的な組み込みのコマンドの一覧です: + + * `add` + * `column_create` + * `column_remove` + * `delete` + * `load` + * `table_create` + * `table_remove` + +ただし、既存のデータに一切変更を加えない種類のメッセージ(`search`や`sytem.status`など)については、この操作の間も利用できます。 +端的に言うと、既存のreplicaが1つだけしかない場合は、*新しいreplicaを追加する操作の間はクローリングを停止する必要がある*、という事ですね。 ここでは、`node0` と `node1` の2つのreplicaノードからなるDroongaクラスタがあり、新しいreplicaノードとして `node2` を追加すると仮定します。 @@ -96,58 +108,47 @@ $ curl "http://node0:10041/droonga/system/status" | jq "." { "nodes": { "node0:10031/droonga": { - "live": true + "status": "active" }, "node1:10031/droonga": { - "live": true + "status": "active" } - } -} -$ curl "http://node1:10041/droonga/system/status" | jq "." -{ - "nodes": { - "node0:10031/droonga": { - "live": true - }, - "node1:10031/droonga": { - "live": true - } - } + }, + "reporter": "..." } $ curl "http://node2:10041/droonga/system/status" | jq "." { "nodes": { "node2:10031/droonga": { - "live": true + "status": "active" } - } + }, + "reporter": "..." } ~~~ -### 書き込みを伴うリクエストの流入を一時的に停止する - -新しいreplicaとの間でデータを完全に同期する必要があるので、クラスタの構成を変更する前に、クラスタへのデータの書き込みを行うリクエストの流入を一時停止する必要があります。 -そうしないと、新しく追加したreplicaが中途半端なデータしか持たない矛盾した状態となってしまい、リクエストに対してクラスタが返す処理結果が不安定になります。 - -データの書き込みを伴うリクエストとは、具体的には、クラスタ内のデータを変更する以下のコマンドです: +### 継続的に流入するメッセージの準備 - * `add` - * `column_create` - * `column_remove` - * `delete` - * `load` - * `table_create` - * `table_remove` +[前の項目](../dump-restore/)に引き続いてこのチュートリアルを順番に読み進めている場合、クラスタに対してはデータの流入がまだ無い状態になっているはずです。 +Hot-Addを試してみるために、以下のようにして、継続的に新しいレコードを追加する仮想的なデータソースを準備しましょう: -cronjobとして実行されるバッチスクリプトによって `load` コマンド経由で新しいデータを投入している場合は、cronjobを停止して下さい。 -クローラが `add` コマンド経由で新しいデータを投入している場合は、クローラを停止して下さい。 -あるいは、クローラやローダーとクラスタの間にFluentdを置いてバッファとして利用しているのであれば、バッファからのメッセージ出力を停止して下さい。 +~~~ +(on node0) +$ count=0; maxcount=500; \ + while [ "$count" -lt "$maxcount" ]; \ + do \ + droonga-add --host node0 --table Store --key "dummy-store$count" --name "Dummy Store $count"; \ + count=$(($count + 1)); \ + sleep 1; \ + done +~~~ -[前項](../dump-restore/)から順番にチュートリアルを読んでいる場合、クラスタに流入しているリクエストはありませんので、ここでは特に何もする必要はありません。 +これは、合計で500件のレコードを1秒ごとに1レコードずつ追加する例です。 +`droonga-add`はDroongaが提供しているコマンドラインユーティリティですが、今のところは詳細について理解していなくても大丈夫です。 ### 新しいreplicaをクラスタに参加させる -新しいreplicaノードを既存のクラスタに追加するには、いずれかの既存のノードもしくは新しいreplicaノードのいずれかにおいて、`catalog.json` が置かれているディレクトリで、`droonga-engine-join` コマンドを実行します: +既存のクラスタに新しいreplicaを追加するには、いずれかの既存のreplicaまたは新しく追加するreplicaの上で、`droonga-engine-join`というコマンドを以下のようにして実行します: ~~~ (on node2) @@ -157,11 +158,23 @@ $ droonga-engine-join --host=node2 \ Start to join a new node node2 to the cluster of node0 via node2 (this host) - -Joining new replica to the cluster... -... -Update existing hosts in the cluster... -... + port = 10031 + tag = droonga + dataset = Default + +Source Cluster ID: 8951f1b01583c1ffeb12ed5f4093210d28955988 + +Changing role of the joining node... +Configuring the joining node as a new replica for the cluster... +Registering new node to existing nodes... +Changing role of the source node... +Getting the timestamp of the last processed message in the source node... +The timestamp of the last processed message at the source node: xxxx-xx-xxTxx:xx:xx.xxxxxxZ +Setting new node to ignore messages older than the timestamp... +Copying data from the source node... +100% done (maybe 00:00:00 remaining) +Restoring role of the source node... +Restoring role of the joining node... Done. ~~~ @@ -175,45 +188,59 @@ $ droonga-engine-join --host=node2 \ Start to join a new node node2 to the cluster of node0 via node1 (this host) +... ~~~ * `--host` オプションで、その新しいreplicaノードのホスト名(またはIPアドレス)を指定して下さい。 * `--replica-source-host` オプションで、クラスタ中の既存のノードの1つのホスト名(またはIPアドレス)を指定して下さい。 * `--receiver-host` オプションで、コマンドを実行しているマシン自身のホスト名(またはIPアドレス)を必ず指定して下さい。 -コマンドを実行すると、自動的に、クラスタのデータが新しいreplicaノードへと同期され始めます。 -データの同期が完了すると、ノードが自動的に再起動してクラスタに参加します。 -すべてのノードの`catalog.json`も同時に更新され、この時点をもって、新しいノードは晴れてそのクラスタのreplicaノードとして動作し始めます。 +すると、このコマンドは自動的にクラスタ内のデータを新しいreplicaに同期し始めます。 +全てのデータを無事に同期し終えたら、新しいノードはクラスタのreplicaとしてそのまま働き始めます。 -これで、ノードがクラスタに参加しました。この事は `system.status` コマンドで確かめられます: +以上の操作で、新しいreplicaノードがDroongaクラスタへ無事に追加されました。 +`system.status`コマンドを使って、これらのノードがクラスタとして動作していることを確かめましょう: ~~~ $ curl "http://node0:10041/droonga/system/status" | jq "." { "nodes": { "node0:10031/droonga": { - "live": true + "status": "active" }, "node1:10031/droonga": { - "live": true + "status": "active" }, "node2:10031/droonga": { - "live": true + "status": "active" } - } + }, + "reporter": "..." } ~~~ 新しいノード`node2`がクラスタに参加したため、各ノードの`droonga-http-server`は自動的に、メッセージを`node2`にも分配するようになります。 +全てのreplicaが同等になっているかどうかは、`system.statistics.object.count.per-volume`を使って以下のように確かめられます: -### 書き込みを伴うリクエストの流入を再開する - -さて、準備ができました。 -すべてのreplicaは完全に同期した状態となっているので、このクラスタはリクエストを安定して処理できます。 -cronjobを有効化する、クローラの動作を再開する、バッファからのメッセージ送出を再開する、などの操作を行って、クラスタ内のデータを変更するリクエストの流入を再開して下さい。 +~~~ +(on node0) +$ curl "http://node0:10041/droonga/system/statistics/object/count/per-volume?output\[\]=total" | jq "." +{ + "node0:10031/droonga.000": { + "total": 540 + }, + "node1:10031/droonga.000": { + "total": 540 + }, + "node2:10031/droonga.000": { + "total": 540 + } +} +~~~ -以上で、Droongaクラスタに新しいreplicaノードを無事参加させる事ができました。 +出力されている数値は、各ノードのデータベースに何個のオブジェクトが保持されているかを示しています。 +全ての値が同じなので、各レプリカはお互いに同等の状態になっているということが分かります。 ## 既存のクラスタからreplicaノードを削除する @@ -234,52 +261,42 @@ replicaノードを既存のクラスタから削除するには、クラスタ (on node0) $ droonga-engine-unjoin --host=node2 \ --receiver-host=node0 -Start to unjoin a node node2 +Start to unjoin a node node2:10031/droonga by node0 (this host) Unjoining replica from the cluster... -... Done. ~~~ * `--host` オプションで、クラスタから削除するノードのホスト名(またはIPアドレス)を指定して下さい。 * `--receiver-host` オプションで、コマンドを実行しているマシン自身のホスト名(またはIPアドレス)を必ず指定して下さい。 -すると、ノードがクラスタから自動的に離脱し、すべてのノードの `catalog.json` も同時に更新されます。 -これで、ノードはクラスタから無事離脱しました。 +すると、指定されたノードがクラスタから自動的に離脱します。 -`node2` が本当にクラスタから離脱しているかどうかは `system.status` コマンドで確かめられます: +これで、ノードのクラスタからの切り離しは無事に完了しました。 +`node2`が本当にクラスタから離脱しているかどうかは、`system.status コマンドを使って以下のように確かめられます: ~~~ $ curl "http://node0:10041/droonga/system/status" | jq "." { "nodes": { "node0:10031/droonga": { - "live": true - }, - "node1:10031/droonga": { - "live": true - } - } -} -$ curl "http://node1:10041/droonga/system/status" | jq "." -{ - "nodes": { - "node0:10031/droonga": { - "live": true + "status": "active" }, "node1:10031/droonga": { - "live": true + "status": "active" } - } + }, + "reporter": "..." } $ curl "http://node2:10041/droonga/system/status" | jq "." { "nodes": { "node2:10031/droonga": { - "live": true + "status": "active" } - } + }, + "reporter": "..." } ~~~ @@ -310,9 +327,10 @@ $ curl "http://node0:10041/droonga/system/status" | jq "." { "nodes": { "node0:10031/droonga": { - "live": true + "status": "active" } - } + }, + "reporter": "..." } ~~~ @@ -358,23 +376,13 @@ $ curl "http://node0:10041/droonga/system/status" | jq "." { "nodes": { "node0:10031/droonga": { - "live": true - }, - "node2:10031/droonga": { - "live": true - } - } -} -$ curl "http://node2:10041/droonga/system/status" | jq "." -{ - "nodes": { - "node0:10031/droonga": { - "live": true + "status": "active" }, "node2:10031/droonga": { - "live": true + "status": "active" } - } + }, + "reporter": "..." } ~~~ -------------- next part -------------- HTML����������������������������...다운로드