关于java:docker部署mongo-4集群

34次阅读

共计 5948 个字符,预计需要花费 15 分钟才能阅读完成。

前言

​ 为了在测试环境部署新我的项目,决定应用 docker 搭建一条 mongo 集群数据。

筹备

​ 三台测试环境服务器

ip 操作系统
192.168.188.7 centos7
192.168.188.129 centos7
192.168.188.144 centos7

<!–more–>

部署

========== 以下每台都执行 ========================

=========== 装置过程 =================

镜像

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 容器 (每台服务器执行一次):

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 作为端口。

启动第一个分片 – shard1

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

启动第二个分片 – shard2

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

启动第三个分片 – shard3

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

集群

进入其中一个容器配置 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-Server1 正本集:

# 宿主机
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-Server2 正本集:

# 宿主机
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-Server3 正本集:

# 宿主机
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.city 和 addr.state 上建设组合索引。当创立组合索引时,字段前面的 1 示意升序,-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”即可创立惟一索引。例如,往表 t4 中插入 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. 删除索引

// 删除 t3 表中的所有索引

db.t3.dropIndexes()

// 删除 t4 表中的 firstname 索引

db.t4.dropIndex({firstname: 1})

本文由博客群发一文多发等经营工具平台 OpenWrite 公布

正文完
 0