docker配備mongo 4.*クラスタ
8883 ワード
前言
テスト環境に新しいプロジェクトを導入するためにdockerを使用してmongoクラスタデータを構築することにした.
の準備を
3台のテスト環境サーバ
ip
オペレーティングシステム
192.168.188.7
centos7
192.168.188.129
centos7
192.168.188.144
centos7
配置
================================
============================インストールプロセス===========================
ミラーリング
最初のスライス-shard 1の起動
1つのコンテナ構成Config-Serverコピーセットに入ります.
索引
1.ベースインデックス
フィールドageにインデックスを作成します.1(昇順);-1(降順):
インデックスは、任意のタイプのフィールド、さらにはドキュメントを使用できます.
他のデータベース製品と同様に、MongoDBにも組み合わせインデックスがあります.次にaddr....stateにコンビネーションインデックスを作成します.コンビネーションインデックスを作成すると、フィールドの後ろの1が昇順、-1が降順、1が主にソート時または指定範囲内のクエリー時に関係します.
ユニークなインデックスを作成するには、ensureIndexコマンドで「unique:true」を指定します.例えば、表t 4に2つのレコードを挿入した場合にエラーが報告される.
hintコマンドは、インデックスを強制的に使用できます.
//t 3テーブルのすべてのインデックスを削除する
OpenWriteリリース
テスト環境に新しいプロジェクトを導入するためにdockerを使用してmongoクラスタデータを構築することにした.
の準備を
3台のテスト環境サーバ
ip
オペレーティングシステム
192.168.188.7
centos7
192.168.188.129
centos7
192.168.188.144
centos7
配置
================================
============================インストールプロセス===========================
ミラーリング
docker pull mongo:4.0.10
バージョンの表示: :https://hub.docker.com
ネットワークdocker network create --subnet=10.20.0.0/24 mongodbnet
フォルダmkdir -p /usr/local/mongo/configsvr
mkdir -p /usr/local/mongo/shard1
mkdir -p /usr/local/mongo/shard2
mkdir -p /usr/local/mongo/shard3
mkdir -p /usr/local/mongo/mongos
Config-Serverプロファイルvim /usr/local/mongo/configsvr/mongod.conf
#### :
storage:
dbPath: /data/db
journal:
enabled: true
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongod.log
net:
bindIp: 0.0.0.0
processManagement:
timeZoneInfo: /usr/share/zoneinfo
replication:
replSetName: cfg
sharding:
clusterRole: configsvr
Mongosプロファイルvim /usr/local/mongo/mongos/mongos.conf
#### :
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongos.log
net:
port: 27020
bindIp: 0.0.0.0
processManagement:
fork: true
timeZoneInfo: /usr/share/zoneinfo
sharding:
configDB: cfg/192.168.188.7:27019,192.168.188.129:27019,192.168.188.144:27019
Shard-Serverプロファイル1vim /usr/local/mongo/shard1/mongod.conf
####
storage:
dbPath: /data/db
journal:
enabled: true
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongod.log
net:
bindIp: 0.0.0.0
processManagement:
timeZoneInfo: /usr/share/zoneinfo
replication:
replSetName: shard1
sharding:
clusterRole: shardsvr
Shard-Serverプロファイル2vim /usr/local/mongo/shard2/mongod.conf
####
storage:
dbPath: /data/db
journal:
enabled: true
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongod.log
net:
bindIp: 0.0.0.0
processManagement:
timeZoneInfo: /usr/share/zoneinfo
replication:
replSetName: shard2
sharding:
clusterRole: shardsvr
Shard-Serverプロファイル3vim /usr/local/mongo/shard3/mongod.conf
####
storage:
dbPath: /data/db
journal:
enabled: true
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongod.log
net:
bindIp: 0.0.0.0
processManagement:
timeZoneInfo: /usr/share/zoneinfo
replication:
replSetName: shard3
sharding:
clusterRole: shardsvr
DockerコンテナConfig-Serverコンテナを起動します(サーバごとに1回):docker run -d --restart=always --name=cfg_1 -p 27019:27019 --network=mongodbnet -v /usr/local/mongo/configsvr:/etc/mongodb mongo:4.0.10 -f /etc/mongodb/mongod.conf
3*3個のShard-Serverコンテナを起動します.説明:スライスサーバの起動後、デフォルトは27018をポートとします.最初のスライス-shard 1の起動
docker run -d --restart=always --name=shard1_1 -p 27018:27018 --network=mongodbnet -v /usr/local/mongo/shard1:/etc/mongodb mongo:4.0.10 -f /etc/mongodb/mongod.conf
2番目のスライス-shard 2の起動docker run -d --restart=always --name=shard2_1 -p 27028:27018 --network=mongodbnet -v /usr/local/mongo/shard2:/etc/mongodb mongo:4.0.10 -f /etc/mongodb/mongod.conf
3番目のスライス-shard 3の起動docker run -d --restart=always --name=shard3_1 -p 27038:27018 --network=mongodbnet -v /usr/local/mongo/shard3:/etc/mongodb mongo:4.0.10 -f /etc/mongodb/mongod.conf
3つのmongosサーバの起動説明:ここでもmongoミラーを使用していますが、mongosプロセスを開く必要があります.mongodプロセスは使用する必要はありません.
docker run -d --restart=always --name=mongos_1 -p 27017:27017 -p 27020:27020 --network=mongodbnet -v /usr/local/mongo/mongos:/etc/mongodb mongo:4.0.10
クラスタ1つのコンテナ構成Config-Serverコピーセットに入ります.
docker exec -it cfg_1 /bin/bash
#
mongo --port 27019
# Mongo Shell
rs.initiate({
"_id":"cfg",
"members":[
{
"_id":0,
"host":"192.168.188.7:27019"
},
{
"_id":1,
"host":"192.168.188.129:27019"
},
{
"_id":2,
"host":"192.168.188.144:27019"
}
]
})
いずれかのコンテナ構成Shard-Server 1コピーセットに入ります.#
docker exec -it shard1_1 /bin/bash
#
mongo --port 27018
# Mongo Shell
rs.initiate({
"_id":"shard1",
"members":[
{
"_id":0,
"host":"192.168.188.7:27018"
},
{
"_id":1,
"host":"192.168.188.129:27018"
},
{
"_id":2,
"host":"192.168.188.144:27018"
}
]
})
いずれかのコンテナ構成Shard-Server 2コピーセットに入ります.#
docker exec -it shard2_1 /bin/bash
#
mongo --port 27018
# Mongo Shell
rs.initiate({
"_id":"shard2",
"members":[
{
"_id":0,
"host":"192.168.188.7:27028"
},
{
"_id":1,
"host":"192.168.188.129:27028"
},
{
"_id":2,
"host":"192.168.188.144:27028"
}
]
})
いずれかのコンテナ構成Shard-Server 3コピーセットに入ります.#
docker exec -it shard3_1 /bin/bash
#
mongo --port 27018
# Mongo Shell
rs.initiate({
"_id":"shard3",
"members":[
{
"_id":0,
"host":"192.168.188.7:27038"
},
{
"_id":1,
"host":"192.168.188.129:27038"
},
{
"_id":2,
"host":"192.168.188.144:27038"
}
]
})
mongosコンテナに入り、mongosプロセスを開始します(ここでは、mongosプロセスを自動的に実行することを改善できます).#
docker exec -it mongos_1 /bin/bash
#
mongos -f /etc/mongodb/mongos.conf
# mongos mongo shell mongos
# mongos, mongos
mongo -port 27020
#
sh.addShard("shard1/192.168.188.7:27018,192.168.188.129:27018,192.168.188.144:27018")
sh.addShard("shard2/192.168.188.7:27028,192.168.188.129:27028,192.168.188.144:27028")
sh.addShard("shard3/192.168.188.7:27038,192.168.188.129:27038,192.168.188.144:27038")
#
sh.enableSharding("cvmc")
#
use cvmc
db.message.insert({"mid":"test"})
#
db.message.ensureIndex({firstname: 1, lastname: 1}, {unique: true});
use admin
# ,
sh.shardCollection("cmvc.message",{"mid":1})
# sh.shardCollection("[dbName.collectionName]",{[keyName]:1})
#
sh.status()
mongoの一般的なコマンド索引
1.ベースインデックス
フィールドageにインデックスを作成します.1(昇順);-1(降順):
db.users.ensureIndex({age:1})
_idは、テーブルの作成時に自動的に作成されるインデックスであり、このインデックスは削除できません.システムに大量のデータがある場合、インデックスの作成は非常に時間のかかる作業であり、バックグラウンドで「backgroud:true」を指定するだけで実行できます.db.t3.ensureIndex({age:1} , {backgroud:true})
2.文書索引インデックスは、任意のタイプのフィールド、さらにはドキュメントを使用できます.
db.factories.insert( { name: "wwl", addr: { city: "Beijing", state: "BJ" } } );
//addr列にインデックスを作成するdb.factories.ensureIndex( { addr : 1 } );
//次のクエリでは、作成したばかりのインデックスを使用します.db.factories.find( { addr: { city: "Beijing", state: "BJ" } } );
//しかし、次のクエリではインデックスは使用されません.クエリの順序がインデックス作成の順序とは異なるためです.db.factories.find( { addr: { state: "BJ" , city: "Beijing"} } );
3.結合インデックス他のデータベース製品と同様に、MongoDBにも組み合わせインデックスがあります.次にaddr....stateにコンビネーションインデックスを作成します.コンビネーションインデックスを作成すると、フィールドの後ろの1が昇順、-1が降順、1が主にソート時または指定範囲内のクエリー時に関係します.
db.factories.ensureIndex( { "addr.city" : 1, "addr.state" : 1 } );
//次のクエリでは、このインデックスが使用されていますdb.factories.find( { "addr.city" : "Beijing", "addr.state" : "BJ" } );
db.factories.find( { "addr.city" : "Beijing" } );
db.factories.find().sort( { "addr.city" : 1, "addr.state" : 1 } );
db.factories.find().sort( { "addr.city" : 1 } );
4.一意のインデックスユニークなインデックスを作成するには、ensureIndexコマンドで「unique:true」を指定します.例えば、表t 4に2つのレコードを挿入した場合にエラーが報告される.
db.t4.ensureIndex({firstname: 1, lastname: 1}, {unique: true});
5.索引の強制使用hintコマンドは、インデックスを強制的に使用できます.
db.t5.find({age:{$lt:30}}).hint({name:1, age:1}).explain()
6.索引の削除//t 3テーブルのすべてのインデックスを削除する
db.t3.dropIndexes()
//t 4テーブルのfirstnameインデックスの削除db.t4.dropIndex({firstname: 1})
本文はブロググループから1文多発などの運営ツールプラットフォームを配布する.OpenWriteリリース