[Database] MongoDB 副本集配置
MongoDB 副本集配置
MongoDB复制是将数据同步在多个服务器的过程。
复制提供了数据的冗余备份,并在多个服务器上存储数据副本,提高了数据的可用性, 并可以保证数据的安全性。
复制还允许您从硬件故障和服务中断中恢复数据。
创建副本集时注意
- 版本: 各副本集服务器的MongoDB版本一致或支持同样的replSet功能
- 网络: 副本集内的每个成员都必须能够连接到其他成员(包括自身),启动时注意bind_ip --bind_ip_all.
配置副本集
- 1 建立配置文件
mongodb.conf
1 # Start MongoDB as a daemon on port 27017
2
3 port = 27017
4 fork = true
5 replSet = test_replica_set
6 dbpath = /datatest/db
7 logpath = /datatest/db/test.log
8 logappend = true
9
mongodb2.conf
2
3 port = 27017
4 fork = true
5 replSet = test_replica_set
6 dbpath = /datatest/db
7 logpath = /datatest/db/test.log
8 logappend = true
9
mongodb3.conf
2
3 port = 27017
4 fork = true
5 replSet = test_replica_set
6 dbpath = /datatest/db
7 logpath = /datatest/db/test.log
8 logappend = true
9
- 2 启动数据库
mac-abeen:bin abeen$ sudo ./mongod -f mongodb.conf
about to fork child process, waiting until server is ready for connections.
forked process: 37181
child process started successfully, parent exiting
mac-abeen:bin abeen$ sudo ./mongod -f mongodb2.conf
about to fork child process, waiting until server is ready for connections.
forked process: 37185
child process started successfully, parent exiting
mac-abeen:bin abeen$ sudo ./mongod -f mongodb3.conf
about to fork child process, waiting until server is ready for connections.
forked process: 37189
child process started successfully, parent exiting
- 3 初始化副本集
mac-abeen:bin abeen$ ./mongo --nodb
MongoDB shell version: 3.2.8
> config = {}
{ }
> config = {"_id": "test_replica_set", "members": [
{"_id": 0, "host": "192.168.0.10:27017"},
{"_id": 1, "host": "192.168.0.20:27017"},
{"_id": 2, "host": "192.168.0.30:27017"}]}
{
"_id" : "test_replica_set",
"members" : [
{
"_id" : 0,
"host" : "192.168.0.10:27017"
},
{
"_id" : 1,
"host" : "192.168.0.20:27017"
},
{
"_id" : 2,
"host" : "192.168.0.30:27017"
}
]
}
> db = (new Mongo("192.168.0.10:27017")).getDB("test")
test
> rs.initiate(config)
{ "ok" : 1 }
test_replica_set:OTHER>
test_replica_set:PRIMARY> rs.config()
{
"_id" : "test_replica_set",
"version" : 1,
"protocolVersion" : NumberLong(1),
"members" : [
{
"_id" : 0,
"host" : "192.168.0.10:27017",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 1,
"tags" : {
},
"slaveDelay" : NumberLong(0),
"votes" : 1
},
{
"_id" : 1,
"host" : "192.168.0.20:27017",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 1,
"tags" : {
},
"slaveDelay" : NumberLong(0),
"votes" : 1
},
{
"_id" : 2,
"host" : "192.168.0.30:27017",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 1,
"tags" : {
},
"slaveDelay" : NumberLong(0),
"votes" : 1
}
],
"settings" : {
"chainingAllowed" : true,
"heartbeatIntervalMillis" : 2000,
"heartbeatTimeoutSecs" : 10,
"electionTimeoutMillis" : 10000,
"getLastErrorModes" : {
},
"getLastErrorDefaults" : {
"w" : 1,
"wtimeout" : 0
},
"replicaSetId" : ObjectId("5850f445c8cacd70496883b0")
}
}
- 4 写入数据并查看副本集数据
test_replica_set:PRIMARY>
test_replica_set:PRIMARY> for (i=0; i < 100; i++){db.coll.insert({"count": i})}
WriteResult({ "nInserted" : 1 })
test_replica_set:PRIMARY> db.coll.count()
100
test_replica_set:PRIMARY> db.coll.find().limit(5)
{ "_id" : ObjectId("5850f5f35f1a7d82c0b45b51"), "count" : 0 }
{ "_id" : ObjectId("5850f5f35f1a7d82c0b45b52"), "count" : 1 }
{ "_id" : ObjectId("5850f5f35f1a7d82c0b45b53"), "count" : 2 }
{ "_id" : ObjectId("5850f5f35f1a7d82c0b45b54"), "count" : 3 }
{ "_id" : ObjectId("5850f5f35f1a7d82c0b45b55"), "count" : 4 }
- 5 查看副本集是否有数据
mac-abeen:bin abeen$ ./mongo --port 27017 --host 192.168.0.20
MongoDB shell version: 3.2.8
connecting to: 192.168.0.20:27017/test
test_replica_set:SECONDARY> db.coll.find().limit(5)
Error: error: { "ok" : 0, "errmsg" : "not master and slaveOk=false", "code" : 13435 }
设置连接可读取数据
test_replica_set:SECONDARY> db.setSlaveOk()
副本中已有数据
test_replica_set:SECONDARY> db.coll.find().limit(5)
{ "_id" : ObjectId("5850f5f35f1a7d82c0b45b53"), "count" : 2 }
{ "_id" : ObjectId("5850f5f35f1a7d82c0b45b55"), "count" : 4 }
{ "_id" : ObjectId("5850f5f35f1a7d82c0b45b52"), "count" : 1 }
{ "_id" : ObjectId("5850f5f35f1a7d82c0b45b54"), "count" : 3 }
{ "_id" : ObjectId("5850f5f35f1a7d82c0b45b51"), "count" : 0 }
修改副本集
rs.add("server-4:27017") //添加
rs.addArb("server-4:27017") //添加选举仲裁者
rs.add({"_id": 4, "host": "server-4:27017", "arbiterOnly": true) //添加选举仲裁者
rs.add({"_id": 5, "host": "server-5:27017", "priority": 0, "hidden": true) //添加隐藏成员
rs.remove("server-4:27017") //移除
修改副本集,通过rs.reconfig
rs.reconfig修改副本集成员时限制
- 不能修改成员的_id 字段
- 不能将接收rs.reconfig命令的成员(通常是主节点)的优先级设为0
- 不能仲裁者成员变为非仲裁者成员,反之亦然.
- 不能将buildIndexes: false的成员修改为buildIndexes: true
可以修改其他,比如host
var config = rs.config()
config.members[1].host = "newsserver:27017" //修改host
rs.reconfig(config)
[Database] MongoDB 副本集配置的更多相关文章
- mongodb副本集配置
需要用到mongodb的时候单个实例肯定是不行的,挂了怎么办,那然后呢,跟mysql一样搞主从备份吗,是可以的mongodb这么弄,不过官网已经不推荐了这么干了,推荐使用副本集的模式,然后数据再大一点 ...
- MongoDB副本集配置系列五:副本集的在线迁移
MongoDB副本集的在线迁移 查看当前集群的状态: { "setName" : "gechongrepl", "setVersion" : ...
- MongoDB副本集配置系列三:副本集的认证方式
1:副本集配置参考这篇博客: http://www.cnblogs.com/xiaoit/p/4478951.html 2:副本集的认证 假设有两台机器已经配置好了副本集(副本集罪一般最少3台机器,这 ...
- 分布式文档存储数据库(MongoDB)副本集配置
副本集特征: N 个节点的集群 任何节点可作为主节点 所有写入操作都在主节点上 自动故障转移 自动恢复 相关文章: http://www.cnblogs.com/huangxincheng/archi ...
- MongoDB副本集配置系列十一:MongoDB 数据同步原理和自动故障转移的原理
1:数据同步的原理: 当Primary节点完成数据操作后,Secondary会做出一系列的动作保证数据的同步: 1:检查自己local库的oplog.rs集合找出最近的时间戳. 2:检查Primary ...
- mongodb.副本集配置方法(使用keyfile认证部署)
前提条件: - 已安装MongoDB, 版本以3.6为例 - 系统: Debian9 - 建议做副本集的话, 以3台以上为宜, 本文以1台主机2个服务为例 1.创建数据存放的目录, 并授权 sudo ...
- MongoDB副本集配置系列二:配置MongoDB副本集
接上一篇博客: http://www.cnblogs.com/xiaoit/p/4479066.html 1:首先创建3台虚拟机作为配置环境 IP1:192.168.91.128 IP2:192.16 ...
- MongoDB 副本集配置,开启账号认证
MongoDB 自带功能强大的主从,配置也很简单,从零开始花了30分钟搞定 3台以上机器IP: 192.168.1.24, 192.168.1.25, 192.168.1.26, 192.168.1. ...
- MongoDB副本集配置系列十:MongoDB local库详解和数据同步原理
1:local库是MongoDB的系统库,记录着时间戳和索引和复制集等信息 gechongrepl:PRIMARY> use local switched to db local gechong ...
随机推荐
- 十一、springboot之web开发之Filter
我们常常在项目中会使用filters用于录调用日志.排除有XSS威胁的字符.执行权限验证等等.Spring Boot自动添加了OrderedCharacterEncodingFilter和Hidden ...
- html- 头部元素
一:HTML <head> 元素 <head> 元素是所有头部元素的容器.<head> 内的元素可包含脚本,指示浏览器在何处可以找到样式表,提供元信息,等等. 以下 ...
- 关于SizeOf、Length
结论: 到底什么时候用Length,SizeOf呢,我总结下使用Length,Sizeof的场景 1.Length(静态数组或动态数组)----没有问题 2.Length(string/shortst ...
- the server ssl certificate failed to verify
很久没上传项目之后,远程端断开联系 如果是git,就git clone,重新把项目拉下来. svn的话,就svn ls,拉下项目.
- (二) solr 索引数据导入:xml格式
xml 是最常用的数据索引格式,不仅可以索引数据,还可以对文档与字段进行增强,从而改变它们的重要程度. 下面就是具体的实现方式: schema.xml的字段配置部分如下: <field name ...
- 为django平台生成模拟用户,建立用户组,并将用户加入组
书接上篇BLOG. 当我们可以用manage.py自定义命令来生成模拟数据时, 我们面对的就是如何操作ORM的问题了. 这两天,我为我们的内部系统的所有数据表,都生成了模拟数据. 有几个心得,记录于此 ...
- JavaScript中判断日期是否相等
问题 做一个节日提示网页,首先获得当前日期,然后与最近的节日比较,如果恰好是同一天,提示"XX节快乐!"否则,提示"离XX节还有X天".判断是否恰好同一天的时候 ...
- CCF CSP 201509-4 高速公路
CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201509-4 高速公路 问题描述 某国有n个城市,为了使得城市间的交通更便利,该国国王打算在 ...
- javascript 去除最后一个字符自定义的方法
//公共去除最后字符方法 function dtrim(str, s){ var reg = eval("/"+s+"$/gi"); str=str.repla ...
- 【AtCoder】AGC005F - Many Easy Problems
题解 我们把一个点的贡献转化为一条边的贡献,因为边的数量是点的数量-1,最后再加上选点方案数\(\binom{n}{k}\)即可 一条边的贡献是\(\binom{n}{k} - \binom{a}{k ...