ポイント: MongoDBクラスターの設定には、設定サーバー、クエリルーター、シャードサーバーのインストールが含まれます。このプロセスには、各サーバーの構成、適切なネットワーキングの確保、およびデータ分散のためのシャーディングの有効化が含まれます。主なステップには、構成ファイルの編集、サービスの開始、エラーのためのログのチェックが含まれます。詳細な手順については、提供された手順と追加のMongoDBリソースへのリンクに従ってください。
- 設定サーバー、クエリルーター、シャードサーバーをインストールします。
- クラスター全体でのデータ分散のためにシャーディングを有効にします。
ここでは、MongoDBクラスタのセットアップ方法を示します。前の投稿では、1台のマシンにインストールする方法を紹介しました。
インストールする部分は3つあります:
- 構成サーバー
- クエリルーター
- シャードサーバー、すなわちデータベース
下の図を見てみると、mongosプロセスはルーターとして実行されており、クライアントにデータを探す場所を指示します。データはシャーディングに基づいてクラスター全体に分散されています。シャーディングは、いくつかのインデックスのハッシュ値に基づいてレコードをサーバーに割り当てることです。構成サーバーは構成情報を保持します。
構成サーバー
MongoDBをインストール
技術的には、MongoDBをクラスターにすることは、MongoDBアーキテクチャの3つの層を別々のプロセスとして持つことを意味します。これは、学術的な目的で1台のマシンで行うことができます。しかし、ここでは2台を使用します。
ルーターと構成サーバーを172.31.46.15にインストールし、シャードサーバーを172.31.47.43にインストールします。単純化のために、最初のサーバーを構成サーバー、2番目のサーバーをデータベースサーバーと呼びましょう。
MongoDBをインストールするにはapt-getを使用しないでください。通常、これは最新のバージョンではありません。代わりに、以下の手順に従ってください。これは、mongod(構成およびシャードサーバー)、mongos(ルーター)、およびmongoクライアントを3つの別々のパッケージとしてインストールします。
2つのサーバー間でポート27017、27018、および27019を開放してください。
構成サーバーには3つのパッケージすべてが必要ですが、データベースサーバーにはmongodb-org-serverのみが必要です。Ubuntuでは、次のようにインストールします。
wget https://repo.mongodb.org/apt/ubuntu/dists/xenial/mongodb-org/4.0/multiverse/binary-amd64/mongodb-org-server_4.0.5_amd64.deb
sudo dpkg -i mongodb-org-server_4.0.5_amd64.deb
wget https://repo.mongodb.org/apt/ubuntu/dists/xenial/mongodb-org/4.0/multiverse/binary-amd64/mongodb-org-shell_4.0.5_amd64.deb
sudo dpkg -i mongodb-org-shell_4.0.5_amd64.deb
wget https://repo.mongodb.org/apt/ubuntu/dists/xenial/mongodb-org/4.0/multiverse/binary-amd64/mongodb-org-mongos_4.0.5_amd64.deb
sudo dpkg -i mongodb-org-mongos_4.0.5_amd64.deb
ステップを間違えた場合は、サーバーを削除し、データファイルライブラリ/var/lib/mongodbを消去してください。ソフトウェアを再インストールする際にデータファイルを消去しないと、以前の構成が保持され、誤りが復元されてしまいます。
構成サーバーにログインします。
すべての3台のサーバーをセットアップするために、各サーバーで同じ4つのステップを繰り返します:
- 構成ファイルを編集
- プロセスを開始
- エラーのためにログを確認
- さらなる構成のためにシェルにログイン
さて、構成サーバーで構成ファイルを編集します。簡略化のために、各構成ファイルには説明的な名前を付けています:
構成サーバーにログインします。
sudo vim /etc/mongodConfig.conf
以下のテキストを貼り付けます。最初に、いくつかのフィールドについて説明します:
path: /var/log/mongodb/mongodConfig.log |
各プロセスには、そのプロセスが何であるかを明確に示す名前を付けます。 |
port: 27019 bindIp: 172.31.46.15 |
デフォルトでは、構成サーバーはクラスター構成でポート2019で実行されます。ここで明示的に指定することで、覚えておく必要はありません。また、IPアドレスはループバックアドレスではありません。他のサーバーがこのサーバーを見つけることができるようにするためです。 |
sharding: clusterRole: configsvr |
シャーディングとは、データをあるハッシュ化スキームに従って分配することを意味します。ここでは、このサーバーが構成サーバーであることをMongoDBに伝えます。共有サーバーではありません。 |
replication: replSetName: ConfigReplSet |
これは、この構成データをレプリケートすることを意味します。その他のレプリカを追加するためにrs.()関数を使用します。任意の名前を使用できます。 |
このテキストを/etc/mongodConfig.confに貼り付けます:
プロセスを開始します:
storage:
dbPath: /var/lib/mongodb
journal:
enabled: true
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongodConfig.log
net:
port: 27019
bindIp: 172.31.46.15
sharding:
clusterRole: configsvr
replication:
replSetName: ConfigReplSet
プロセスを開始します:
sudo mongod --config /etc/mongodConfig.conf&
エラーのためにログをチェックします:
sudo tail -100 /var/log/mongodb/mongodConfig.log
シェルにログインします:
mongo 172.31.46.15:27019
rs.initiate()でレプリケーションを有効にし、rs.status()でステータスを確認します。設定ファイルConfigReplSetで構成したレプリケーションセットの名前が取得されていることに注意してください。
> rs.initiate()
{
"info2" : "no configuration specified. Using a default configuration for the set",
"me" : "172.31.46.15:27019",
"ok" : 1,
"operationTime" : Timestamp(1548598138, 1),
"$gleStats" : {
"lastOpTime" : Timestamp(1548598138, 1),
"electionId" : ObjectId("000000000000000000000000")
},
"lastCommittedOpTime" : Timestamp(0, 0),
"$clusterTime" : {
"clusterTime" : Timestamp(1548598138, 1),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
}
}
ConfigReplSet:SECONDARY> rs.status()
{
"set" : "ConfigReplSet",
クエリルーターを設定
設定ファイルを編集します:
sudo vim /etc/mongoRouter.conf
以下のテキストを貼り付けてください。注意:
configDB: ConfigReplSet/172.31.46.15:27019 |
これは、クエリルーターが構成サーバーとそのレプリカセットを見つける場所を示します。 |
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongoRouter.log
net:
port: 27017
bindIp: 172.31.46.15
sharding:
configDB: ConfigReplSet/172.31.46.15:27019
サービスを開始します。mongosのsに注意してください。これはクエリルーターのプロセスです。
sudo mongos --config /etc/mongoRouter.conf&
ログを確認し、エラーを探してください:
mongo 172.31.46.15:27017
シャードの設定
データベースサーバーにログインします。
sudo vim /etc/mongodShard.conf
以下のテキストを貼り付けてください。注意:
プロセスを開始します。
clusterRole: shardsvr |
これは、構成サーバーとは異なり、シャードサーバーになることを意味します。 |
replSetName: ShardReplSet |
これはデータをレプリケートすることを意味します。構成サーバーでは、構成をレプリケートするように指示しました。 |
port: 27018 |
デフォルトでは、シャードサーバーはポート27018で実行されます。これを明示的に指定することで、覚えておく必要はありません。 |
storage:
dbPath: /var/lib/mongodb
journal:
enabled: true
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongodShard.log
net:
port: 27018
bindIp: 172.31.47.43
sharding:
clusterRole: shardsvr
replication:
replSetName: ShardReplSet
プロセスを開始します。
sudo mongod --config /etc/mongodShard.conf&
エラーについてログを確認します。
シェルにログインします。
sudo tail -f /var/log/mongodb/mongodShard.log
シェルにログインします。
mongo 172.31.47.43:2018
rs.initiate()でレプリケーションをオンにし、その後、rs.status()でステータスを確認します。ShardReplSetという名前に注意してください。クラスター内のすべてのシャードで同じ名前を使用する限り、任意の名前を使用できます。
rs.initiate()
{
"info2" : "no configuration specified. Using a default configuration for the set",
"me" : "172.31.47.43:27018",
"ok" : 1,
"operationTime" : Timestamp(1548602253, 1),
"$clusterTime" : {
"clusterTime" : Timestamp(1548602253, 1),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
}
}
ShardReplSet:SECONDARY> rs.status()
{
"set" : "ShardReplSet",
クラスタにシャードを追加
構成サーバーに戻り、ルーターに接続します:
mongo 172.31.46.15:27017
以下のすべてのコマンドをシェルに貼り付けます:
sh.addShard( "ShardReplSet/172.31.47.43:27018")
{
"shardAdded" : "ShardReplSet",
"ok" : 1,
"operationTime" : Timestamp(1548602529, 4),
"$clusterTime" : {
"clusterTime" : Timestamp(1548602529, 4),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
}
}
booksという名前のデータベースを作成し、その後シャーディングを有効にします。
use books
switched to db books
sh.enableSharding("books")
{
"ok" : 1,
"operationTime" : Timestamp(1548602601, 6),
"$clusterTime" : {
"clusterTime" : Timestamp(1548602601, 6),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
}
}
コレクションを作成します。
db.createCollection("collection")
{
"ok" : 1,
"operationTime" : Timestamp(1548602659, 5),
"$clusterTime" : {
"clusterTime" : Timestamp(1548602659, 5),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
}
}
インデックスを作成します。フィールドisbnを降順でインデックスします。
1件のレコードを追加します。
db.collection.createIndex( { isbn: -1 } )
{
"raw" : {
"ShardReplSet/172.31.47.43:27018" : {
"createdCollectionAutomatically" : false,
"numIndexesBefore" : 1,
"numIndexesAfter" : 2,
"ok" : 1
}
},
"ok" : 1,
"operationTime" : Timestamp(1548602670, 9),
"$clusterTime" : {
"clusterTime" : Timestamp(1548602670, 9),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
}
}
1件のレコードを追加します。
db.collection.insertOne( { isbn: 100 } )
{
"acknowledged" : true,
"insertedId" : ObjectId("5c4dcd69e83741cb900b46f8")
}
コレクションのシャーディングを有効にします。
sh.shardCollection("books.collection", { isbn : "hashed" } )
{
"collectionsharded" : "books.collection",
"collectionUUID" : UUID("0d10320b-3086-472e-a3ac-4be67fae21f9"),
"ok" : 1,
"operationTime" : Timestamp(1548603537, 12),
"$clusterTime" : {
"clusterTime" : Timestamp(1548603537, 12),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
}
}
データが下記のようにクラスター全体に分散されていることを確認します。当然、データベースサーバーは1台しかないので、1台だけが表示されます。別のブログ記事では、より多くのサーバーを追加する方法を示します。
db.collection.getShardDistribution()
Shard ShardReplSet at ShardReplSet/172.31.47.43:27018
data : 0B docs : 0 chunks : 2
estimated data per chunk : 0B
estimated docs per chunk : 0
Totals
data : 0B docs : 0 chunks : 2
Shard ShardReplSet contains NaN% data, NaN% docs in cluster, avg obj size on shard : NaNGiB
MongoDBガイド
- MongoDB概要:MongoDBの始め方
- UbuntuとMacにMongoDBをインストールする方法
- MongoDBでのデータベースの作成
- MongoDBシェル基本コマンド
- MongoDB Compass:Mongo GUIの使用
- MongoDBの役割ベースアクセス制御(RBAC)の説明
- MongoDBのプロジェクションとプロジェクション演算子の説明
- MongoDB集約関数の説明
- MongoDBのソート:sort()メソッドと例
- MongoDBでのPushとPull演算子の使用
- MongoDB $unwindの使い方
- 23の一般的なMongoDBクエリ演算子とその使用方法
- MongoDBジオロケーションクエリの例
- MongoDBトランザクションの紹介
- MongoDBインデックス:主要インデックスタイプとその管理方法
- 知っておくべき主要なMongoDBコマンド
- MongoDBレプリケーション:完全な紹介
- MongoDBクラスタのセットアップ方法
- MongoDBシャーディング:概念、例、チュートリアル
- MongoDB Atlas:管理されたMongoDBのセットアップと使用
- MongoDBをDockerコンテナとして実行する方法
- MongoDBのメモリ使用量、管理、および要件
- MongoDBバックアップのためのmongodumpの使用方法
- MongoDBバックアップを復元するためのmongorestoreの例
- PyMongoの使用方法
- MongoDBとNodeJSのためのMongooseの使用方法
- MongoDBチートシート
- MongoDB対Cassandra:NoSQLデータベースの比較
- PostgreSQL対MongoDB:データベースの比較
- MySQL対MongoDB:データベースの比較
- MongoDB認定:紹介
これらの投稿は私自身の意見であり、必ずしもBMCの立場、戦略、または意見を表すものではありません。