搭建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: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>
搭建mongodb集群(副本集+分片)的更多相关文章
- Mongodb分布式集群副本集+分片
目录 简介 1. 副本集 1.1 MongoDB选举的原理 1.2 复制过程 2. 分片技术 2.1 角色 2.2 分片的片键 2.3 片键分类 环境介绍 1.获取软件包 2.创建路由.配置.分片等的 ...
- 搭建高可用mongodb集群—— 副本集
转自:http://www.lanceyan.com/tech/mongodb/mongodb_repset1.html 在上一篇文章<搭建高可用MongoDB集群(一)——配置MongoDB& ...
- MongoDB 高可用集群副本集+分片搭建
MongoDB 高可用集群搭建 一.架构概况 192.168.150.129192.168.150.130192.168.150.131 参考文档:https://www.cnblogs.com/va ...
- MongoDB 3.4 分片集群副本集 认证
连接到router所在的MongoDB Shell 我本机端口设置在50000上 mongo --port 接下来的流程和普通数据库添加用户权限一样 db.createUser({user:&quo ...
- MongoDB集群——副本集
1. 副本集的结构及原理 副本集包括三种节点:主节点.从节点.仲裁节点.主节点负责处理客户端请求,读.写数据, 记录在其上所有操作的oplog: 从节点定期轮询主节点获取这些操作,然后对自己的数据副本 ...
- window配置mongodb集群(副本集)
参数解释: dbpath:数据存放目录 logpath:日志存放路径 pidfilepath:进程文件,有利于关闭服务 logappend:以追加的方式记录日志(boolean值) replSet:副 ...
- kubernetes上安装MongoDB-3.6.5集群副本集方式
一.安装部署: 想直接一步创建集群的小伙伴直接按以下步骤安装(再往后是记录自己出过的错): 1.生成docker镜像: docker build -t 144.202.127.156/library/ ...
- mongodb的分布式集群(4、分片和副本集的结合)
概述 前面3篇博客讲了mongodb的分布式和集群,当中第一种的主从复制我们差点儿不用,没有什么意义,剩下的两种,我们不论单独的使用哪一个.都会出现对应的问题.比較好的一种解决方式就是.分片和副本集的 ...
- mongo 3.4分片集群系列之三:搭建分片集群--哈希分片 + 安全
这个系列大致想跟大家分享以下篇章: 1.mongo 3.4分片集群系列之一:浅谈分片集群 2.mongo 3.4分片集群系列之二:搭建分片集群--哈希分片 3.mongo 3.4分片集群系列之三:搭建 ...
- mongo 3.4分片集群系列之二:搭建分片集群--哈希分片
这个系列大致想跟大家分享以下篇章: 1.mongo 3.4分片集群系列之一:浅谈分片集群 2.mongo 3.4分片集群系列之二:搭建分片集群--哈希分片 3.mongo 3.4分片集群系列之三:搭建 ...
随机推荐
- oracle 10g在redhat5下的安装
[root@localhost ~]# groupadd dba -g 111 [root@localhost ~]# groupadd oinstall -g 110 [root@localhost ...
- linux下解决端口被占用问题
查找被占用的端口: netstat -tln netstat -tln | grep 8080 查看端口属于哪个程序 lsof -i :8080 杀掉占用端口的进程: kill -9 进程ID ...
- 【NetDIY智能主控】开发计划
经过一个轮回,硬件开发.硬件创业又被推到了历史的前台. 面向低端.初级的硬件爱好者,以Arduino和81单片开发板为核心的开源硬件越来越深入人心,参与的人群越来越多,相关硬件和周边模块也越来越便宜. ...
- 第十八章:Android 打包部署
Andriod应用程序如果要在手机或模拟器上安装,必须要有签名! 1.签名的意义 为了保证每个应用程序开发商合法ID,防止部分开放商可能通过使用相同的Package Name来混淆替换已经安装的程序, ...
- C++中虚析构函数作用
我们知道,用C++开发的时候,用来做基类的类的析构函数一般都是虚函数.可是,为什么要这样做呢?下面用一个小例子来说明: 有下面的两个类: class ClxBase{public: ...
- [chrome插件分享] gitlab-tree 更方便的浏览Gitlab上的代码
说明 经常玩Github的人肯定都知道大名鼎鼎的octotree吧,这款chrome插件可以说是浏览代码的神器,利用左侧的树形菜单可以很方便的打开目录.浏览文件等,加上Github全站本身使用了pja ...
- [安卓] 4、CheckBox、RadioButton和Toast简单用法
和按钮类似,这里采用cb1.setOnCheckedChangeListener(this);方法分别对3个CheckBox进行CheckChange事件绑定,然后在onCheckedChange ...
- javascript跨域通信(一):利用location.hash实现跨域iframe自适应
页面域关系: a.html所属域A:www.A.comb.html所属域B:www.B.com 问题本质: js对跨域iframe访问问题,因为要控制a.html中iframe的高度和宽度就必须首先读 ...
- 简洁清新的box样式
小菜今天偶然打开了腾讯公益,本来是冲着公益活动去的,没想到腾讯公益界面做的还不错,索性把它的box样式剽窃了下来. 个人觉得腾讯的东西普遍比较精致,就拿页面来说,每一个细节都把握的很到位,例如取色,看 ...
- atitit.压缩算法 ZLib ,gzip ,zip 最佳实践 java .net php
atitit.压缩算法 ZLib ,gzip ,zip 最佳实践 java .net php 1. 压缩算法的归类::: 纯算法,带归档算法 1 2. zlib(适合字符串压缩) 1 3. gz ...