[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 ... 
随机推荐
- mac上安装完成node,就升级好了npm,之后的设置
			1.打开终端输入: npm config list 找到npmrc globalconfig /usr/local/etc/npmrc 2.打开npmrc sudo vim /usr/local/et ... 
- linux之发送邮件--sendmail服务配置
			新手入门也不知道什么日志分析服务好,鸟哥说logwatch,那我就从logwatch开始吧! logwatch用到了emai发邮件,先从配置邮件发送sendmail开始: 安装sendmail服务,我 ... 
- 数据库-mysql数据库和表操作
			一:数据库查询增加删除 1)mysql数据库查询:show databases MariaDB [mysql]> show databases; +--------------------+ | ... 
- Nginx - upstream 模块及参数测试
			目录 - 1. 前言- 2. 配置示例及指令说明 - 2.1 配置示例 - 2.2 指令 - 2.3 upstream相关变量- 3. 参数配置及测试 - 3.1 max_fa ... 
- git —— 基本命令以及操作(No.1)
			git基本命令(附加描述) 1.把文件添加到暂存区$ git add readme.txt 2.把暂存区的文件文件添加到仓库$ git commit -m "提交说明" 备注:ad ... 
- 删除数据库所有存储过程的SQL语句
			--/第1步**********删除所有表的外键约束*************************/ DECLARE c1 cursor for select 'alter table ['+ o ... 
- 20155225 2006-2007-2 《Java程序设计》第四周学习总结
			20155225 2006-2007-2 <Java程序设计>第四周学习总结 教材学习内容总结 对"是一种"语法测试几次之后,总结一句:满足"是一种" ... 
- CVE-2011-0104 Microsoft Office Excel缓冲区溢出漏洞 分析
			漏洞简述 Microsoft Excel是Microsoft Office组件之一,是流行的电子表格处理软件. Microsoft Excel中存在缓冲区溢出漏洞,远程攻击者可利用此 ... 
- Java模拟按键
			JDK自带了Robot类,此类用于为测试自动化.自运行演示程序和其他需要控制鼠标和键盘的应用程序生成本机系统输入事件.Robot 的主要目的是便于 Java 平台实现自动测试. 详情可查看jdk1.6 ... 
- python连接hbase
			安装HBase HBase是一个构建在HDFS上的分布式列存储系统,主要用于海量结构化数据存储.这里,我们的目标只是为Python访问HBase提供一个基本的环境,故直接下载二进制包,采用单机安装.下 ... 
