文档章节

MongoDB 主从自动切换,读写分离

胡子叭槎
 胡子叭槎
发布于 2017/04/18 23:13
字数 1003
阅读 599
收藏 2

1    设置主从库
    

[root@dghost mongodb]# mongod --dbpath /data/mongodb --replSet set1 --fork --syslog --keyFile /etc/monkey 
about to fork child process, waiting until server is ready for connections.
forked process: 2099
child process started successfully, parent exiting

主库启动完成

> rs.isMaster()
{
	"ismaster" : false,
	"secondary" : false,
	"info" : "can't get local.system.replset config from self or any seed (EMPTYCONFIG)",
	"isreplicaset" : true,
	"maxBsonObjectSize" : 16777216,
	"maxMessageSizeBytes" : 48000000,
	"maxWriteBatchSize" : 1000,
	"localTime" : ISODate("2017-04-18T14:23:59.298Z"),
	"maxWireVersion" : 2,
	"minWireVersion" : 0,
	

当前它既不是主又不是从,下面需要告诉它的身份

> config_set={_id:"set1",members:[{_id:0,host:"192.168.0.116:27017"}]}
{
	"_id" : "set1",
	"members" : [
		{
			"_id" : 0,
			"host" : "192.168.0.116:27017"
		}
	]
}

# 设置一个参数这个参数名称可以自定义,但那时里面的set1 就是启动命令中的set1
> rs.initiate(config_set)
{
	"info" : "Config now saved locally.  Should come online in about a minute.",
	"ok" : 1
}
# 把这个参数设置到主库中
[root@dghost mongodb]# mongo
MongoDB shell version: 2.6.4
connecting to: test
set1:PRIMARY> 
# 重新登陆就看到身份已经是primary 主库了
set1:PRIMARY> rs.isMaster()
{
	"setName" : "set1",
	"setVersion" : 1,
	"ismaster" : true,
	"secondary" : false,
	"hosts" : [
		"192.168.0.116:27017"
	],
	"primary" : "192.168.0.116:27017",
	"me" : "192.168.0.116:27017",
	"maxBsonObjectSize" : 16777216,
	"maxMessageSizeBytes" : 48000000,
	"maxWriteBatchSize" : 1000,
	"localTime" : ISODate("2017-04-18T14:31:46.425Z"),
	"maxWireVersion" : 2,
	"minWireVersion" : 0,
	"ok" : 1
}
[root@dgstandby ~]# mongod --dbpath /data/mongodb --replSet set1 --fork --syslog --keyFile /etc/monkey
about to fork child process, waiting until server is ready for connections.
forked process: 2104
child process started successfully, parent exiting
# 和主库启动方式一样启动从库1
[root@other ~]#  mongod --dbpath /data/mongodb --replSet set1 --fork --syslog --keyFile /etc/monkey
about to fork child process, waiting until server is ready for connections.
forked process: 2058
child process started successfully, parent exiting
# 和主库启动方式一样启动从库2

在主库中添加从库1和2

set1:PRIMARY> rs.add("192.168.0.117:27017")
{ "ok" : 1 }
set1:PRIMARY> rs.add("192.168.0.118:27017")
{ "ok" : 1 }
# 添加两个从库成功
set1:PRIMARY> rs.isMaster()
{
	"setName" : "set1",
	"setVersion" : 3,
	"ismaster" : true,
	"secondary" : false,
	"hosts" : [
		"192.168.0.116:27017",
		"192.168.0.118:27017",
		"192.168.0.117:27017"
	],
	"primary" : "192.168.0.116:27017",
	"me" : "192.168.0.116:27017",
	"maxBsonObjectSize" : 16777216,
	"maxMessageSizeBytes" : 48000000,
	"maxWriteBatchSize" : 1000,
	"localTime" : ISODate("2017-04-18T14:36:03.525Z"),
	"maxWireVersion" : 2,
	"minWireVersion" : 0,
	"ok" : 1
}
# 现在主库上已经知道谁是主库,谁是从库
[root@dgstandby ~]# mongo
MongoDB shell version: 2.6.4
connecting to: test
set1:SECONDARY> 
# 从库1 也知道自己从库
[root@other ~]# mongo
MongoDB shell version: 2.6.4
connecting to: test
set1:SECONDARY> 
# 从库2 也知道自己从库

2    验证主从是否同步

set1:PRIMARY> show dbs
admin  (empty)
local  1.078GB
set1:PRIMARY> use www
switched to db www
set1:PRIMARY> db.scott.insert({name:"scott"})
WriteResult({ "nInserted" : 1 })
set1:PRIMARY> show dbs
admin  (empty)
local  1.078GB
www    0.078GB
set1:PRIMARY> use www
switched to db www
set1:PRIMARY> db.scott.find()
{ "_id" : ObjectId("58f6251804dade85b64c28d9"), "name" : "scott" }
# 主库中建库,建表,插入数据
set1:SECONDARY> show collections;
2017-04-18T23:02:17.806+0800 error: { "$err" : "not master and slaveOk=false", "code" : 13435 } at src/mongo/shell/query.js:131
# 从库1 把www已经同步成功了,但是不能访问,这个是正常的。
set1:SECONDARY> show collections;
2017-04-18T23:04:27.430+0800 error: { "$err" : "not master and slaveOk=false", "code" : 13435 } at src/mongo/shell/query.js:131
# 从库2 把www已经同步成功了,但是不能访问,这个是正常的。

3    验证主从自动切换

把主库shutdown 看看两个从库会怎么样

set1:PRIMARY> db.shutdownServer()
2017-04-18T22:46:23.544+0800 DBClientCursor::init call() failed
server should be down...
2017-04-18T22:46:23.566+0800 trying reconnect to 127.0.0.1:27017 (127.0.0.1) failed
2017-04-18T22:46:23.571+0800 warning: Failed to connect to 127.0.0.1:27017, reason: errno:111 Connection refused
2017-04-18T22:46:23.574+0800 reconnect 127.0.0.1:27017 (127.0.0.1) failed failed couldn't connect to server 127.0.0.1:27017 (127.0.0.1), connection attempt failed
2017-04-18T22:46:23.580+0800 trying reconnect to 127.0.0.1:27017 (127.0.0.1) failed
2017-04-18T22:46:23.582+0800 warning: Failed to connect to 127.0.0.1:27017, reason: errno:111 Connection refused
2017-04-18T22:46:23.582+0800 reconnect 127.0.0.1:27017 (127.0.0.1) failed failed couldn't connect to server 127.0.0.1:27017 (127.0.0.1), connection attempt failed
> exit
bye
[root@dghost mongodb]# /etc/init.d/mongod status
mongod dead but subsys locked
# 主库已经关闭
[root@other ~]# mongo
MongoDB shell version: 2.6.4
connecting to: test
set1:PRIMARY>
# 看从库2 已经自动变成了primary主库
set1:PRIMARY> rs.isMaster()
{
	"setName" : "set1",
	"setVersion" : 3,
	"ismaster" : true,
	"secondary" : false,
	"hosts" : [
		"192.168.0.118:27017",
		"192.168.0.117:27017",
		"192.168.0.116:27017"
	],
	"primary" : "192.168.0.118:27017",
	"me" : "192.168.0.118:27017",
	"maxBsonObjectSize" : 16777216,
	"maxMessageSizeBytes" : 48000000,
	"maxWriteBatchSize" : 1000,
	"localTime" : ISODate("2017-04-18T15:07:36.060Z"),
	"maxWireVersion" : 2,
	"minWireVersion" : 0,
	"ok" : 1
}
# 瞧,主从的顺序都变了 主库已经从原来的192.168.0.116 变成现在的192.168.0.118

验证成功

4    设置读写分离

在从库上敲命令rs.slaveOk() 就可以了,非常简单

set1:SECONDARY> rs.slaveOk()
set1:SECONDARY> use www
switched to db www
set1:SECONDARY> show collections;
scott
system.indexes

5   删除节点rs.remove("IP:PORT")

© 著作权归作者所有

胡子叭槎
粉丝 22
博文 143
码字总数 148097
作品 0
成都
数据库管理员
私信 提问
How To Setup MongoDB 4.0 Replica Set

本文介绍如何配置MongoDB的Replica Set服务,并介绍了如何做主从切换以及添加新节点。此环境都在一台服务器上完成。 1、配置MongoDB Replica Set 1.1 创建配置文件 1.2 启动MongoDB服务 1.3 ...

candon123
2018/08/23
0
0
Difeye 1.1.5 版本发布 增加gearman读写分离调度作业

Difeye 1.1.5 版本---更新日期:2013-05-28 Difeye是一款超轻量级PHP框架,主要特点有: ◆数据库连接做自动主从读写分离配置,适合单机和分布式站点部署; ◆支持Smarty模板机制,可灵活配置...

mathcn123456
2013/05/28
318
0
zanePerfor前端性能监控系统高可用之Mongodb副本集读写分离架构

HI!,你好,我是zane,zanePerfor是一款最近我开发的一个前端性能监控平台,现在支持web浏览器端和微信小程序段。 我定义为一款完整,高性能,高可用的前端性能监控系统,这是未来会达到的目...

2018/11/14
0
0
Difeye 1.1.4 版本发布

Difeye 1.1.4 版本---更新日期:2013-03-1 Difeye是一款超轻量级PHP框架,主要特点有: ◆数据库连接做自动主从读写分离配置,适合单机和分布式站点部署; ◆支持Smarty模板机制,可灵活配置...

mathcn123456
2013/03/04
1K
3
MongoDB Replica Set 部署

在生产中使用MongoDB, 为了数据安全性和访问稳定性. 副本集是经常被使用到的. 书接上回, 话说MongoDB副本集已经安装过很多次了.但是每次都要去 百度 具体命令细节. 只好自己整理笔记,记录下来...

hsbxxl
2018/07/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

最简单的获取相机拍照的图片

  import android.content.Intent;import android.graphics.Bitmap;import android.os.Bundle;import android.os.Environment;import android.provider.MediaStore;import andr......

MrLins
今天
6
0
说好不哭!数据可视化深度干货,前端开发下一个涨薪点在这里~

随着互联网在各行各业的影响不断深入,数据规模越来越大,各企业也越来越重视数据的价值。作为一家专业的数据智能公司,个推从消息推送服务起家,经过多年的持续耕耘,积累沉淀了海量数据,在...

个推
今天
9
0
第三方支付-返回与回调注意事项

不管是支付宝,微信,还是其它第三方支付,第四方支付,支付机构服务商只要涉及到钱的交易都要进行如下校验,全部成功了才视为成功订单 1.http请求是否成功 2.校验商户号 3.校验订单号及状态...

Shingfi
今天
5
0
简述Java内存分配和回收策略以及Minor GC 和 Major GC(Full GC)

内存分配: 1. 栈区:栈可分为Java虚拟机和本地方法栈 2. 堆区:堆被所有线程共享,在虚拟机启动时创建,是唯一的目的是存放对象实例,是gc的主要区域。通常可分为两个区块年轻代和年老代。更...

DustinChan
今天
7
0
Excel插入批注:可在批注插入文字、形状、图片

1.批注一直显示:审阅选项卡-------->勾选显示批注选项: 2.插入批注快捷键:Shift+F2 组合键 3.在批注中插入图片:鼠标右键点击批注框的小圆点【重点不可以在批注文本框内点击】----->调出批...

东方墨天
今天
7
1

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部