搭建mongodb集群(副本集+分片)
完整的搭建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:10001use admindb.runCommand({"replSetInitiate":{"_id":"db1","members":[{"_id":1,"host":"bluejoe1:10001"},{"_id":2,"host":"bluejoe2:10001"},{"_id":3,"host":"bluejoe3:10001"}]}})mongo bluejoe1:10002use admindb.runCommand({"replSetInitiate":{"_id":"db2","members":[{"_id":1,"host":"bluejoe1:10002"},{"_id":2,"host":"bluejoe2:10002"},{"_id":3,"host":"bluejoe3:10002"}]}})mongo bluejoe1:10003use admindb.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:30000mongos> use admin
switched to db admindb.runCommand({"addShard":"db1/bluejoe1:10001"})
db.runCommand({"addShard":"db2/bluejoe1:10002"})
db.runCommand({"addShard":"db3/bluejoe1:10003"})
查看分片情况:
mongos> db.runCommand({listshards:1})
{"shards" : [{"_id" : "db1","host" : "db1/bluejoe1:10001,bluejoe2:10001,bluejoe3:10001"},{"_id" : "db2","host" : "db2/bluejoe1:10002,bluejoe2:10002,bluejoe3:10002"},{"_id" : "db3","host" : "db3/bluejoe1:10003,bluejoe2:10003,bluejoe3:10003"}],"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>
搭建mongodb集群(副本集+分片)相关推荐
- MongoDB集群——副本集
1. 副本集的结构及原理 副本集包括三种节点:主节点.从节点.仲裁节点. 主节点负责处理客户端请求,读.写数据, 记录在其上所有操作的oplog: 从节点定期轮询主节点获取这些操作,然后对自己的数据副 ...
- mongodb集群-副本集(CSRS)
一.概述 (1)MongoDB复制是将数据同步在多个服务器的过程. (2)复制提供了数据的冗余备份,并在多个服务器上存储数据副本,提高了数据的可用性, 并可以保证数据的安全性. (3)复制还允许您从硬 ...
- Mongodb集群 - 副本集内部选举机制
今天有同事问我,副本集两个节点怎么做高可用,我也很好奇两个节点用副本集的方式怎么做高可用?查了一些资料,发现至少要三个节点才能做,也算是给自己普及理论知识. 选举算法 mongodb副本集的选举机制采 ...
- mongo集群——副本集模式
文章目录 mongo扩容方案/使用副本集 1.增加harddisk 2.新加一台服务器作为mongodb的从节点,设置主从模式 3.采用mongodb的副本集模式 4.mongo数据的备份与还原 5. ...
- ELK 集群 + Redis 集群 + Nginx ,分布式的实时日志(数据)搜集和分析的监控系统搭建,简单上手使用
简述 ELK实际上是三个工具的集合,ElasticSearch + Logstash + Kibana,这三个工具组合形成了一套实用.易用的监控架构,很多公司利用它来搭建可视化的海量日志分析平台. 官 ...
- linux下mongdb绑定ip,Linux下MongoDB安装及副本集配置 | 聂扬帆博客
最近开始接触了MongoDB的安装配置,易部署.易使用,存储数据非常方便是它的特点. 0x00 副本集原理 MongDB副本集故障转移功能得益于它的选举机制.选举机制采用了Bully算法,可以很方便 ...
- mysql mongodb 集群_MongoDB 集群
MongoDB 集群中包含一个自动分片模块 (mongos). 自动分片可以用于构建一个大规模的可扩展的数据库集群,这个集群可以并入动态增加的机器.自动建立一个水平扩展的数据库集群系统,将数据库分表存 ...
- kafka 集群_Kafka集群搭建
Kafka集群搭建 准备工作 Kafka 依赖 ZooKeeper ,所以需要提前安装好 ZooKeeper ,启动单机的zk即可 .关于安装ZooKeeper的流程可以参考我之前写的: Fantas ...
- Hadoop集群+Spark集群搭建基于VMware虚拟机教程+安装运行Docker
Hadoop集群+Spark集群搭建+安装运行Docker 目录 一.准备工作 二.在虚拟机上安装CentOS 7 三.hdfs的环境准备 四.hdfs配置文件的修改 五.克隆(复制虚拟机) 六.制作 ...
- MongoDB 复制(副本集)学习
MongoDB 复制(副本集)学习 replication set复制集, 复制集,多台服务器维护相同的数据副本,提高服务器的可用性. MongoDB复制是将数据同步在多个服务器的过程. 复制提供了数 ...
最新文章
- 文件系统管理 之 Linux 查看磁盘分区、文件系统、使用情况的命令和相关工具介绍...
- Spring系列之beanFactory与ApplicationContext
- 无根树转有根树的一般方法
- 大数系列三——斐波那契数列——高效万进制,亿进制
- 读javascript高级程序设计13-JSON
- CentOS7搭建lamp环境
- 为了帮粉丝完成毕业设计,我发现了一款私活神器
- CVPR2021 DRConv:即插即用!旷视孙剑、张祥雨团队提出动态区域感知的卷积,涨点显著!...
- linux ruby作用域,浅谈ruby语言中的一些概念(lambda, proc, block)
- 大众仪表板上为什么30km,50km处要标红?
- R语言入门1:安装R和RStudio
- 楚留香ai识别人脸_【专利解密】商汤科技:AI加持人脸识别
- 不用找,你想要的人物Flash动画素材都在这里
- 创建企业级地理数据库
- win10系统设置插入鼠标禁用触控板的方法
- 嵌入Circle映射和逐维小孔成像反向学习的鲸鱼优化算法-附代码
- 二层交换机与三层交换机交换原理
- 【2021年度总结】不断学习的卡卡
- MKS GEN_L V2.1 Klipper固件使用说明书
- VMvare虚拟机删除快照时卡住的解决办法