mongodbスライスクラスタインストール構築テスト
15654 ワード
mongodbスライスクラスタとは何かについては、ここでは紹介しませんが、ネット上では多くの説明があります.
テスト資源が限られているため、すべてのノードを1台のサーバーの上に構築し、実際の生産環境はconfig/mongos/shardが別々に異なる機械にインストールしたほうがいい.ここには12のノードのスライスクラスタが構築されている.ポートを区別して、mongsノードを3つ、config-serverコピーセットを3つ、2ノードのshardコピーセットを3つ作成します.使用バージョン:4.0.18
ホスト
ポート
ロール#ロール#
コピーセット/スライスタイプ
172.100.1.35
27017,37017,47017
mongos
—
172.100.1.35
27019,37019,47019
config server
cs0/configsvr
172.100.1.35
27018,37018,47018
shardA
shardA/shardsvr
172.100.1.35
27016,37016,47016
shardB
shardB/shardsvr
あまり話さないで直接やりなさい.
次に、今回のテスト環境に必要なmongodbノードを示します.
まずconfigsvrを構成します
それぞれmongodb_config_27019,mongodb_config_37019,mongodb_config_47019で対応するプロファイルを作成します.ここで私のプロファイルはそれぞれmogondb_です.config_27019.conf,mogondb_config_37019.conf,mogondb_config_47019.conf
プロファイルを編集し、mongodb_を追加します.config_27019点を例に、以下の内容を追加します.
注:残りの2つのノードは、ポート番号とパスが上と異なる以外は完全に一致しています.
構成が完了したら、この3つのconfigノードをそれぞれ起動します.
起動後、上の3つのconfigノードのうちの1つにログインして初期化します.
これでconfig構成が終了します
次に、shardA、shardBを構成します.
sharda構成:
それぞれmongodb_shardA_1,mongodb_shardA_2,mongodb_shardA_3で対応するプロファイルを作成
ここではmongodb_shardA_1.conf,mongodb_shardA_2.conf ,mongodb_shardA_3.conf
プロファイルを編集します.ここではmongodb_shardA_1.confを例に、以下の内容を追加します.
メモ:残りの2つのノード構成は、ポート番号とパスが一致しない場合を除き、完全に上と一致します.
shardB構成:
実はshardBの配置はshardAと全く同じで、ポートと経路に注意すればいいのです
同じようにmongodbでshardB_1,mongodb_shardB_2,mongodb_shardB_3で対応するプロファイルを作成
ここではmongodb_shardB_1.conf,mongodb_shardB_2.conf ,mongodb_shardB_3.conf
プロファイルを編集します.ここではmongodb_shardB_1.confを例に、以下の内容を追加します.
メモ:残りの2つのノード構成は、ポート番号とパスが一致しない場合を除き、完全に上と一致します.
構成ができたら、上のshardA 3ノードとshardBの3ノードをそれぞれ起こします.
そしてそれぞれ初期化話replicat構成
shardA:
sharda 3ノードのうちの1つを任意に登録します.
shardB:
shardB 3ノードのうちの1つに任意にログインすればよい.
これでshardA、shardBスライス構成はこれで終了です
最終構成mongos
ここでmongosも3つのノードを作って、
それぞれmongodb_mongos1,mongodb_mongos2,mongodb_mongos 3でmongodbを構成するmongos1.conf,mongodb_mongos2.conf,mongodb_mongos3.conf
プロファイルを編集します.ここでもmongodb_mongos1.confを例に、次のように追加します.
メモ:残りの2つのノードの構成は、ポート番号とパスが上と異なる場合を除き、完全に一致しています.
上のプロファイルが構成されたら、この3つのノードをそれぞれ起動します.
上の3つのノードのいずれかに勝手にログインし、shardingにreplicatを追加します.
これですべての構成が終了し、以下のテストを行います.
次のすべての操作はmongosのいずれかのノードで実行されます.
shardingライブラリの起動:sh.enableSharding(「yuhuashi」)
スライスセットの作成:sh.shardCollection("yuhuashi.user",{"name":1})#rangedスライスsh.shardCollection("yuhuashi.user",{"task_id":"hashed"})#hashスライス
ここではhashedスライスを使いました
sh.status()を使用してステータスを表示できます
テストデータの挿入をテストします.以下を見てください.
shardaとshardBスライスを別々にログインして表示
GAME OVER!
テスト資源が限られているため、すべてのノードを1台のサーバーの上に構築し、実際の生産環境はconfig/mongos/shardが別々に異なる機械にインストールしたほうがいい.ここには12のノードのスライスクラスタが構築されている.ポートを区別して、mongsノードを3つ、config-serverコピーセットを3つ、2ノードのshardコピーセットを3つ作成します.使用バージョン:4.0.18
ホスト
ポート
ロール#ロール#
コピーセット/スライスタイプ
172.100.1.35
27017,37017,47017
mongos
—
172.100.1.35
27019,37019,47019
config server
cs0/configsvr
172.100.1.35
27018,37018,47018
shardA
shardA/shardsvr
172.100.1.35
27016,37016,47016
shardB
shardB/shardsvr
あまり話さないで直接やりなさい.
次に、今回のテスト環境に必要なmongodbノードを示します.
[root@cpe-172-100-1-35 jsunicom]# ll
total 0
drwxr-xr-x 6 root root 203 Jun 2 16:10 mongodb_config_27019
drwxr-xr-x 6 root root 203 Jun 2 11:28 mongodb_config_37019
drwxr-xr-x 6 root root 203 Jun 2 11:28 mongodb_config_47019
drwxr-xr-x 6 root root 198 Jun 2 14:31 mongodb_mongos1
drwxr-xr-x 6 root root 198 Jun 2 14:31 mongodb_mongos2
drwxr-xr-x 6 root root 198 Jun 2 14:30 mongodb_mongos3
drwxr-xr-x 6 root root 199 Jun 2 14:38 mongodb_shardA_1
drwxr-xr-x 6 root root 199 Jun 2 14:38 mongodb_shardA_2
drwxr-xr-x 6 root root 199 Jun 2 14:02 mongodb_shardA_3
drwxr-xr-x 6 root root 199 Jun 2 14:22 mongodb_shardB_1
drwxr-xr-x 6 root root 199 Jun 2 14:22 mongodb_shardB_2
drwxr-xr-x 6 root root 199 Jun 2 14:22 mongodb_shardB_3
まずconfigsvrを構成します
それぞれmongodb_config_27019,mongodb_config_37019,mongodb_config_47019で対応するプロファイルを作成します.ここで私のプロファイルはそれぞれmogondb_です.config_27019.conf,mogondb_config_37019.conf,mogondb_config_47019.conf
プロファイルを編集し、mongodb_を追加します.config_27019点を例に、以下の内容を追加します.
[root@cpe-172-100-1-35 mongodb_config_27019]# cat mogondb_config_27019.conf
systemLog:
traceAllExceptions: false
path: /webapp/jsunicom/mongodb_config_27019/logs/mongod.log
logAppend: true
destination: file
timeStampFormat: ctime
processManagement:
fork: true
pidFilePath: /webapp/jsunicom/mongodb_config_27019/tmp/mongod.pid
net:
port: 27019
bindIp: 172.100.1.35
maxIncomingConnections: 20000
storage:
dbPath: /webapp/jsunicom/mongodb_config_27019/data
directoryPerDB: true
wiredTiger:
engineConfig:
cacheSizeGB: 1
directoryForIndexes: true
operationProfiling:
slowOpThresholdMs: 1000
replication:
oplogSizeMB: 2048
replSetName: cs0
sharding:
clusterRole: configsvr
注:残りの2つのノードは、ポート番号とパスが上と異なる以外は完全に一致しています.
構成が完了したら、この3つのconfigノードをそれぞれ起動します.
[root@cpe-172-100-1-35 ~]# /webapp/jsunicom/mongodb_config_27019/bin/mongod -f /webapp/jsunicom/mongodb_config_27019/mogondb_config_27019.conf
[root@cpe-172-100-1-35 ~]# /webapp/jsunicom/mongodb_config_37019/bin/mongod -f /webapp/jsunicom/mongodb_config_37019/mogondb_config_37019.conf
[root@cpe-172-100-1-35 ~]# /webapp/jsunicom/mongodb_config_47019/bin/mongod -f /webapp/jsunicom/mongodb_config_47019/mogondb_config_47019.conf
起動後、上の3つのconfigノードのうちの1つにログインして初期化します.
[root@cpe-172-100-1-35 ~]# /webapp/jsunicom/mongodb_config_27019/bin/mongo --host 172.100.1.35 --port 27019
use admin
rs.initiate(
{
_id: "cs0",
configsvr: true,
members: [
{ _id : 0, host : "172.100.1.35:27019" },
{ _id : 1, host : "172.100.1.35:37019" },
{ _id : 2, host : "172.100.1.35:47019" }
]
}
)
,
rs.status()
health:1
これでconfig構成が終了します
次に、shardA、shardBを構成します.
sharda構成:
それぞれmongodb_shardA_1,mongodb_shardA_2,mongodb_shardA_3で対応するプロファイルを作成
ここではmongodb_shardA_1.conf,mongodb_shardA_2.conf ,mongodb_shardA_3.conf
プロファイルを編集します.ここではmongodb_shardA_1.confを例に、以下の内容を追加します.
[root@cpe-172-100-1-35 mongodb_shardA_1]# cat mongodb_shardA_1.conf
systemLog:
traceAllExceptions: false
path: /webapp/jsunicom/mongodb_shardA_1/logs/mongod.log
logAppend: true
destination: file
timeStampFormat: ctime
processManagement:
fork: true
pidFilePath: /webapp/jsunicom/mongodb_shardA_1/tmp/mongod.pid
net:
port: 27018
bindIp: 172.100.1.35
maxIncomingConnections: 20000
storage:
dbPath: /webapp/jsunicom/mongodb_shardA_1/data
directoryPerDB: true
wiredTiger:
engineConfig:
cacheSizeGB: 1
directoryForIndexes: true
operationProfiling:
slowOpThresholdMs: 1000
replication:
oplogSizeMB: 3072
replSetName: shardA
sharding:
clusterRole: shardsvr
setParameter:
connPoolMaxShardedInUseConnsPerHost: 100
shardedConnPoolIdleTimeoutMinutes: 10
connPoolMaxInUseConnsPerHost: 100
globalConnPoolIdleTimeoutMinutes: 10
maxIndexBuildMemoryUsageMegabytes: 2048
メモ:残りの2つのノード構成は、ポート番号とパスが一致しない場合を除き、完全に上と一致します.
shardB構成:
実はshardBの配置はshardAと全く同じで、ポートと経路に注意すればいいのです
同じようにmongodbでshardB_1,mongodb_shardB_2,mongodb_shardB_3で対応するプロファイルを作成
ここではmongodb_shardB_1.conf,mongodb_shardB_2.conf ,mongodb_shardB_3.conf
プロファイルを編集します.ここではmongodb_shardB_1.confを例に、以下の内容を追加します.
[root@cpe-172-100-1-35 mongodb_shardB_1]# cat mongodb_shardB_1.conf
systemLog:
traceAllExceptions: false
path: /webapp/jsunicom/mongodb_shardB_1/logs/mongod.log
logAppend: true
destination: file
timeStampFormat: ctime
processManagement:
fork: true
pidFilePath: /webapp/jsunicom/mongodb_shardB_1/tmp/mongod.pid
net:
port: 27016
bindIp: 172.100.1.35
maxIncomingConnections: 20000
storage:
dbPath: /webapp/jsunicom/mongodb_shardB_1/data
directoryPerDB: true
wiredTiger:
engineConfig:
cacheSizeGB: 1
directoryForIndexes: true
operationProfiling:
slowOpThresholdMs: 1000
replication:
oplogSizeMB: 3072
replSetName: shardB
sharding:
clusterRole: shardsvr
setParameter:
connPoolMaxShardedInUseConnsPerHost: 100
shardedConnPoolIdleTimeoutMinutes: 10
connPoolMaxInUseConnsPerHost: 100
globalConnPoolIdleTimeoutMinutes: 10
maxIndexBuildMemoryUsageMegabytes: 2048
メモ:残りの2つのノード構成は、ポート番号とパスが一致しない場合を除き、完全に上と一致します.
構成ができたら、上のshardA 3ノードとshardBの3ノードをそれぞれ起こします.
[root@cpe-172-100-1-35 ~]# /webapp/jsunicom/mongodb_shardA_1/bin/mongod -f /webapp/jsunicom/mongodb_shardA_1/mongodb_shardA_1.conf
[root@cpe-172-100-1-35 ~]# /webapp/jsunicom/mongodb_shardA_2/bin/mongod -f /webapp/jsunicom/mongodb_shardA_2/mongodb_shardA_2.conf
[root@cpe-172-100-1-35 ~]# /webapp/jsunicom/mongodb_shardA_3/bin/mongod -f /webapp/jsunicom/mongodb_shardA_3/mongodb_shardA_3.conf
[root@cpe-172-100-1-35 ~]# /webapp/jsunicom/mongodb_shardB_1/bin/mongod -f /webapp/jsunicom/mongodb_shardB_1/mongodb_shardB_1.conf
[root@cpe-172-100-1-35 ~]# /webapp/jsunicom/mongodb_shardB_2/bin/mongod -f /webapp/jsunicom/mongodb_shardB_2/mongodb_shardB_2.conf
[root@cpe-172-100-1-35 ~]# /webapp/jsunicom/mongodb_shardB_3/bin/mongod -f /webapp/jsunicom/mongodb_shardB_3/mongodb_shardB_3.conf
そしてそれぞれ初期化話replicat構成
shardA:
sharda 3ノードのうちの1つを任意に登録します.
[root@cpe-172-100-1-35 ~]# /webapp/jsunicom/mongodb_config_27019/bin/mongo --host 172.100.1.35 --port 27018
use admin
rs.initiate(
{
_id : "shardA",
members: [
{ _id : 0, host : "172.100.1.35:27018" },
{ _id : 1, host : "172.100.1.35:37018" },
{ _id : 2, host : "172.100.1.35:47018",arbiterOnly: true }
]
}
)
rs.status()
health:1
shardB:
shardB 3ノードのうちの1つに任意にログインすればよい.
[root@cpe-172-100-1-35 ~]# /webapp/jsunicom/mongodb_config_27019/bin/mongo --host 172.100.1.35 --port 27016
use admin
rs.initiate(
{
_id : "shardB",
members: [
{ _id : 0, host : "172.100.1.35:27016" },
{ _id : 1, host : "172.100.1.35:37016" },
{ _id : 2, host : "172.100.1.35:47016",arbiterOnly: true }
]
}
)
rs.status()
health :1
これでshardA、shardBスライス構成はこれで終了です
最終構成mongos
ここでmongosも3つのノードを作って、
それぞれmongodb_mongos1,mongodb_mongos2,mongodb_mongos 3でmongodbを構成するmongos1.conf,mongodb_mongos2.conf,mongodb_mongos3.conf
プロファイルを編集します.ここでもmongodb_mongos1.confを例に、次のように追加します.
[root@cpe-172-100-1-35 mongodb_mongos1]# cat mongodb_mongos1.conf
systemLog:
traceAllExceptions: false
path: /webapp/jsunicom/mongodb_mongos1/logs/mongos.log
logAppend: true
destination: file
timeStampFormat: ctime
processManagement:
fork: true
pidFilePath: /webapp/jsunicom/mongodb_mongos1/tmp/mongos.pid
net:
port: 27017
bindIp: 172.100.1.35
maxIncomingConnections: 20000
operationProfiling:
slowOpThresholdMs: 1000
replication:
localPingThresholdMs: 300
sharding:
configDB: cs0/172.100.1.35:27019,172.100.1.35:37019,172.100.1.35:47019
setParameter:
connPoolMaxShardedInUseConnsPerHost: 100
shardedConnPoolIdleTimeoutMinutes: 10
connPoolMaxInUseConnsPerHost: 100
globalConnPoolIdleTimeoutMinutes: 10
メモ:残りの2つのノードの構成は、ポート番号とパスが上と異なる場合を除き、完全に一致しています.
上のプロファイルが構成されたら、この3つのノードをそれぞれ起動します.
[root@cpe-172-100-1-35 ~]# /webapp/jsunicom/mongodb_mongos1/bin/mongos -f /webapp/jsunicom/mongodb_mongos1/mongodb_mongos1.conf
[root@cpe-172-100-1-35 ~]# /webapp/jsunicom/mongodb_mongos2/bin/mongos -f /webapp/jsunicom/mongodb_mongos2/mongodb_mongos2.conf
[root@cpe-172-100-1-35 ~]# /webapp/jsunicom/mongodb_mongos3/bin/mongos -f /webapp/jsunicom/mongodb_mongos3/mongodb_mongos3.conf
上の3つのノードのいずれかに勝手にログインし、shardingにreplicatを追加します.
[root@cpe-172-100-1-35 ~]# /webapp/jsunicom/mongodb_config_27019/bin/mongo --host 172.100.1.35 --port 27017
:
use admin
sh.addShard("shardA/172.100.1.35:27018,172.100.1.35:37018,172.100.1.35:47018")
sh.addShard("shardA/172.100.1.35:27018,172.100.1.35:37016,172.100.1.35:47016")
rs.status()
mongos> sh.status()
--- Sharding Status ---
sharding version: {
"_id" : 1,
"minCompatibleVersion" : 5,
"currentVersion" : 6,
"clusterId" : ObjectId("5ed5e536856e004008317884")
}
shards:
{ "_id" : "shardA", "host" : "shardA/172.100.1.35:27018,172.100.1.35:37018", "state" : 1 }
{ "_id" : "shardB", "host" : "shardB/172.100.1.35:27016,172.100.1.35:37016", "state" : 1 }
active mongoses:
"4.0.18" : 3
autosplit:
Currently enabled: yes
balancer:
Currently enabled: yes
Currently running: no
Failed balancer rounds in last 5 attempts: 0
Migration Results for the last 24 hours:
No recent migrations
databases:
{ "_id" : "config", "primary" : "config", "partitioned" : true }
config.system.sessions
shard key: { "_id" : 1 }
unique: false
balancing: true
chunks:
shardB 1
{ "_id" : { "$minKey" : 1 } } -->> { "_id" : { "$maxKey" : 1 } } on : shardB Timestamp(1, 0)
これですべての構成が終了し、以下のテストを行います.
次のすべての操作はmongosのいずれかのノードで実行されます.
shardingライブラリの起動:sh.enableSharding(「yuhuashi」)
スライスセットの作成:sh.shardCollection("yuhuashi.user",{"name":1})#rangedスライスsh.shardCollection("yuhuashi.user",{"task_id":"hashed"})#hashスライス
ここではhashedスライスを使いました
mongos> sh.shardCollection("yuhuashi.user", { "task_id" : "hashed" } )
{
"collectionsharded" : "yuhuashi.user",
"collectionUUID" : UUID("43d3cce7-0225-4dcc-8b7e-aecc7b3932b6"),
"ok" : 1,
"operationTime" : Timestamp(1591081873, 27),
"$clusterTime" : {
"clusterTime" : Timestamp(1591081873, 27),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
}
}
sh.status()を使用してステータスを表示できます
mongos> sh.status()
--- Sharding Status ---
sharding version: {
"_id" : 1,
"minCompatibleVersion" : 5,
"currentVersion" : 6,
"clusterId" : ObjectId("5ed5e536856e004008317884")
}
shards:
{ "_id" : "shardA", "host" : "shardA/172.100.1.35:27018,172.100.1.35:37018", "state" : 1 }
{ "_id" : "shardB", "host" : "shardB/172.100.1.35:27016,172.100.1.35:37016", "state" : 1 }
active mongoses:
"4.0.18" : 3
autosplit:
Currently enabled: yes
balancer:
Currently enabled: yes
Currently running: no
Failed balancer rounds in last 5 attempts: 0
Migration Results for the last 24 hours:
No recent migrations
databases:
{ "_id" : "config", "primary" : "config", "partitioned" : true }
config.system.sessions
shard key: { "_id" : 1 }
unique: false
balancing: true
chunks:
shardB 1
{ "_id" : { "$minKey" : 1 } } -->> { "_id" : { "$maxKey" : 1 } } on : shardB Timestamp(1, 0)
{ "_id" : "yuhuashi", "primary" : "shardA", "partitioned" : true, "version" : { "uuid" : UUID("fb60172b-49e9-4d3a-8052-1e8780b0ff52"), "lastMod" : 1 } }
yuhuashi.user
shard key: { "task_id" : "hashed" }
unique: false
balancing: true
chunks:
shardA 2
shardB 2
{ "task_id" : { "$minKey" : 1 } } -->> { "task_id" : NumberLong("-4611686018427387902") } on : shardA Timestamp(1, 0)
{ "task_id" : NumberLong("-4611686018427387902") } -->> { "task_id" : NumberLong(0) } on : shardA Timestamp(1, 1)
{ "task_id" : NumberLong(0) } -->> { "task_id" : NumberLong("4611686018427387902") } on : shardB Timestamp(1, 2)
{ "task_id" : NumberLong("4611686018427387902") } -->> { "task_id" : { "$maxKey" : 1 } } on : shardB Timestamp(1, 3)
テストデータの挿入をテストします.以下を見てください.
mongos> use yuhuashi
switched to db yuhuashi
mongos> show tables;
user
mongos> db.user.find().count()
0
mongos> for(i=1;i<=10000;i++){db.user.insert({"task_id":i,"name":"shiyu"+i,"age":i})}
WriteResult({ "nInserted" : 1 })
shardaとshardBスライスを別々にログインして表示
shardA:PRIMARY> use yuhuashi
switched to db yuhuashi
shardA:PRIMARY> db.user.find().count()
7521
shardA:PRIMARY>
shardB:PRIMARY> use yuhuashi
switched to db yuhuashi
shardB:PRIMARY> db.user.find().count()
2479
shardB:PRIMARY>
GAME OVER!