30
21

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

MongoDBマネージドサービスの「MongoDB Atlas」の説明

Last updated at Posted at 2016-08-17

MongoDB World 2016にて、MongoDBサービスの「MongoDB Atlas」(モンゴデービーアトラス)が発表された。これは自前でMongoDBを立てる場合とは違って、コンソールからクリックしていくだけでMongoDBのクラスタがAWS上に立ち上がり、利用した分だけ課金されるサービスだ。

ポイント

要はMongoDB Atlasは

  • MongoDB社公式のマネージドサービス
  • アカウント作ってWebで操作すると、AWS上にMongoDBのクラスタが立つ
  • アプリからはインターネット経由でアクセス。プロトコルはMongoDBプロトコル on SSL
  • クラスタの台数変更はWebから可能
  • ノードのスペック変更もWebから可能。これはレプリカセット内でローリングして行われる
  • 監視、アラート、バックアップ・リカバリの機能(=MongoDB Cloud Managerの機能)も使える
  • 利用料課金。最小だと一時間0.08ドル≒10円
  • Atlasのサポートはあるが、MongoDB自体のサポートは料金に含まれない。

詳細

使えるようなので、さっそく使ってみた。

アカウントの登録~ログイン

Atlasを利用するためにはまずアカウントを登録する必要がある。

まず、以下のページにアクセスしてアカウントを作る

キャプチャ0.PNG

Sign Upをクリックする。

キャプチャ.PNG

適宜入力する。Company NameやPhone Numberは実際に電話がかかってくるわけではないので、適当でよい。でCONTINUE。

キャプチャ2.PNG

次にAtlas Groupというグループ名を入力する。今回は「Atlas Lab」とした。

これでログイン完了。

※)既にMongoDB Cloud Manager(旧Ops Manager , 旧MMS)のアカウントがある場合は、そのアカウントではAtlasは使えない模様。詳細確認中。

クラスタの生成

キャプチャ3.PNG

「BUILD A NEW CLUSTER」をクリック

クラスタ名

順次必要な項目を埋めていく。まずはクラスタ名の入力。

キャプチャ21.PNG

デフォルトのままにした。

AWSリージョン

AWSリージョンを選ぶ。リージョンを跨いだクラスタは作れないらしい。そして、現状では「us-east-1」しか選べない。

キャプチャ22.PNG

インスタンスタイプ

インスタンスのタイプを選ぶ。 M10、M20、M30と上がっていく毎にメモリとストレージ容量が変わってくる。おそらくAWSの何かしらのインスタンスに紐づいているだろう。ストレージ容量と暗号化有無はオプションで変えられる。

キャプチャ5.PNG

今回は一番安いM10を選んだ。

レプリカセットの台数

次はレプリカセットの台数選択。3,5,7から選べる。no down-timeと書いてあるから、AWSのアベイラビリティ―ゾーンをまたがってデプロイしてくれるのだろう(きっと)

キャプチャ6.PNG

シャーディングの設定

シャーディングはするか?と聞かれる。ただし、シャーディングをするにはインスタンスのタイプをM50という中程度サイズ以上じゃないと選べない。YESを選択すると、追加で何台でシャーディングするかを選べる。2~12台まで選べる模様。

キャプチャ7.PNG

今回はNOを選んだ(画面とは違います)。

バックアップの設定

バックアップはするかどうか聞かれる。これは昔からあるCloud Managerの機能で、レプリケーションの際の更新ログ(oplog)をバックアップしてポイントインタイムリカバリできる機能だと思われる。バックアップ先はus-east-1リージョンらしい。

キャプチャ8.PNG

今回はNOを選んだ(画面とは違います)。

ログインパスワードの設定

MongoDBにログインする際のパスワードを設定する。これを忘れるとログインできなくなるので注意。

キャプチャ9.PNG

値段の確認

上記の選択肢を選んでいる間に、実は常に金額が表示される。

キャプチャ16.PNG

今回の構成だと一時間0.08ドル

クレジットカードと請求先の登録

最後にクレジットカードと請求先を記載する。

キャプチャ10.PNG

※)おそらく請求先は適当でもOK。MongoDB,Incの社風からして請求書が国際郵便で飛んでくることはありえない。

クラスタの生成を待つ

以下のような画面になるので、node0などの値が具体的になるのを待つ。

キャプチャ11.PNG

MongoDBへの接続元IPアドレスの登録

MongoDB Atlasが生成するMongoDBクラスタはAWS上にでき、インターネット経由でアクセスする。具体的には以下のような接続構成になる。

atlas.png

MongoDB側はMongoDBプロトコルを受け付けるために27017で待ち受けているが、どこからでも受け付けるわけにはいかないので接続元IPを絞っている。そのため接続元IPアドレスを登録してあげる必要がある。

Securityのタブ ⇒ IP WHITELISTのタブと辿って、 ADD IP ADDRESSをクリックする

キャプチャ12.PNG

今回は、自宅のマシンから接続するため、自宅のブロードバンドルーターのグローバルIP(固定IP)を登録した。AWS上のインスタンスから接続する場合は、EIPを付与してそれを登録してあげればよいだろう。

MongoDBへ接続

MongoDBクラスタが立ち上がると、以下のようにノード名が具体的なFQDNになる。こうなれば準備OK

キャプチャ14.PNG

右にあるCONNECTのボタンを押すと、以下の様にMongo ShellとMongoドライバからアクセスする際のサンプルコードが表示される

キャプチャ17.PNG

これをMongo Shell(つまりmongoコマンド)がインストールされた状態で実行する。

今回は以下のようなコマンドになった

$ ./bin/mongo "mongodb://cluster0-shard-00-00-rwogg.mongodb.net:27017,cluster0-shard-00-01-rwogg.mongodb.net:27017,cluster0-shard-00-02-rwogg.mongodb.net:27017/admin?replicaSet=Cluster0-shard-0" --ssl --username fetaro --password XXXX

以下のようにプロンプトがでれば成功だ。

MongoDB shell version: 3.2.9
connecting to: mongodb://cluster0-shard-00-00-rwogg.mongodb.net:27017,cluster0-shard-00-01-rwogg.mongodb.net:27017,cluster0-shard-00-02-rwogg.mongodb.net:27017/admin?replicaSet=Cluster0-shard-0
2016-08-17T23:07:52.359+0900 I NETWORK  [thread1] Starting new replica set monitor for Cluster0-shard-0/cluster0-shard-00-00-rwogg.mongodb.net:27017,cluster0-shard-00-01-rwogg.mongodb.net:27017,cluster0-shard-00-02-rwogg.mongodb.net:27017
2016-08-17T23:07:52.359+0900 I NETWORK  [ReplicaSetMonitorWatcher] starting
Cluster0-shard-0:PRIMARY>

※)ここで、以下の様に--sslオプションが認識できないというエラーが出ることがある。これはMongo ShellがSSLを使えないタイプのものだからだ。

Error parsing command line: unrecognised option '--ssl'
try './bin/mongo --help' for more information

実はMongo ShellにはSSLによる接続ができるバイナリとできないバイナリがある。MongoDBは思想として外部ライブラリを一切使わない単一バイナリで動作することがウリの一つだが、SSLだけはOpenSSLをつかうため、SSLを使う場合だけバイナリが分かれている。

これを解消するには、SSLが有効なバイナリを利用すればよい。

※)ちなみにFQDNをnslookupすればAWS上のインスタンスだとすぐわかる(別に隠してないけど)

$ nslookup cluster0-shard-00-00-rwogg.mongodb.net

Non-authoritative answer:
cluster0-shard-00-00-rwogg.mongodb.net  canonical name = ec2-52-7-33-138.compute-1.amazonaws.com.
Name:   ec2-52-7-33-138.compute-1.amazonaws.com
Address: 52.7.33.138

適当に負荷をかけてみる

1万件のドキュメント配列を作り、それを1万回挿入して様子を観察してみる

Cluster0-shard-0:PRIMARY> for(var i = 0 ; i < 10000; i++){ary.push({"a":1})}  
10000
Cluster0-shard-0:PRIMARY> for(var i = 0 ; i < 10000; i++){ db.hoge.insert(ary) } 

想定通り、ダッシュボード上でクエリが増加しているのが見えた。

キャプチャ18.PNG

ノードをクリックするとさらに詳しく見れる。

キャプチャ19.PNG

インターネット越しだが、秒間で4000件書き込みができているのが分かった。

ちなみに、この機能はAtlas独自のものではなく、自前のMonogoDBにCloud Managerを接続しても同じようなものが見える。

クラスタを変更する

CONFIGURATIONをクリックすると、クラスタの設定変更画面になる

キャプチャ20.PNG

とりあえず試しにインスタンスのタイプをM10からM20に上げてみることにした。

その間、rs.status()でクラスタの状態を見ると、さっきまで元気だったnode1(セカンダリ)が死んでいることが分かる。

ずっと見ていると、以下の順序で処理が行われていった。

  1. node1(セカンダリ)のインスタンス変更
  2. node2(セカンダリ)のインスタンス変更
  3. PRIMARYのフェイルオーバしてnode2がプライマリになる
  4. node0(旧プライマリ)のインスタンス変更

最後にクラスタを壊す

Terminateをクリックすればクラスタが消える

所感

良いと思った点

  • UIが良くできているので、ほぼ迷わずにクラスタの構築・変更ができる。
  • 値段もそこそこであり、MongoDBの構築の人件費を考えると、Atlasを使ったほうがお得な場合も多いだろう。
  • Cloud Managerで管理されるので、監視・アラート・バックアップといった運用関連の機能が一緒ついてる来るのはうれしい。

いまいちな点

インターネット経由でのアクセスになってしまう

せっかくAWSなのだから、自分のVPC内にMongoDBクラスタが立てられて、ローカルの高速な通信だけで利用できる形態になって欲しかった。インターネット経由だと、レイテンシや通信速度がボトルネックになりそう。選択したリージョン内にアプリがあればAWS内の通信で完結するから、まだましだが。

また、いくらSSLで暗号化しソースIPを絞っているからと言って、インターネット経由でDBにアクセスするのは、セキュリティ的に日本ではなかなか受け入れられにくいのではないだろうか。

サポートがない

公式ドキュメントには以下の様に書いてある

Support
Atlas provides support for the use of the service itself. Support for development and > performance of the database itself requires a MongoDB subscription.

訳すと「Atlas自身のサポートはするけど、開発、パフォーマンス、そしてデータベースそのもののサポートはMongoDBサブスクリプションが必要だ。」と書いてある。

結局クラスタ生成後に起きた問題は自分で解決しなければならい。AWSならば+10%ぐらいの料金でそれなりのサポートがついくるのに、MongoDBの場合は高い有償サブスクリプションを買わなければサポートが受けられない。注意が必要だ。

30
21
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
30
21

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?