IBM Bluemix を使って DR(Disaster Recovery) 対応のシステムを作る場合、特にデータの保護を意識すると複数の異なるリージョンにデータベースを作り、それらが互いに複製されるような仕組みを用意しておくことになります。その仕組みを Cloudant で実現する場合の設定手順を紹介します。

まず、今回紹介する複製環境は US-SOUTH データセンターと GB-LONDON データセンター間での複製を作るものとします(異なる2点間でも、3点間の場合でも設定の考え方は同様です)。

まずは複製を行うそれぞれのデータセンター(この場合は US-SOUTHGB-LONDON)に Cloudant のサービスインスタンスをそれぞれ作成します(このエントリでは区別しやすくするため US-SOUTH 側を赤GB-LONDON 側を青で記載します):

(US-SOUTH の Cloudant)
2016060201


(GB-LONDON の Cloudant)
2016060202


また、それぞれのデータセンター上の Cloudant の「サービス資格情報」を確認しておきます。特に credentials 内の username, password, url の値は後で使うことになるのでメモするなどしておきます:
2016060208


ここでは以下のような値が設定されていたと仮定して以下の説明を進めていきます。必要に応じて実際の値に読み替えて設定してください:
(US-SOUTH 側)
username: (US_USERNAME)
password: (US_PASSWORD)
url: https://(US_USERNAME):(US_PASSWORD)@(US_HOSTNAME)

(GB-LONDON 側)
username: (GB_USERNAME)
password: (GB_PASSWORD)
url: https://(GB_USERNAME):(GB_PASSWORD)@(GB_HOSTNAME)

次にそれぞれのデータセンター上の Cloudant に複製の対象となるデータベースを作ります。まずはUS-SOUTH 側に作ります。US-SOUTH 側の Cloudant 画面を開き、"LAUNCH" ボタンをクリックします:
2016060203


管理画面が開いたら "Databases" を選択して現在作成されているデータベースの一覧を確認します。そして "Create Database" をクリックして、新たにデータベースを作成します:
2016060204


US-SOUTH 側では mydb_us という名前でデータベースを作成することにします。この名称を入力し、"Create" ボタンをクリック:
2016060205


改めてデータベース一覧を確認し、mydb_us データベースが作成されていることを確認します:
2016060206


同様にして GB-LONDON データセンター側にも mydb_gb という名前のデータベースを作成します(必要であれば3つ目のデータベースも作っておきます)。ではこれからこれらのデータセンターの異なるデータベースが複製されるよう設定を加えていきます:
2016060207


まずは US-SOUTH 側の mydb_us に複製の設定を行います。US-SOUTH 側の Cloudant ダッシュボードのデータベース一覧から mydb_us を選択し、Permission をクリックします。すると現在のパーミッションの設定(作ったばかりなので自分以外のユーザーへのパーミッションが設定されていない状態の設定)が確認できます:
2016060201


この US-SOUTH 側のデータベースに GB-LONDON のユーザーが複製できるようにパーミッションを追加します。具体的な方法としては API KEY を使う方法もありますが、ここでは直接 username を指定してパーミッションの指定を行うことにします。"Grant database permissions to: " と書かれた箇所に GB-LONDON 側の username の値(上記例だと (GB-USERNAME))を指定し、"Grant Permissions" ボタンをクリックします:
2016060202


今追加したユーザーの行がパーミッションとして追加されたはずです。デフォルト状態では _reader 列にだけチェックが付いている状態だと思いますが、複製の権限を与えたいので _replicator 列にもチェックを追加します。これで US-SOUTH のデータベース: mydb_us に対して GB-LONDON のユーザーが複製する権限を持つことが設定できました:
2016060203


同様にして、今度は逆に GB-LONDON のデータベース: mydb_gb に対して US-SOUTH のユーザーが複製する権限を持てるよう設定します。mydb_gb の Permission 設定画面にて (US-USERNAME) ユーザーをリストに追加し、同様にして _replicator 権限を与えてあげます:
2016060204


なお、3箇所のデータセンターで複製を取る場合はそれぞれのデータベースに他の2つのデータベースからのユーザーが複製できるように、それぞれ2つのユーザーを登録して _replicator 権限を与えるようにします。

これで権限の設定は完了しました。次はいよいよ互いのデータベースを複製対象として登録する作業を行います。


ここは最初に US-SOUTH 側の複製設定を追加することにします。US-SOUTH 側の Cloudant ダッシュボードを開き、"Replication" メニューを選択します(最初から "New Replication" が選択された状態になっているはずですが、もし選択されていなかったら "New Replication" をクリックします):
2016060201


US-SOUTH 側の New Replication 画面の各フィールドを以下のように埋めていきます:
 _id: "from_gb"(任意の文字列)
 Source Database: (後述)
 Target Database: "Existing Database" - "My Database" を選び、テキスト欄に "mydb_us" を指定

なお、Source Database ですが、"Remote Database" を選んでテキスト欄に GB-LONDON 側のサービス資格情報に書かれていた url の値に "/mydb_gb" を足したもの(具体的には "https://(GB_USERNAME):(GB_PASSWORD)@(GB_HOSTNAME)/mydb_gb")を指定します。そして "Mark this replication continuous" にチェックを入れて、最後に "Replica Data" をクリックします:
2016060202


複製設定を追加するにはパスワードの入力が求められます。US-SOUTH 側のサービス資格情報に書かれていた password の値(上記例だと US_PASSWORD)を指定して "Continue Replication" ボタンをクリックします:
2016060203


すると入力した内容で Replication 設定文書が作成され、画面に表示されます。これで GB-LONDON から US-SOUTH への複製の設定が完了しました:
2016060204


同様にして逆方向の複製設定を行います。今度は GB-LONDON 側の Cloudant ダッシュボードを開き、"Replication" メニューから新規複製設定文書を作成します。_id には "from_us" 、Source Database は "Remote Database" の US-SOUTH 側のサービス資格情報に書かれていた url の値に "/mydb_us" を足したもの(具体的には "https://(US_USERNAME):(US_PASSWORD)@(US_HOSTNAME)/mydb_us")を指定します。Target Database 欄は "Existing Database" - "My Databases" の "mydb_gb" を、そして "Mark this replication continuous" にチェックを入れて、最後に "Replica Data" をクリックし、GB-LONDON 側のパスワードを入力します:
2016060205


すると GB-LONDON 側にも Replication 文書が作成され、US-SOUTH から GB-LONDON への複製の設定も完了しました。これで双方向に複製が行えます:
2016060206


では最後に実際に片方のデータベースに作った文書がもう片方に複製されるかどうかを確認してみましょう。まず US-SOUTH 側 Cloudant ダッシュボードを開き、mydb_us データベースに文書が格納されていない(# of Docs が 0 件になっている)ことを確認します:
2016060301


次に GB-LONDON 側の Cloudant ダッシュボードを開き、mydb_gb データベースにも文書が格納されていないことを確認した上で、このデータベースを選択して開きます:
2016060302


mydb_gb の All Documents の横にある + 印を選択し、"New Doc" を選んで新しい文書を追加します:
2016060303


新しい文書の中身を JSON フォーマットで適当に編集します。下の例では "name1" 変数の値を"value1"、"name2" 変数の値を 12345 になるよう追加しました("_id" は消さないでください)。編集が済んだら "Create Document" をクリックして、この文書を保存します:
2016060304


これで GB-LONDON 側の mydb_gb データベースには文書が1つ追加されたことになります。mydb_gb の画面からも文書が追加されたことが確認できます。
2016060305


ではこの追加された文書が US-SOUTH 側の mydb_us データベースに複製されていることを確認しましょう。US-SOUTH 側のダッシュボードから mydb_us データベースを選択すると、(複製の設定が正しく行われていれば)直前までは文書は存在していなかったはずなのに1つの文書が追加されていることを確認できるはずです:
2016060306


画面右上の鉛筆マークをクリックすると実際のデータを確認できます。この文書のデータに GB-LONDON 側で作成した時の変数と値が正しく格納されていること(つまりこのデータは GB-LONDON からやってきたこと)が確認できるはずです:
2016060307


同様にして逆方向のデータ複製もできるはずです。これで大西洋をまたいだ Cloudant のデータベース複製が実現できました。