docker配備mongo 4.*クラスタ

8883 ワード

前言
テスト環境に新しいプロジェクトを導入するために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プロファイル1
vim /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プロファイル2
vim /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プロファイル3
vim /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リリース