mongodb shared cluster構築


背景
mongodbを最初に使うときは手間を省いて、単一ノードを作ればいいです.その後、会社が使い、可用性のためにreplica setクラスタを作ったのもいいようです.その後、問題が発生し、mongoクラスタが同時に上がらないことに気づいた.後で調べたところ、replica setはプライマリ・スタンバイしかできず、各プロセスのデータは同じであり、一貫性を保証するためにトランザクションはマルチプロセス間で同期して待機しています.これにより、書き込み性能においても、ビッグデータ量においても大きなボトルネックとなります.ネット上で盛んに伝えられている高同時高性能は、shared clusterのようで、スライスの存在によって様々な粒度が細くなったようだ.また、以前のリーダーがmongoリスニングイベントを書いたとき、単例はイベントに応答できないことに気づいたので、早めに最終形態のクラスタ開発用を構築しましょう.自分では使わないかもしれませんが、少なくともこの環境は最終的な生産環境と同じで、悪いところはありません.次は構築しましょう.主な参考:https://www.cnblogs.com/xybaby/p/6832296.html
の準備を
データの準備
正直に言うと、mongoのsharded clusterに必要なプロセスは少し多く、私もプロセスごとに仮想マシンを開くことはできません.新しいノートパソコンを买ったことを考虑して、资源は比较的に広くて(32 Gメモリ、ワガガ)、私は2つの1核3 Gの仮想机を开いて本机の开発环境を构筑します.現在、この2つの環境はきれいです.centos 7.この2台の機械を使いましょう.私がダウンロードしたのは3.6.4バージョンのインストールパッケージで、最新の4.0を使っていません.結局、ドキュメントが少ないので、いったい何をすべきか分かりません.まず古いバージョンを通じましょう./opt/mongodbディレクトリに解凍し、プロファイルを/etc/mongodbに、データを/home/mongo_に配置します.sharded_cluster_data
理論の準備
公式サイトをチェックするのがおっくうで、投稿を探して、とても上手です.https://www.cnblogs.com/xybaby/p/6832296.html)私が出せるかどうか見てみましょう.大体の考え方をまとめましょう.私たちが次にしなければならないことも明確にしましょう.まずsharded clusterは複数のreplica setに基づいて構築されるので、2つの3ノードのreplica set(master、secondary、arbiter)を構築し、その上に必要な最小セット、3つのconfig server、1つのrouterを構築します.これがクラスタに必要なすべてのノードです.実際,このクラスタ構築が完了してもsharded機能は完了せず,スライスが必要なデータベースやスライスルールを手動で構成する必要がある.これが今回の実験範囲ですが、後続のより具体的な制御については、後の文章を明らかにしてから整理しましょう.
ビルド
replica setクラスタ
私の計画は、私の仮想マシンごとに完全なreplica setクラスタを構築し、可用性を無駄にしますが、管理しておけば、後で忘れません.3つのファイルを作成します.
/etc/mongodb/mongo_repica_data1.cnf
/etc/mongodb/mongo_repica_data2.cnf
/etc/mongodb/mongo_repica_data3.cnf

各ファイルの内容は次のとおりです.
/etc/mongodb/mongo_repica_data1.cnf

dbpath=/home/mongo_sharded_cluster_data/data1 #        
logpath=/home/mongo_sharded_cluster_data/data1/log/mongo.log #        
logappend=true #            
fork=true #       
pidfilepath=/home/mongo_sharded_cluster_data/data1/mongo.pid # pid    
port=27001 #     
bind_ip=0.0.0.0 #   Ip,      ip        
replSet=repl99 # replSet  ,          replSet
smallfiles=true #                 
journal=true #     ,         


/etc/mongodb/mongo_repica_data2.cnf

dbpath=/home/mongo_sharded_cluster_data/data2
logpath=/home/mongo_sharded_cluster_data/data2/log/mongo.log
logappend=true
fork=true
pidfilepath=/home/mongo_sharded_cluster_data/data2/mongo.pid
port=27002
bind_ip=0.0.0.0
replSet=repl99
smallfiles=true
journal=true


/etc/mongodb/mongo_repica_data3.cnf

dbpath=/home/mongo_sharded_cluster_data/data3
logpath=/home/mongo_sharded_cluster_data/data3/log/mongo.log
logappend=true
fork=true
pidfilepath=/home/mongo_sharded_cluster_data/data3/mongo.pid
port=27003
bind_ip=0.0.0.0
replSet=repl99
smallfiles=true
journal=true

3つのノードの構成はほぼ同じで、ログ、データ、pidファイルの場所、およびリスニングポートだけが異なります.はい、そうです.そうです.注意すべきは、中に含まれているすべてのフォルダは自分で先に作成する必要があり、mongoは自動的に作成されません.次に、次の3つのプロセスを開始します.
/opt/mongodb/bin/mongod -f /etc/mongodb/mongo_repica_data1.cnf
/opt/mongodb/bin/mongod -f /etc/mongodb/mongo_repica_data2.cnf
/opt/mongodb/bin/mongod -f /etc/mongodb/mongo_repica_data3.cnf

ここに残された問題がある.公式サイトを見ると、https://docs.mongodb.com/v3.6/reference/configuration-options/これこそ本当のプロファイルの説明ですが、ここのプロパティ構成は間違っています.私のプロパティは/opt/mongodb/bin/mongo--helpで調べました.これはまだ納得していないので、知っていることがあったら教えてください.起動後、まだ完了していません.mongoを構成する必要があります.具体的な手順は以下の通りです.
/opt/mongodb/bin/mongo 127.0.0.1:27001 //  mongo    
rs.status() //     ,    

{
	"info" : "run rs.initiate(...) if not yet done for the set",
	"ok" : 0,
	"errmsg" : "no replset config has been received",
	"code" : 94,
	"codeName" : "NotYetInitialized"
}

    ,           。

repl99cfg={
	"_id" : "repl99",
	"members" : [
		{
			"_id" : 0,
			"host" : "192.168.137.99:27001"
		},
		{
			"_id" : 1,
			"host" : "192.168.137.99:27002"
		},
		{
			"_id" : 2,
			"host" : "192.168.137.99:27003",
			"arbiterOnly" : true
		}
	]
}

        ,  ,            。repl99cfg,      。
   _id replSet  ,   arbiterOnly ,           。
            ,       。

rs.initiate(repl99cfg)
        ,     rs.status()    ,     replSet    。
    ,    ,        

次に、192.168.137.98にrepl 98という名前の別のreplSetを構成します.
configノードの構成
提案によると、ここでは3つのconfigノードを構成し、プロファイルはそれぞれ以下の通りです.
/etc/mongodb/mongo_config1.cnf

port=27011
dbpath=/home/mongo_sharded_cluster_data/config1
fork=true
logpath=/home/mongo_sharded_cluster_data/config1/log/mongo.log
pidfilepath=/home/mongo_sharded_cluster_data/config1/mongo.pid
configsvr=true
bind_ip=0.0.0.0
smallfiles=true
journal=true

/etc/mongodb/mongo_config2.cnf

port=27012
dbpath=/home/mongo_sharded_cluster_data/config2
fork=true
logpath=/home/mongo_sharded_cluster_data/config2/log/mongo.log
pidfilepath=/home/mongo_sharded_cluster_data/config2/mongo.pid
configsvr=true
bind_ip=0.0.0.0
smallfiles=true
journal=true

/etc/mongodb/mongo_config3.cnf

port=27013
dbpath=/home/mongo_sharded_cluster_data/config3
fork=true
logpath=/home/mongo_sharded_cluster_data/config3/log/mongo.log
pidfilepath=/home/mongo_sharded_cluster_data/config3/mongo.pid
configsvr=true
bind_ip=0.0.0.0
smallfiles=true
journal=true

    mongo      ,  (     ):
rs.initiate({
	_id:"cfgrepl",
	configsvr:true,
	version:1,
	members:
	[
		{_id:0,host:"192.168.137.98:27011"},
		{_id:1,host:"192.168.137.98:27012"},
		{_id:2,host:"192.168.137.99:27013"}
	]})

起動と前の差は多くありませんが、ここでは書きません.私はconfig 1とconfig 2を98の上に置いて、config 3を99の上に置いて、あなたはどの機械の上に置いても構いません.どうせ乗って開発しています.release環境や性能テスト環境をよく考えましょう.ここにはいくつかの注意点があります.4以降、configもreplicasetとして構成される必要がありますが、具体的な参照説明は公式サイト(https://docs.mongodb.com/v3.4/tutorial/upgrade-config-servers-to-replica-set/) .上記の構成も明らかで、通常のreplicasetよりもconfigsvr=trueが1つ増えています.これは必須です.そうしないと、後のコマンドは成功しません.
起動する
高可用性の出発に基づいて、routerは1つのノードだけではないはずですが、どう見てもブログには1つのノードしかありません.そして12時過ぎで、振り回したくないので、後で話しましょう.99にrouterを構築しましょう.
/etc/mongodb/mongo_router.cnf

port=27101
configdb=cfgrepl/192.168.137.98:27011,192.168.137.98:27012,192.168.137.99:27013
fork=true
logpath=/home/mongo_sharded_cluster_data/route/log/mongo.log
pidfilepath=/home/mongo_sharded_cluster_data/route/mongo.pid
bind_ip=0.0.0.0

起動コマンドが変わったことに注意してください.
/opt/mongodb/bin/mongos -f /etc/mongodb/mongo_router.cnf

これで起動しましたが、具体的なスライスは具体的な構成が必要で、後述します.