mongoDB3.4主从复制实现(第一种情况亲测)
第一种:
- 开启两个mongodb进程,模拟两台机器;
- 一个为master主服务器,另一个为slave从服务器;
- 主服务器down机后,从服务器不会成为主服务器。
- #在当前目录下创建mongodb的数据文件
- zheng@zheng:~$ cd ./mongodbTest/
- mkdir ./t1/db
- mkdir ./t2/db
- mkdir ./t1/log
- mkdir ./t2/log
- touch ./t1/log/mongodb.log
- touch ./t2/log/mongodb.log
- zheng@zheng:~/mongodbTest$ tree
- .
- ├── t1
- │ ├── db
- │ └── log
- │ └── mongodb.log
- └── t2
- ├── db
- └── log
- └── mongodb.log
- #设置主服务器,并启动服务
- mongod --dbpath ./t1/db --logpath ./t1/log/mongodb.log --port 50001 --logappend --fork --master
- #设置从服务器,并启动服务。--source ip:port,设置其主服务器
- mongod --dbpath ./t2/db --logpath ./t2/log/mongodb.log --port 50002 --logappend --fork --slave --source 127.0.0.1:50001
- #进入主数据库
- mongo --port 50001
- #在主数据库插入数据
- > use stu
- switched to db stu
- > for(i=1;i<1000;i++){
- db.s.insert({name:'hi'+1}
- )}
- WriteResult({ "nInserted" : 1 })
- > db.s.find().count()
- 999
- #进入从数据库
- mongo --port 50002
- #在从数据库查询
- > show dbs
- 2017-09-14T16:54:56.790+0800 E QUERY [main] Error: listDatabases failed:{
- "ok" : 0,
- "errmsg" : "not master and slaveOk=false",
- "code" : 13435,
- "codeName" : "NotMasterNoSlaveOk"
- } :
- #从数据库无法查看数据库,使用rs.slaveOk()
- > rs.slaveOk()
- > show dbs
- admin 0.000GB
- local 0.000GB
- stu 0.000GB
- > use stu
- switched to db stu
- > show collections
- s
- > db.s.find().count()
- 999
- #从数据库无法插入数据
- > db.stu.insert({name:'hello'})
- WriteResult({ "writeError" : { "code" : 10107, "errmsg" : "not master" } })
第二种:副本集
- 主服务器down机后,从服务器自动切换。
- #在当前目录下创建mongodb的数据文件
- zheng@zheng:~$ cd ./mongodbTest/
- zheng@zheng:~/mongodbTest$ tree
- .
- ├── t1
- │ ├── db
- │ └── log
- │ └── mongodb.log
- ├── t2
- │ ├── db
- │ └── log
- │ └── mongodb.log
- └── t3
- ├── db
- └── log
- └── mongodb.log
- #启动三个mongodb进程,--replSet name:设置三个mongodb在同一个副本下
- mongod --bind_ip 192.168.14.12 --port 50001 --dbpath ./t1/db --logpath ./t1/log/mongodb.log --logappend --fork --replSet zheng
- mongod --bind_ip 192.168.14.12 --port 50002 --dbpath ./t2/db --logpath ./t2/log/mongodb.log --logappend --fork --replSet zheng
- mongod --bind_ip 192.168.14.12 --port 50003 --dbpath ./t3/db --logpath ./t3/log/mongodb.log --logappend --fork --replSet zheng
- #连接主服务器,此处设置192.168.14.12:50001为主服务器
- mongo --host 192.168.14.12 --port 50001
- #初始化,哪个服务器先初始化就是主服务器
- rs.initiate()
- #初始化后,提示符变为zheng:SECONDARY>
- > rs.initiate()
- {
- "info2" : "no configuration specified. Using a default configuration for the set",
- "me" : "zheng:50001",
- "ok" : 1
- }
- zheng:SECONDARY>
- #查看当前状态
- rs.status()
- #提示符变为
- zheng:PRIMARY>
- #添加副本集
- rs.add('192.168.14.12:50002')
- rs.add('192.168.14.12:50003')
- #副本集添加成功后,当前状态如图
- #向主服务器中插入数据
- zheng:PRIMARY> db
- test
- zheng:PRIMARY> for(i=0;i<=10;i++){db.t.insert({name:'name'+i})}
- WriteResult({ "nInserted" : 1 })
- zheng:PRIMARY> db.t.find().count()
- 11
- #启动从服务器
- mongo --host 192.168.14.12 --port 50002
- mongo --host 192.168.14.12 --port 50003
- #查看数据
- zheng:SECONDARY> rs.slaveOk()
- zheng:SECONDARY> db.t.find()
- { "_id" : ObjectId("59ba7f2060170e82e7b65e89"), "name" : "name0" }
- { "_id" : ObjectId("59ba7f2060170e82e7b65e8a"), "name" : "name1" }
- { "_id" : ObjectId("59ba7f2060170e82e7b65e8b"), "name" : "name2" }
- { "_id" : ObjectId("59ba7f2060170e82e7b65e8d"), "name" : "name4" }
- { "_id" : ObjectId("59ba7f2060170e82e7b65e8c"), "name" : "name3" }
- { "_id" : ObjectId("59ba7f2060170e82e7b65e8e"), "name" : "name5" }
- { "_id" : ObjectId("59ba7f2060170e82e7b65e8f"), "name" : "name6" }
- { "_id" : ObjectId("59ba7f2060170e82e7b65e90"), "name" : "name7" }
- { "_id" : ObjectId("59ba7f2060170e82e7b65e91"), "name" : "name8" }
- { "_id" : ObjectId("59ba7f2060170e82e7b65e92"), "name" : "name9" }
- { "_id" : ObjectId("59ba7f2060170e82e7b65e93"), "name" : "name10"}
- #删除从服务器
- rs.remove('192.168.14.12:50002')
#注意
关闭主服务器后,再重新启动,会发现原来的从服务器变为了从服务器,新启动的服务器(原来的从服务器)变为了从服务器
第三种:
- 可设置优先级,优先级最高的就先为主服务器;
- 主服务器down机后,优先级高的为新的主服务器。
- #启动三个mongodb进程,--replSet name:设置三个mongodb在同一个副本下
- 和上面一样......
- #启动mongo服务器
- mongo --host 192.168.14.12 --port 50001
- #设置主从服务器
- use admin
- db.runCommand({"replSetInitiate":{"_id":"zheng","members":[{"_id":1,"host":"192.168.14.12:50001","priority":3},{"_id":2,"host":"192.168.14.12:50002","priority":2},{"_id":3,"host":"192.168.14.12:50003","priority":1}]}})
- #查看当前状态
- zheng:OTHER> rs.status()
- {
- "set" : "zheng",
- "date" : ISODate("2017-09-14T13:43:58.663Z"),
- "myState" : 1,
- "term" : NumberLong(1),
- "heartbeatIntervalMillis" : NumberLong(2000),
- "optimes" : {
- "lastCommittedOpTime" : {
- "ts" : Timestamp(1505396636, 2),
- "t" : NumberLong(1)
- },
- "appliedOpTime" : {
- "ts" : Timestamp(1505396636, 2),
- "t" : NumberLong(1)
- },
- "durableOpTime" : {
- "ts" : Timestamp(1505396636, 2),
- "t" : NumberLong(1)
- }
- },
- "members" : [
- {
- "_id" : 1,
- "name" : "192.168.14.12:50001",
- "health" : 1,
- "state" : 1,
- "stateStr" : "PRIMARY",
- "uptime" : 347,
- "optime" : {
- "ts" : Timestamp(1505396636, 2),
- "t" : NumberLong(1)
- },
- "optimeDate" : ISODate("2017-09-14T13:43:56Z"),
- "infoMessage" : "could not find member to sync from",
- "electionTime" : Timestamp(1505396636, 1),
- "electionDate" : ISODate("2017-09-14T13:43:56Z"),
- "configVersion" : 1,
- "self" : true
- },
- {
- "_id" : 2,
- "name" : "192.168.14.12:50002",
- "health" : 1,
- "state" : 2,
- "stateStr" : "SECONDARY",
- "uptime" : 12,
- "optime" : {
- "ts" : Timestamp(1505396636, 2),
- "t" : NumberLong(1)
- },
- "optimeDurable" : {
- "ts" : Timestamp(1505396636, 2),
- "t" : NumberLong(1)
- },
- "optimeDate" : ISODate("2017-09-14T13:43:56Z"),
- "optimeDurableDate" : ISODate("2017-09-14T13:43:56Z"),
- "lastHeartbeat" : ISODate("2017-09-14T13:43:58.317Z"),
- "lastHeartbeatRecv" : ISODate("2017-09-14T13:43:58.153Z"),
- "pingMs" : NumberLong(0),
- "syncingTo" : "192.168.14.12:50001",
- "configVersion" : 1
- },
- {
- "_id" : 3,
- "name" : "192.168.14.12:50003",
- "health" : 1,
- "state" : 2,
- "stateStr" : "SECONDARY",
- "uptime" : 12,
- "optime" : {
- "ts" : Timestamp(1505396636, 2),
- "t" : NumberLong(1)
- },
- "optimeDurable" : {
- "ts" : Timestamp(1505396636, 2),
- "t" : NumberLong(1)
- },
- "optimeDate" : ISODate("2017-09-14T13:43:56Z"),
- "optimeDurableDate" : ISODate("2017-09-14T13:43:56Z"),
- "lastHeartbeat" : ISODate("2017-09-14T13:43:58.317Z"),
- "lastHeartbeatRecv" : ISODate("2017-09-14T13:43:58.152Z"),
- "pingMs" : NumberLong(0),
- "syncingTo" : "192.168.14.12:50001",
- "configVersion" : 1
- }
- ],
- "ok" : 1
- }
来源:http://blog.csdn.net/zheng_lan_fang/article/details/77986007
mongoDB3.4主从复制实现(第一种情况亲测)相关推荐
- 电视android已停止运行是什么意思,智能电视提示应用停止运行,三种方法亲测有效!...
原标题:智能电视提示应用停止运行,三种方法亲测有效! 智能电视使用时间一长,或者是使用不当总会出现一些问题,当电视机页面出现"某软件"已经停止运行提示的时候,是什么原因导致的?自己 ...
- 智能电视app怎么测试软件,智能电视如何通过手机电脑安装第三方软件,两种操作方法亲测可用...
如今在许多年轻家庭中,智能电视或网络机顶盒已经成为必备的家居用品.智能电视能安装第三方软件,拓展使用所有TV应用软件,弥补了电视系统自带应用有限的缺憾.而关于电视安装软件的方法上,多数是通过U盘安装, ...
- java怎么判断字符串是否为空的几种方法(亲测)
StringUtils 第一步使用if(StringUtils.isBlank(a))判断字符串a是否为空,为空执行if语句内打印语句,使用StringUtils,需要添加commons-lang-2 ...
- 将Pandas中的DataFrame类型转换成Numpy中array类型的三种方法(亲测)
在用pandas包和numpy包对数据进行分析和计算时,经常用到DataFrame和array类型的数据.在对DataFrame类型的数据进行处理时,需要将其转换成array类型,是以下列出了三种转换 ...
- 前端使用微信sdk上传图片的坑,及万千种方法比较实用的一种,亲测有效
vue 公众端使用微信sdk上传图片大坑 第一个坑 第二个坑 第一个坑 使用微信sdk拿到的图片并没有base64的前缀 所以我们需要自己加 iSrc = 'data:image/jpeg;base6 ...
- 电视android已停止运行,智能电视提示应用停止运行 三种方法亲测有效
智能电视使用时间一长,或者是使用不当总会出现一些问题,当电视机页面出现"某软件"已经停止运行提示的时候,是什么原因导致的?自己该怎么解决这个问题?今天当贝市场小编就来和大家说一说! ...
- Win10添加开机自动运行软件三种方法(亲测可用)
Win10管理开机启动项的方法相信大家已经非常熟悉,msconfig命令各系统都通用,那么很多用户发觉Win10和Win7 XP等系统不同,没有启动文件夹,那么我们怎么添加开机启动项呢?如晨软件或程序 ...
- 车载媒体服务器停止运行,智能电视提示应用停止运行 三种方法亲测有效
智能电视使用时间一长,或者是使用不当总会出现一些问题,当电视机页面出现"某软件"已经停止运行提示的时候,是什么原因导致的?自己该怎么解决这个问题?今天当贝市场小编就来和大家说一说! ...
- 路由传参的几种方式 亲测有效!!!!
传参方式可划分为params 传参 和query传参,而params传参可以分为在url地址栏当中显示参数和不显示参数俩种方式 1.query 传参(显示参数)也可分为声明式和编程式 两种方式 声明式 ...
最新文章
- easyui datalist 动态绑定数据_一文看懂动态链接
- 一种基于openflow的虚拟化层软件flowvisor的API测试
- HDU1576 A/B 费马小定理
- 代码:CSS——reset.css
- android Android-PullToRefresh 下拉刷新
- 答读者问(6):有关IT培训和毕业之前的迷茫等问题
- php字符型和数字型的注入,Sql注入的分类:数字型+字符型
- HTTPS实战之单向验证和双向验证
- mysql 多个命令行,5.8.2.1在Windows命令行中启动多个MySQL实例
- java中foreach怎么访问_JAVA中的foreach怎么用
- Reproxy:边缘服务器反向代理工具
- html页面缩小图片缩小,如何缩小html页面中的图片大小?
- 斯蒂文斯理工学院计算机专业,斯蒂文斯理工学院的计算机专业如何?
- 课设——八皇后问题(N皇后解决)
- MDN和IMSI码详细解释
- CH55x使用Arduino编程记录(三)Could not get xxx consecutive bytes in internal RAM for area OSEG
- linux下oracle11G DG搭建(三):围绕备库搭建操作
- python自动化测试 namp端口扫描
- 命令行模拟post请求
- 【蓝桥杯省赛真题8】Scratch踢足球 少儿编程scratch蓝桥杯省赛真题讲解
热门文章
- linux高级编程有作用吗,Linux 高级编程
- Oracle导入到不同的角色,oracle 不同版本之间的导入导出
- ES的多种搜索机制:query string search,query DSL,query filter,full-text search,phrase search,highlight search
- 16_Android生命周期再介绍,通过androidconfigChanges属性让界面旋转时不改变状态中保留的值
- 窗口分析函数_4_计算累加值
- nc65语义模型设计_文本匹配方法系列––多维度语义交互匹配模型
- 使用malloc创建头结点的坑
- Nc105-二分查找-II
- Android回调的简单理解
- 天猫上线“商家售后服务评价”功能,消费者体验将纳入商家考核指标