この記事では、Mongaリポジトリの接続とシステムへのパッケージのインストールの問題に触れずに、MongoDBの構成のみを見ていきます。
分散MongoDBクラスターは、次のコンポーネントで構成されています。
シャードシャードは、データの一部をシャードコレクションに格納するmongodインスタンスです。 実稼働環境で使用するには、各シャードがレプリカのセット(replicaSet)である必要があります。
構成サーバークラスタメタデータを格納するmongodインスタンスもあります。 メタデータは、どのデータがどのシャードに保存されているかを示します。
ルーティングサーバーインスタンスmongos。 そのタスクは、アプリケーションからのリクエストをシャードにルーティングすることです。
以下は、シュレッドされたクラスターMongoDBの作業の図です

必要な役割を次のようにグループ化すると最も便利です。
これらのロールを作成する3つのサーバーがあるとします。
構成サーバーの構成
mongodが構成サーバーとして
機能するために、
/ etc / mongod.confを次の形式にします。
logpath=/var/log/mongodb/mongod.log logappend=true fork=true dbpath=/opt/mongocfg pidfilepath=/var/run/mongodb/mongod.pid bind_ip=<lo ip>,<eth ip> configsvr=false
その後、サービスを開始します
#サービスmongod start
ルーティングサーバーを構成する
ルーティングサーバーの構成に進む前に、mongodb-org-mongosパッケージがシステムにインストールされていることを確認する必要があります
#rpm -qa | grep mongos
mongodb-org-mongos-2.6.2-1.x86_64
最初に、mongos
/etc/mongos.confサービスの構成ファイルを作成し、次の形式にします。
configdb=mongos01:27019,mongos02:27019,mongos03:27019
Mongoには、パッケージにmongosの初期化スクリプトが含まれていなかったため、作成します。
cat > /etc/init.d/mongos << TheEnd
実行可能にする
chmod + x /etc/init.d/mongos
これで実行できます
サービスモンゴス開始
そして忘れないで
次に、残りのサーバーでこれらの手順を繰り返す必要があります。
シャードのセットアップ
実稼働環境用にシャードをセットアップする際に最初に覚えておくべきことは、各シャードがレプリカセットであることです。
MongoDBでのレプリケーションの詳細については、
公式ドキュメントをご覧ください
。これについては詳しく説明しませんが、設定を進めます。
4つのサーバーがあります。
- 最初のシャードのマスター(mongo01-rs01)
- 最初のシャードのスレーブ(mongo02-rs01)
- 2番目のシャードのマスター(mongo01-rs02)
- 2番目のシャードのスレーブ(mongo02-rs02)
4つのサーバーすべてにシステムが既にインストールされており、mongodbがインストールされているとします
mongo01-rs01およびmongo02-rs01の/etc/mongodb.confで、このシャードが使用するレプリカセットの名前を指定する必要があります
replSet=rs01
mongodを保存して実行します。
次に、マスターにする予定のサーバーのmongoコンソールに移動します
#モンゴ
そして、レプリカセットを初期化します
> rs.initiate()
レプリカセットが初期化されていることを確認するには、その構成を見てみましょう
rs01:PRIMARY> rs.conf()
出力には次のように表示されます。
{ "_id" : "rs01", "version" : 7, "members" : [ { "_id" : 0, "host" : "mongo01-rs01:27017" } ] }
次に、このセットに2番目のサーバーを追加します。
rs01:PRIMARY> rs.add( "mongo02-rs01")
そして、設定を確認してください
rs01:PRIMARY> rs.conf()
{ "_id" : "rs01", "version" : 7, "members" : [ { "_id" : 0, "host" : "mongo01-rs01:27017" }, { "_id" : 1, "host" : "mongo02-rs01:27017", } ] }
MongoDBのフォールトトレランスを向上させるには、セット内のマシンの数を奇数にすることをお勧めします。
データの別のコピーを作成したくないので、
アービトレーターを作成できます
アービターは、レプリカセットのメンバーであるが、データを格納しないmongodのインスタンスです。 彼は新しいマスターの選択に関与しています。
選挙の編成方法については、
公式文書に詳細に記載されてい
ます別のマシンを割り当てないために、以前に作成したものの1つmongos01を使用します。
ここで思い出すように、
mongod startサービスでは、mongodのインスタンスが起動されます。これは構成サーバーです。
アービターを手で開始しないために、そのための初期化スクリプトを作成する必要があります
cat > /etc/init.d/mongo-rs01-arb << TheEnd
実行可能にします
#chmod + x /etc/init.d/mongo-rs01-arb
BaseDirとその構成ファイルを作成しましょう
#mkdir / opt / mongo-rs01-arb; chown mongod:mongod / opt / mongo-rs01-arb
#cp -av /etc/mongod.conf /etc/mongod-rs01-arb.conf
次に、ファイル
/etc/mongod-rs01-arb.confで 、次の行を編集します
port=27020 dbpath=/opt/mongo-rs01-arb pidfilepath=/var/run/mongodb/mongod-rs01-arb.pid
そして、行を削除/コメントします
configsvr=true
ファイルを保存して、サービスを開始します
#service mongo-rs01-arb start
次に、rs01のマスターに戻り、mongoコンソールでアービターをレプリカセットに追加します
> rs.addArb( "mongos01:27020")
設定の確認
rs01:PRIMARY> rs.conf()
{ "_id" : "rs01", "version" : 7, "members" : [ { "_id" : 0, "host" : "mongo01-rs01:27017" }, { "_id" : 1, "host" : "mongo02-rs01:27017", }, { "_id" : 2, "host" : "mongos01:27020", "arbiterOnly" : true } ] }
クラスターの2番目の断片(mongo01-rs02およびmongo02-rs02)になるレプリカの2番目のセットの下にある残りの2つのサーバーでこの手順を繰り返します。
そのため、2セットのレプリカを作成しました。これを分散クラスターに追加する必要があります。
これを行うには、mongos01に移動してmongoコンソールに移動します(この場合、mongosサービスに接続することに注意してください)。
> sh.addShard( "rs01 // mongo01-rs01:27017、mongo02-rs01:27017")
> sh.addShard( "rs02 / mongo01-rs02:27017、mongo02-rs02:27017")
私たちはチェックします:
> sh.status()
出力には次の行が含まれている必要があります。
shards: { "_id" : "rs01", "host" : "rs01/mongo01-rs01:27017,mongo02-rs01:27017" } { "_id" : "rs02", "host" : "rs02/mongo01-rs02:27017,mongo02-rs02:27017" }
これは、クラスターに2つのシャードが正常に追加されたことを意味します。
ここで、分散クラスターにベースを追加して、シャードします。
私たちの場合、それはGridFSファイルシステムを含むデータベースになります
>ファイルストアを使用
> sh.enableSharding(「ファイルストア」)
> sh.shardCollection( "filestore.fs.chunks"、{files_id:1、n:1})
ステータスを確認する
> sh.status()
出力は次のようになります。
shards: { "_id" : "rs01", "host" : "rs01/mongo01-rs01:27017,mongo02-rs01:27017" } { "_id" : "rs02", "host" : "rs02/mongo01-rs02:27017,mongo02-rs02:27017"} databases: { "_id" : "admin", "partitioned" : false, "primary" : "config" } { "_id" : "test", "partitioned" : false, "primary" : "rs02" } { "_id" : "filestore", "partitioned" : true, "primary" : "rs01" } filestore.fs.chunks shard key: { "files_id" : 1, "n" : 1 } chunks: rs01 1363 rs02 103 too many chunks to print, use verbose if you want to force print
以上で、アプリケーションで分散GridFSを使用してmongosインスタンスにアクセスできるようになりました
PS:PMのエラーと不正確さについて書いてください。