完整的搭建mongodb集群(副本集+分片)的例子。。。
准备四台机器,分别是bluejoe1,bluejoe2,bluejoe3,以及bluejoe0
副本集及分片策略确定如下:
- 将创建3个副本集,命名为shard1,shard2,shard3;
- 以上3个副本集作为3个分片;
- 每个副本集包含3个副本(主、辅1、辅2);
- 副本分开存储,即shard1存在bluejoe1、bluejoe2、bluejoe3上各一份。。。以此类推
- 将创建3个配置库实例,一台机器一个
- bluejoe0上配置一个mongos(mongos一般可以配置在应用端)
画了一个图:
具体操作步骤如下:
- 在bluejoe1上下载mongdb安装包;
- 解压至/usr/local/mongdb(注意改名);
- 创建data/db1,db2,db3目录,启动3个mongod实例,注意replSet的名字:
- mkdir /usr/local/mongodb/data/db1 /usr/local/mongodb/data/db2 /usr/local/mongodb/data/db3
- nohup /usr/local/mongodb/bin/mongod --dbpath /usr/local/mongodb/data/db1 --port 10001 --replSet db1 --logpath=/usr/local/mongodb/log/db1.log &
- nohup /usr/local/mongodb/bin/mongod --dbpath /usr/local/mongodb/data/db2 --port 10002 --replSet db2 --logpath=/usr/local/mongodb/log/db2.log &
- nohup /usr/local/mongodb/bin/mongod --dbpath /usr/local/mongodb/data/db3 --port 10003 --replSet db3 --logpath=/usr/local/mongodb/log/db3.log &
- 使用scp命令,将mongodb目录复制至bluejoe2和bluejoe3机器,并按照第3步启动每台机器上的3个实例;
- 初始化副本:
- mongo bluejoe1:10001
-
- use admin
-
- db.runCommand(
- {
- "replSetInitiate":
- {
- "_id":"db1",
- "members":
- [
- {
- "_id":1,
- "host":"bluejoe1:10001"
- },
- {
- "_id":2,
- "host":"bluejoe2:10001"
- },
- {
- "_id":3,
- "host":"bluejoe3:10001"
- }
- ]
- }
- })
-
-
- mongo bluejoe1:10002
-
- use admin
-
- db.runCommand(
- {
- "replSetInitiate":
- {
- "_id":"db2",
- "members":
- [
- {
- "_id":1,
- "host":"bluejoe1:10002"
- },
- {
- "_id":2,
- "host":"bluejoe2:10002"
- },
- {
- "_id":3,
- "host":"bluejoe3:10002"
- }
- ]
- }
- })
-
- mongo bluejoe1:10003
-
- use admin
-
- db.runCommand(
- {
- "replSetInitiate":
- {
- "_id":"db3",
- "members":
- [
- {
- "_id":1,
- "host":"bluejoe1:10003"
- },
- {
- "_id":2,
- "host":"bluejoe2:10003"
- },
- {
- "_id":3,
- "host":"bluejoe3:10003"
- }
- ]
- }
- })
- 观察副本集的实时复制特性
- 连接上bluejoe1:10001,看到db1:PRIMARY>的字样,说明它是db1的主节点
- 创建一张新表,创建几条测试记录
- 连接上bluejoe3:10002,看到shard1:SECONDARY>的字样,说明它是shard1的辅助节点
- 注意此时无法查询前面新增的记录,会报错not master and slaveOk=false
- 回到bluejoe1:10001,设置slaveOk
- db.getMongo().setSlaveOk()
- 再回到bluejoe3:10002,即可看到主节点写入的记录
- 观察副本集的故障转移特性
- 杀掉bluejoe1:10001的进程
- 再次连接上bluejoe3:10002,看到shard1:PRIMARY>的字样,说明它已经变成shard1的主节点
- 如果这时再启动bluejoe1:10001,则发现它已经变成shard1:SECONDARY>
- 创建data/configdb,启动配置库实例:
- mkdir /usr/local/mongodb/data/configdb
- nohup /usr/local/mongodb/bin/mongod --dbpath /usr/local/mongodb/data/configdb --port 20000 --logpath=/usr/local/mongodb/log/configdb.log &
如果需要关闭mongod服务,可使用--shutdown选项,如:
- /usr/local/mongodb/bin/mongod --dbpath /usr/local/mongodb/data/configdb --shutdown
到现在为止应该有12个mongd实例,其中3个为配置库实例,剩下的属于3个副本集;
- 接下来管理分片,在bluejoe0上启动mongs:
- nohup /usr/local/mongodb/bin/mongos --port 30000 --configdb bluejoe1:20000,bluejoe2:20000,bluejoe3:20000 &
- 连接上mongos,配置分片信息:
- mongo bluejoe0:30000
-
- mongos> use admin
- switched to db admin
-
- db.runCommand({"addShard":"db1/bluejoe1:10001"})
- db.runCommand({"addShard":"db2/bluejoe1:10002"})
- db.runCommand({"addShard":"db3/bluejoe1:10003"})
- 查看分片情况:
- mongos> db.runCommand({listshards:1})
- {
- <span style="white-space:pre"> </span>"shards" : [
- <span style="white-space:pre"> </span>{
- <span style="white-space:pre"> </span>"_id" : "db1",
- <span style="white-space:pre"> </span>"host" : "db1/bluejoe1:10001,bluejoe2:10001,bluejoe3:10001"
- <span style="white-space:pre"> </span>},
- <span style="white-space:pre"> </span>{
- <span style="white-space:pre"> </span>"_id" : "db2",
- <span style="white-space:pre"> </span>"host" : "db2/bluejoe1:10002,bluejoe2:10002,bluejoe3:10002"
- <span style="white-space:pre"> </span>},
- <span style="white-space:pre"> </span>{
- <span style="white-space:pre"> </span>"_id" : "db3",
- <span style="white-space:pre"> </span>"host" : "db3/bluejoe1:10003,bluejoe2:10003,bluejoe3:10003"
- <span style="white-space:pre"> </span>}
- <span style="white-space:pre"> </span>],
- <span style="white-space:pre"> </span>"ok" : 1
- }
可以看出,尽管注册的时候只是提供了副本集的主节点,但mongos已知晓了各辅助节点;
- 对某个库开启分片功能:
- mongos> db.runCommand({"enablesharding":"test"})
- { "ok" : 1 }
- mongos> db.runCommand({"shardcollection":"test.person","key":{_id:'hashed'}})
- { "collectionsharded" : "test.person", "ok" : 1 }
- 插入测试数据:
- mongos> for(var i=0;i<10;i++){db.person.insert({name:"bluejoe"+i});}
- WriteResult({ "nInserted" : 1 })
- 查看数据分片存储情况:
- [root@hadoop0 ~]# mongo bluejoe3:10002
- MongoDB shell version: 2.6.5
- connecting to: bluejoe3:10002/test
- shard1:PRIMARY> db.person.find()
- { "_id" : ObjectId("546ff1013a0d0ec68b42a914"), "name" : "bluejoe0" }
- { "_id" : ObjectId("546ff1013a0d0ec68b42a915"), "name" : "bluejoe1" }
- { "_id" : ObjectId("546ff1013a0d0ec68b42a91a"), "name" : "bluejoe6" }
- { "_id" : ObjectId("546ff1013a0d0ec68b42a91b"), "name" : "bluejoe7" }
- { "_id" : ObjectId("546ff1013a0d0ec68b42a91c"), "name" : "bluejoe8" }
- shard1:PRIMARY> exit
- bye
- [root@hadoop0 ~]# mongo bluejoe2:10001
- MongoDB shell version: 2.6.5
- connecting to: bluejoe2:10001/test
- shard2:PRIMARY> db.person.find()
- { "_id" : ObjectId("546ff1013a0d0ec68b42a918"), "name" : "bluejoe4" }
- shard2:PRIMARY> exit
- bye
- [root@hadoop0 ~]# mongo bluejoe3:10001
- MongoDB shell version: 2.6.5
- connecting to: bluejoe3:10001/test
- shard3:PRIMARY> db.person.find()
- { "_id" : ObjectId("546ff1013a0d0ec68b42a916"), "name" : "bluejoe2" }
- { "_id" : ObjectId("546ff1013a0d0ec68b42a917"), "name" : "bluejoe3" }
- { "_id" : ObjectId("546ff1013a0d0ec68b42a919"), "name" : "bluejoe5" }
- { "_id" : ObjectId("546ff1013a0d0ec68b42a91d"), "name" : "bluejoe9" }
- shard3:PRIMARY>
分享到:
相关推荐
MongoDB4.2分片及副本集群搭建 MongoDB集群 MongoDB分片 MongoDB副本 MongoDB副本集群
centos7.0+mongodb 3.4 集群搭建:分片+副本集。3台虚拟机。如有问题可留言。
k8s 安装 mongodb 分片(Sharding)+ 副本集(Replica Set)
搭建Mongodb分片集群的步骤文档,度娘上很多坑,被坑的可以看看,本文档专门埋坑。
公司单节点升级到分片下,搜索了一圈大多数MongoDB集群的部署方案都是分片+副本集,没有讲述如何从单节点升级到分片+复制集的方法,亲自试验后记录整个过程以及中间的参考内容和疑难解决,以备后查。内容包含复制集+...
mongodb的集群搭建方式主要有三种,主从模式,Replica set模式,sharding模式, 三种模式各有优劣,适用于不同的场合,属Replica set应用最为广泛,主从模式现在用的较少,sharding模式最为完备,但配置维护较为复杂 ...
mongodb 分片集群搭建过程(无副本),详细操作步骤,linux命令
公司单节点升级到分片下,搜索了一圈大多数 MongoDB 集群的部署方案都是分片+副本集,没有讲述如何从单节点升级到分片+复制集的方法,亲自试验后记录整个过程以及中间的参考内容和疑难解 决,以备后查。内容包含复制...
目录 1 MongoDB的简介和安装启动.mp4 2 MongoDB服务器的启动优化.mp4 3 MongoDB客户端基础使用.mp4 4 MongoDB集合的多种查询条件.mp4 5 MongoDB索引查询与建立.mp4 ...17 MongoDB分片集群的使用介绍.mp4
(3) 请在报告中使用文字和截图详细描述MongoDB分片集群搭建及配置的主要步骤: - 搭建配置集服务器(Mongod) - 搭建分片集服务器(Mongod) - 搭建路由节点服务器(Mongos) - 添加分片集到集群 - 创建数据库...
mongodb在单机上搭建分片副本集群. 1.安装mongodb。2.准备好配置文件夹。3.创建日志文件。4.启动配置进程(config servers)。5.启动路由进程(mongos)。6.启动分片进程(shard servers)。7.开始设置分片副本集。8.设置...
mongodb集群部署脚本,包括mongos启动、mongodb config启动,mongodb分片启动,mongodb副本集仲部署等脚本
mongodb 是最常用的 nodql 数据库,在数据库排名中已经上升到了前六。这篇文章介绍如何搭建高可用的 mongodb(分片+副本)集群。
MongoDB4.2分片及副本集群搭建详细指导手册,详细描述了MongoDB4.2数据库服务器集群的搭建以及副本和分片服务的配置过程及具体操作指令。
由于公司业务需要,我们打算自己搭建 MongoDB 的服务,因为 MongoDB 的云数据库好贵,我们这次采用副本集的方式来搭建集群,三台服务器,一主、一副、一仲裁 基本概念 Replica Set 副本集:一个副本集就是一组 ...
文档结构图 Mongodb集群搭建的方式 1.Master-Slaver 2.Replica Set 2.1什么是ReplicaSet2.2副本集的搭建 3.Sharding 3.1什么事Sharding3.2分片的搭建3.3片键的选择 参考: ...
在上一篇文章《搭建高可用MongoDB集群(一)——配置MongoDB》提到了几个问题还没有解决。1.主节点挂了能否自动切换连接?目前需要手工切换。2.主节点的读写压力过大如何解决?3.从节点每个上面的数据都是对数据库...
详细讲解mongodb高性能、高可用集群的搭建步骤,包括副本集与分片。每一步都有解释和说明,包括整个的集群结构,学习mongodb的不要错过这个资源
这篇文章介绍如何搭建高可用的mongodb(分片+副本)集群,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍: 在搭建集群之前,需要首先了解几个概念:路由,分片、副本集、配置服务器等。 相关概念 ...
mongodb 复制 分片 恢复 认证,教你如何搭建 主从复制 副本集 集群分片