MongoDB Atlas でマルチリージョンクラスタを起動する

MongpDBのフルマネージドサービス、MongoDB Atlasでマルチリージョンクラスタを起動してみました。
2018.06.28

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、菊池です。

昨日まで開催されていた、MongoDB World'18 では多くの新機能が発表されました。この記事では、新発表ではありませんが、少し前にサポートされた、MongoDB Atlasのマルチリージョンクラスタを起動してみました。

MongoDB Atlas のマルチリージョンクラスタを起動

クラスタの起動

Atlasにログインし、新規のクラスタを起動します。[Configure clusters across multiple regions] を有効にすると、[Deploy across multiple regions] というオプションがありますので、[Add a node] を選択します。

追加するノードのリージョンと台数を選択します。ノードの合計台数を3、5、7のいずれかになるように設定する必要があります。これは、クラスタのスプリットブレインを防止するため、レプリカセットの合計台数を奇数にする必要があるためです。

以下のようにしてみました。マルチリージョンとして東京に2ノード、ソウルに1ノード。さらにRead-only レプリカとしてシンガポールに1ノード追加しています。

クラスタが起動しました。ちなみに、MongoDB Atlasでもすでに、最新のバージョン4.0が利用可能です。

クラスタの詳細を確認すると、設定した通りに3つのリージョンにノードが配置されていることがわかります。

レプリカセット設定

接続して、レプリカセットの設定をみてみました。

MongoDB Enterprise Cluster0-shard-0:PRIMARY> rs.conf()
{
	"_id" : "Cluster0-shard-0",
	"version" : 1,
	"protocolVersion" : NumberLong(1),
	"writeConcernMajorityJournalDefault" : true,
	"members" : [
		{
			"_id" : 0,
			"host" : "cluster0-shard-00-00-mha2s.mongodb.net:27017",
			"arbiterOnly" : false,
			"buildIndexes" : true,
			"hidden" : false,
			"priority" : 7,
			"tags" : {

			},
			"slaveDelay" : NumberLong(0),
			"votes" : 1
		},
		{
			"_id" : 1,
			"host" : "cluster0-shard-00-01-mha2s.mongodb.net:27017",
			"arbiterOnly" : false,
			"buildIndexes" : true,
			"hidden" : false,
			"priority" : 7,
			"tags" : {

			},
			"slaveDelay" : NumberLong(0),
			"votes" : 1
		},
		{
			"_id" : 2,
			"host" : "cluster0-shard-00-02-mha2s.mongodb.net:27017",
			"arbiterOnly" : false,
			"buildIndexes" : true,
			"hidden" : false,
			"priority" : 6,
			"tags" : {

			},
			"slaveDelay" : NumberLong(0),
			"votes" : 1
		},
		{
			"_id" : 3,
			"host" : "cluster0-shard-00-03-mha2s.mongodb.net:27017",
			"arbiterOnly" : false,
			"buildIndexes" : true,
			"hidden" : false,
			"priority" : 0,
			"tags" : {

			},
			"slaveDelay" : NumberLong(0),
			"votes" : 0
		}
	],
	"settings" : {
		"chainingAllowed" : true,
		"heartbeatIntervalMillis" : 2000,
		"heartbeatTimeoutSecs" : 10,
		"electionTimeoutMillis" : 10000,
		"catchUpTimeoutMillis" : -1,
		"catchUpTakeoverDelayMillis" : 30000,
		"getLastErrorModes" : {

		},
		"getLastErrorDefaults" : {
			"w" : 1,
			"wtimeout" : 0
		},
		"replicaSetId" : ObjectId("5b341f2a45929eacec8bb8f5")
	}
}

東京リージョンの2台が、"priority" : 7、ソウルリージョンのノードは"priority" : 6となっていますので、通常は東京リージョンのいずれかのノードがPrimaryとなります。シンガポールリージョンのノードは"priority" : 0となっていますので、Primaryに昇格することはありません。

また、東京リージョン、ソウルリージョンの2台は"votes" : 1となっていますのでPrimary選出を行いますが、シンガポールリージョンのノードは"votes" : 0になりますのでPrimaryの選出にも参加しません。

最後に

MongoDB Atlasのマルチリージョンクラスタを試してみました。フルマネージドサービスだけあって、複数リージョンにまたがったクラスタ構成も簡単に起動することが可能です。

さらに、MongoDB World'18 では、マルチリージョン、マルチクラウドによる、Geo シャードを今後サポートしていくことがアナウンスされました。グローバルに展開するサービスのデータストアとして、非常に楽しみな機能です。