前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MongoDB 4.0 Sharded Cluster部署

MongoDB 4.0 Sharded Cluster部署

作者头像
星哥玩云
发布2022-08-17 16:58:48
2730
发布2022-08-17 16:58:48
举报
文章被收录于专栏:开源部署开源部署

本文基于MongoDB 4.0介绍如何搭建shard集群服务,环境如下表所示:

MongoDB 4.0  Sharded Cluster部署
MongoDB 4.0 Sharded Cluster部署

1、创建相关目录

在三个节点分别创建以下目录:

代码语言:javascript
复制
[root@hdp06 ~]# mkdir -p /data/mongo/{config,router,shard}
[root@hdp06 ~]# mkdir -p /data/mongo/config/{data,logs}
[root@hdp06 ~]# mkdir -p /data/mongo/router/logs
[root@hdp06 ~]# mkdir -p /data/mongo/shard/{data,logs}
[root@hdp06 ~]# mkdir -p /data/mongo/shard/data/{shard1,shard2,shard3}
[root@hdp06 ~]# chown -R mongod:mongod /data

2、配置Configsvr服务

2.1 创建配置文件
代码语言:javascript
复制
[root@hdp06 ~]# vi /data/mongo/config/mongodb.config 
net:
  bindIp: 0.0.0.0
  port: 27017
processManagement:
  fork: "true"
replication:
  replSetName: configRS
sharding:
  clusterRole: configsvr
storage:
  dbPath: /data/mongo/config/data
systemLog:
  destination: file
  path: /data/mongo/config/logs/mongodb.log
2.2 同步配置文件
代码语言:javascript
复制
[root@hdp06 ~]# scp /data/mongo/config/mongodb.config hdp07:/data/mongo/config
[root@hdp06 ~]# scp /data/mongo/config/mongodb.config hdp08:/data/mongo/config
2.3 启动configsvr服务
代码语言:javascript
复制
[root@hdp06 ~]# mongod -f /data/mongo/config/mongodb.config 
[root@hdp07 ~]# mongod -f /data/mongo/config/mongodb.config 
[root@hdp08 ~]# mongod -f /data/mongo/config/mongodb.config 
2.4 初始化集群

在一个节点上执行集群初始化操作:

代码语言:javascript
复制
[root@hdp06 ~]# mongo
>rs.initiate(
  {
    _id: "configRS",
    configsvr: true,
    members: [
      { _id : 0, host : "hdp06.thinkjoy.tt:27017" },
      { _id : 1, host : "hdp07.thinkjoy.tt:27017" },
      { _id : 2, host : "hdp08.thinkjoy.tt:27017" }
    ]
  }
)
--输出结果如下
{
        "ok" : 1,
        "operationTime" : Timestamp(1534816254, 1),
        "$gleStats" : {
                "lastOpTime" : Timestamp(1534816254, 1),
                "electionId" : ObjectId("000000000000000000000000")
        },
        "lastCommittedOpTime" : Timestamp(0, 0),
        "$clusterTime" : {
                "clusterTime" : Timestamp(1534816254, 1),
                "signature" : {
                        "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
                        "keyId" : NumberLong(0)
                }
        }
}
--其他节点验证
[root@hdp07 ~]# mongo
......
configRS:SECONDARY> rs.status()
{
        "set" : "configRS",
        "date" : ISODate("2018-08-21T01:52:59.734Z"),
        "myState" : 2,
        "term" : NumberLong(1),
        "syncingTo" : "hdp06.thinkjoy.tt:27017",
        "syncSourceHost" : "hdp06.thinkjoy.tt:27017",
        "syncSourceId" : 0,
        "configsvr" : true,
        "heartbeatIntervalMillis" : NumberLong(2000),
        "optimes" : {
                "lastCommittedOpTime" : {
                        "ts" : Timestamp(1534816364, 1),
                        "t" : NumberLong(1)
                },
                "readConcernMajorityOpTime" : {
                        "ts" : Timestamp(1534816364, 1),
                        "t" : NumberLong(1)
                },
                "appliedOpTime" : {
                        "ts" : Timestamp(1534816364, 1),
                        "t" : NumberLong(1)
                },
                "durableOpTime" : {
                        "ts" : Timestamp(1534816364, 1),
                        "t" : NumberLong(1)
                }
        },
        "lastStableCheckpointTimestamp" : Timestamp(1534816327, 1),
        "members" : [
                {
                        "_id" : 0,
                        "name" : "hdp06.thinkjoy.tt:27017",
                        "health" : 1,
                        "state" : 1,
                        "stateStr" : "PRIMARY",
                        "uptime" : 115,
                        "optime" : {
                                "ts" : Timestamp(1534816364, 1),
                                "t" : NumberLong(1)
                        },
                        "optimeDurable" : {
                                "ts" : Timestamp(1534816364, 1),
                                "t" : NumberLong(1)
                        },
                        "optimeDate" : ISODate("2018-08-21T01:52:44Z"),
                        "optimeDurableDate" : ISODate("2018-08-21T01:52:44Z"),
                        "lastHeartbeat" : ISODate("2018-08-21T01:52:57.945Z"),
                        "lastHeartbeatRecv" : ISODate("2018-08-21T01:52:59.093Z"),
                        "pingMs" : NumberLong(0),
                        "lastHeartbeatMessage" : "",
                        "syncingTo" : "",
                        "syncSourceHost" : "",
                        "syncSourceId" : -1,
                        "infoMessage" : "",
                        "electionTime" : Timestamp(1534816265, 1),
                        "electionDate" : ISODate("2018-08-21T01:51:05Z"),
                        "configVersion" : 1
                },
                {
                        "_id" : 1,
                        "name" : "hdp07.thinkjoy.tt:27017",
                        "health" : 1,
                        "state" : 2,
                        "stateStr" : "SECONDARY",
                        "uptime" : 320,
                        "optime" : {
                                "ts" : Timestamp(1534816364, 1),
                                "t" : NumberLong(1)
                        },
                        "optimeDate" : ISODate("2018-08-21T01:52:44Z"),
                        "syncingTo" : "hdp06.thinkjoy.tt:27017",
                        "syncSourceHost" : "hdp06.thinkjoy.tt:27017",
                        "syncSourceId" : 0,
                        "infoMessage" : "",
                        "configVersion" : 1,
                        "self" : true,
                        "lastHeartbeatMessage" : ""
                },
                {
                        "_id" : 2,
                        "name" : "hdp08.thinkjoy.tt:27017",
                        "health" : 1,
                        "state" : 2,
                        "stateStr" : "SECONDARY",
                        "uptime" : 115,
                        "optime" : {
                                "ts" : Timestamp(1534816364, 1),
                                "t" : NumberLong(1)
                        },
                        "optimeDurable" : {
                                "ts" : Timestamp(1534816364, 1),
                                "t" : NumberLong(1)
                        },
                        "optimeDate" : ISODate("2018-08-21T01:52:44Z"),
                        "optimeDurableDate" : ISODate("2018-08-21T01:52:44Z"),
                        "lastHeartbeat" : ISODate("2018-08-21T01:52:57.945Z"),
                        "lastHeartbeatRecv" : ISODate("2018-08-21T01:52:57.944Z"),
                        "pingMs" : NumberLong(0),
                        "lastHeartbeatMessage" : "",
                        "syncingTo" : "hdp06.thinkjoy.tt:27017",
                        "syncSourceHost" : "hdp06.thinkjoy.tt:27017",
                        "syncSourceId" : 0,
                        "infoMessage" : "",
                        "configVersion" : 1
                }
        ],
        "ok" : 1,
        "operationTime" : Timestamp(1534816364, 1),
        "$gleStats" : {
                "lastOpTime" : Timestamp(0, 0),
                "electionId" : ObjectId("000000000000000000000000")
        },
        "lastCommittedOpTime" : Timestamp(1534816364, 1),
        "$clusterTime" : {
                "clusterTime" : Timestamp(1534816364, 1),
                "signature" : {
                        "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
                        "keyId" : NumberLong(0)
                }
        }
}

3、配置Sharded服务

3.1 创建配置文件
代码语言:javascript
复制
root@hdp06 ~]# vi /data/mongo/shard/data/shard1/mongod.shard1
net:
  bindIp: 0.0.0.0
  port: 27019
processManagement:
  fork: "true"
replication:
  replSetName: myShard_1
sharding:
  clusterRole: shardsvr
storage:
  dbPath: /data/mongo/shard/data/shard1
systemLog:
  destination: file
  path: /data/mongo/shard/logs/shard1/mongodbs1.log
[root@hdp06 ~]# vi /data/mongo/shard/data/shard2/mongod.shard2
net:
  bindIp: 0.0.0.0
  port: 27020
processManagement:
  fork: "true"
replication:
  replSetName: myShard_2
sharding:
  clusterRole: shardsvr
storage:
  dbPath: /data/mongo/shard/data/shard2
systemLog:
  destination: file
  path: /data/mongo/shard/logs/shard2/mongodbs2.log
[root@hdp06 ~]# vi /data/mongo/shard/data/shard3/mongod.shard3
net:
  bindIp: 0.0.0.0
  port: 27021
processManagement:
  fork: "true"
replication:
  replSetName: myShard_3
sharding:
  clusterRole: shardsvr
storage:
  dbPath: /data/mongo/shard/data/shard3
systemLog:
  destination: file
  path: /data/mongo/shard/logs/shard3/mongodbs3.log
3.2 同步配置文件
代码语言:javascript
复制
[root@hdp06 ~]# scp -r /data/mongo/shard/data/* hdp07:/data/mongo/shard/data/
[root@hdp06 ~]# scp -r /data/mongo/shard/data/* hdp08:/data/mongo/shard/data/
3.3 启动sharded服务
代码语言:javascript
复制
[root@hdp06 ~]# mongod -f /data/mongo/shard/data/shard1/mongod.shard1
[root@hdp06 ~]# mongod -f /data/mongo/shard/data/shard2/mongod.shard2
[root@hdp06 ~]# mongod -f /data/mongo/shard/data/shard3/mongod.shard3
[root@hdp07 ~]# mongod -f /data/mongo/shard/data/shard1/mongod.shard1
[root@hdp07 ~]# mongod -f /data/mongo/shard/data/shard2/mongod.shard2
[root@hdp07 ~]# mongod -f /data/mongo/shard/data/shard3/mongod.shard3
[root@hdp08 ~]# mongod -f /data/mongo/shard/data/shard1/mongod.shard1
[root@hdp08 ~]# mongod -f /data/mongo/shard/data/shard2/mongod.shard2
[root@hdp08 ~]# mongod -f /data/mongo/shard/data/shard3/mongod.shard3
3.4 初始化sharded服务

在任意一个节点执行初始化服务。

代码语言:javascript
复制
[root@hdp06 ~]# mongod --port 27019
> rs.initiate({_id:"myShard_1",members:[{_id:1,host:"hdp06.thinkjoy.tt:27019",priority:2},{_id:2,host:"hdp07.thinkjoy.tt:27019"},{_id:3,host:"hdp08.thinkjoy.tt:27019"}]})
{
        "ok" : 1,
        "operationTime" : Timestamp(1534818896, 1),
        "$clusterTime" : {
                "clusterTime" : Timestamp(1534818896, 1),
                "signature" : {
                        "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
                        "keyId" : NumberLong(0)
                }
        }
}
[root@hdp06 ~]# mongod --port 27020
> rs.initiate({_id:"myShard_2",members:[{_id:1,host:"hdp06.thinkjoy.tt:27020",priority:2},{_id:2,host:"hdp07.thinkjoy.tt:27020"},{_id:3,host:"hdp08.thinkjoy.tt:27020"}]})
{
        "operationTime" : Timestamp(1534818908, 2),
        "ok" : 0,
        "errmsg" : "already initialized",
        "code" : 23,
        "codeName" : "AlreadyInitialized",
        "$clusterTime" : {
                "clusterTime" : Timestamp(1534818908, 2),
                "signature" : {
                        "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
                        "keyId" : NumberLong(0)
                }
        }
}
[root@hdp06 ~]# mongod --port 27021
> rs.initiate({_id:"myShard_3",members:[{_id:1,host:"hdp06.thinkjoy.tt:27021",priority:2},{_id:2,host:"hdp07.thinkjoy.tt:27021"},{_id:3,host:"hdp08.thinkjoy.tt:27021"}]})
{
        "operationTime" : Timestamp(1534818928, 1),
        "ok" : 0,
        "errmsg" : "already initialized",
        "code" : 23,
        "codeName" : "AlreadyInitialized",
        "$clusterTime" : {
                "clusterTime" : Timestamp(1534818928, 1),
                "signature" : {
                        "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
                        "keyId" : NumberLong(0)
                }
        }
}

4、配置Mongos服务

代码语言:javascript
复制
[root@hdp06 ~]# vi /data/mongo/router/mongod.router
net:
  bindIp: 0.0.0.0
  port: 27018
processManagement:
  fork: "true"
sharding:
  configDB: configRS/hdp06.thinkjoy.tt:27017,hdp07.thinkjoy.tt:27017,hdp08.thinkjoy.tt:27017
systemLog:
  destination: file
  path: /data/mongo/router/logs/mongo_router.log
[root@hdp06 ~]# scp /data/mongo/router/mongod.router hdp07:/data/mongo/router
[root@hdp06 ~]# scp /data/mongo/router/mongod.router hdp08:/data/mongo/router
[root@hdp06 ~]# mongos -f /data/mongo/router/mongod.router
[root@hdp07 ~]# mongos -f /data/mongo/router/mongod.router
[root@hdp08 ~]# mongos -f /data/mongo/router/mongod.router

配置分片,将主片添加至集群,如下:

代码语言:javascript
复制
[root@hdp06 ~]# mongo --port 27018
mongos> show dbs
admin   0.000GB
config  0.000GB
mongos> use admin
switched to db admin
mongos> db.runCommand({"addShard":"myShard_1/hdp06.thinkjoy.tt:27019" ,"maxsize":1024})
{
        "shardAdded" : "myShard_1",
        "ok" : 1,
        "operationTime" : Timestamp(1534819816, 6),
        "$clusterTime" : {
                "clusterTime" : Timestamp(1534819816, 6),
                "signature" : {
                        "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
                        "keyId" : NumberLong(0)
                }
        }
}
mongos> db.runCommand({"addShard":"myShard_2/hdp06.thinkjoy.tt:27020" ,"maxsize":1024})
{
        "shardAdded" : "myShard_2",
        "ok" : 1,
        "operationTime" : Timestamp(1534819823, 5),
        "$clusterTime" : {
                "clusterTime" : Timestamp(1534819823, 5),
                "signature" : {
                        "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
                        "keyId" : NumberLong(0)
                }
        }
}
mongos> db.runCommand({"addShard":"myShard_3/hdp06.thinkjoy.tt:27021" ,"maxsize":1024})
{
        "shardAdded" : "myShard_3",
        "ok" : 1,
        "operationTime" : Timestamp(1534819830, 5),
        "$clusterTime" : {
                "clusterTime" : Timestamp(1534819830, 5),
                "signature" : {
                        "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
                        "keyId" : NumberLong(0)
                }
        }

Shard cluster状态查询:

代码语言:javascript
复制
mongos> sh.status()
--- Sharding Status --- 
  sharding version: {
        "_id" : 1,
        "minCompatibleVersion" : 5,
        "currentVersion" : 6,
        "clusterId" : ObjectId("5b7b700b1cfaf6f26d2d0284")
  }
  shards:
        {  "_id" : "myShard_1",  "host" : "myShard_1/hdp06.thinkjoy.tt:27019,hdp07.thinkjoy.tt:27019,hdp08.thinkjoy.tt:27019",  "state" : 1 }
        {  "_id" : "myShard_2",  "host" : "myShard_2/hdp06.thinkjoy.tt:27020,hdp07.thinkjoy.tt:27020,hdp08.thinkjoy.tt:27020",  "state" : 1 }
        {  "_id" : "myShard_3",  "host" : "myShard_3/hdp06.thinkjoy.tt:27021,hdp07.thinkjoy.tt:27021,hdp08.thinkjoy.tt:27021",  "state" : 1 }
  active mongoses:
        "4.0.1" : 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" : "MyDB",  "primary" : "myShard_2",  "partitioned" : true,  "version" : {  "uuid" : UUID("202a1d72-aa92-403d-a2a6-c7c3aa273323"),  "lastMod" : 1 } }
                MyDB.chapter
                        shard key: { "id" : 1, "subjectId" : 1 }
                        unique: false
                        balancing: true
                        chunks:
                                myShard_2     1
                        { "id" : { "$minKey" : 1 }, "subjectId" : { "$minKey" : 1 } } -->> { "id" : { "$maxKey" : 1 }, "subjectId" : { "$maxKey" : 1 } } on : myShard_2 Timestamp(1, 0) 
                MyDB.question_knowledge_basic_id
                        shard key: { "knowledge_basic_id" : 1, "question_id" : 1 }
                        unique: false
                        balancing: true
                        chunks:
                                myShard_2     1
                        {
                                "knowledge_basic_id" : { "$minKey" : 1 },
                                "question_id" : { "$minKey" : 1 }
                        } -->> {
                                "knowledge_basic_id" : { "$maxKey" : 1 },
                                "question_id" : { "$maxKey" : 1 }
                        } on : myShard_2 Timestamp(1, 0) 
        {  "_id" : "config",  "primary" : "config",  "partitioned" : true }
                config.system.sessions
                        shard key: { "_id" : 1 }
                        unique: false
                        balancing: true
                        chunks:
                                myShard_1     1
                        { "_id" : { "$minKey" : 1 } } -->> { "_id" : { "$maxKey" : 1 } } on : myShard_1 Timestamp(1, 0) 

5、对库启用分片

这里创建了一个mydb库,使用以下命令对其启用分片功能。

代码语言:javascript
复制
mongos>sh.enableSharding("MyDB")
{
        "ok" : 1,
        "operationTime" : Timestamp(1534837173, 2214),
        "$clusterTime" : {
                "clusterTime" : Timestamp(1534837173, 2408),
                "signature" : {
                        "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
                        "keyId" : NumberLong(0)
                }
        }
}

下面对mydb的chapter启用分片技术:

代码语言:javascript
复制
--创建一个索引
mongos> use MyDB
switched to db MyDB
mongos> db.chapter.createIndex({"id" : 1,"subjectId" : 1},{"name" : "new_idx"})
--对表进行分片
mongos> sh.shardCollection('MyDB.chapter',{id:1,subjectId:1})
{
        "collectionsharded" : "MyDB.chapter",
        "collectionUUID" : UUID("a5f3b95c-ced6-4ae5-82d8-06d36176cbef"),
        "ok" : 1,
        "operationTime" : Timestamp(1535077873, 13),
        "$clusterTime" : {
                "clusterTime" : Timestamp(1535077873, 13),
                "signature" : {
                        "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
                        "keyId" : NumberLong(0)
                }
        }
}

6、Shard集群监控

针对MongoDB的监控除了使用第三方软件外,强烈推荐是官方提供的Ops Manager,如下图所示:

MongoDB 4.0  Sharded Cluster部署
MongoDB 4.0 Sharded Cluster部署
MongoDB 4.0  Sharded Cluster部署
MongoDB 4.0 Sharded Cluster部署
MongoDB 4.0  Sharded Cluster部署
MongoDB 4.0 Sharded Cluster部署
MongoDB 4.0  Sharded Cluster部署
MongoDB 4.0 Sharded Cluster部署
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、创建相关目录
  • 2、配置Configsvr服务
    • 2.1 创建配置文件
      • 2.2 同步配置文件
        • 2.3 启动configsvr服务
          • 2.4 初始化集群
          • 3、配置Sharded服务
            • 3.1 创建配置文件
              • 3.2 同步配置文件
                • 3.3 启动sharded服务
                  • 3.4 初始化sharded服务
                  • 4、配置Mongos服务
                  • 5、对库启用分片
                  • 6、Shard集群监控
                  相关产品与服务
                  云数据库 MongoDB
                  腾讯云数据库 MongoDB(TencentDB for MongoDB)是腾讯云基于全球广受欢迎的 MongoDB 打造的高性能 NoSQL 数据库,100%完全兼容 MongoDB 协议,支持跨文档事务,提供稳定丰富的监控管理,弹性可扩展、自动容灾,适用于文档型数据库场景,您无需自建灾备体系及控制管理系统。
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档