为什么80%的码农都做不了架构师?>>>   

mongodb高可用性架构---Replica Set Replica Set使用的是n个mongod节点,构建具备自动的容错功能(auto-failover),自动恢复的(auto-recovery)的高可用方案。 使用Replica Set来实现读写分离。通过在连接时指定或者在主库指定slaveOk,由Secondary来分担读的压力,Primary只承担写操作。 对于Replica Set中的secondary 节点默认是不可读的。 环境如下: 192.168.198.131 192.168.198.129 192.168.198.132 分别在三台服务器上安装mongod服务,安装如下: # wget http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-2.0.3.tgz # tar zxvf mongodb-linux-x86_64-2.0.3.tgz -C ../software/ # ln -s mongodb-linux-x86_64-2.0.3 /usr/local/mongodb # useradd mongodb # mkdir -p /data/mongodb/myset # cd /usr/local/mongodb/bin # ./mongod --replSet myset --dbpath /data/mongodb/myset --oplogSize 100 --logpath /data/mongodb/myset/myset.log --logappend --fork # ./mongo //任选一台执行以下内容 > config={_id:"myset",members:[ ... {_id:0,host:"192.168.198.131:27017"}, ... {_id:1,host:"192.168.198.129:27017"}, ... {_id:2,host:"192.168.198.132:27017",arbiterOnly:true}]} 以下输出内容: { "_id" : "myset", "members" : [ { "_id" : 0, "host" : "192.168.198.131:27017" }, { "_id" : 1, "host" : "192.168.198.129:27017" }, { "_id" : 2, "host" : "192.168.198.132:27017", "arbiterOnly" : true } ] } > rs.initiate(config) //初始化 以下输出内容: { "info" : "Config now saved locally. Should come online in about a minute.", "ok" : 1 } > rs.conf() //查看配置内容 { "_id" : "myset", "version" : 1, "members" : [ { "_id" : 0, "host" : "192.168.198.131:27017" }, { "_id" : 1, "host" : "192.168.198.129:27017" }, { "_id" : 2, "host" : "192.168.198.132:27017", "arbiterOnly" : true } ] } > rs.status() //查看状态信息 { "set" : "myset", "date" : ISODate("2012-03-01T08:45:01Z"), "myState" : 1, "members" : [ { "_id" : 0, "name" : "192.168.198.131:27017", "health" : 1, "state" : 1, "stateStr" : "PRIMARY", "optime" : { "t" : 1330591378000, "i" : 1 }, "optimeDate" : ISODate("2012-03-01T08:42:58Z"), "self" : true }, { "_id" : 1, "name" : "192.168.198.129:27017", "health" : 1, "state" : 2, "stateStr" : "SECONDARY", "uptime" : 121, "optime" : { "t" : 1330591378000, "i" : 1 }, "optimeDate" : ISODate("2012-03-01T08:42:58Z"), "lastHeartbeat" : ISODate("2012-03-01T08:45:01Z"), "pingMs" : 0 }, { "_id" : 2, "name" : "192.168.198.132:27017", "health" : 1, "state" : 7, "stateStr" : "ARBITER", "uptime" : 121, "optime" : { "t" : 0, "i" : 0 }, "optimeDate" : ISODate("1970-01-01T00:00:00Z"), "lastHeartbeat" : ISODate("2012-03-01T08:45:01Z"), "pingMs" : 1 } ], "ok" : 1 } state: 1表示当前可以进行读写,2表示不能读写 health: 1表示是正常的,0异常 在同一时刻,每组 Replica Sets 只有一个 Primary,用于接受写操作。而后会异步复制到其他成员数据库中。一旦 primary 死掉,会自动投票选出接任的 primary 来,原服务器恢复后成为普通成员。如果数据尚未从先前的 primary 复制到成员服务器,有可能会丢失数据。 PRIMARY> db.test.insert({"name":"foobar","age":25}) PRIMARY> db.test.find() { "_id" : ObjectId("4f4f38fc47db2bfa5ceb2aee"), "name" : "foobar", "age" : 25 } SECONDARY> db.test.find() error: { "$err" : "not master and slaveok=false", "code" : 13435 } SECONDARY> db.test.insert({"name":"foobar","age":25}) not master 在主库上设置slaveok=ok PRIMARY> db.getMongo().setSlaveOk() SECONDARY> use test switched to db test SECONDARY> db.test.find() { "_id" : ObjectId("4f4f38fc47db2bfa5ceb2aee"), "name" : "foobar", "age" : 25 } 192.168.198.131上pkill mongod Thu Mar 1 17:17:51 got kill or ctrl c or hup signal 15 (Terminated), will terminate after current cmd ends Thu Mar 1 17:17:51 [interruptThread] now exiting Thu Mar 1 17:17:51 dbexit: Thu Mar 1 17:17:51 [interruptThread] shutdown: going to close listening sockets... Thu Mar 1 17:17:51 [interruptThread] closing listening socket: 7 Thu Mar 1 17:17:51 [interruptThread] closing listening socket: 8 Thu Mar 1 17:17:51 [interruptThread] closing listening socket: 9 Thu Mar 1 17:17:51 [interruptThread] removing socket file: /tmp/mongodb-27017.sock Thu Mar 1 17:17:51 [interruptThread] shutdown: going to flush diaglog... Thu Mar 1 17:17:51 [interruptThread] shutdown: going to close sockets... Thu Mar 1 17:17:51 [conn1] end connection 127.0.0.1:58614 Thu Mar 1 17:17:51 [interruptThread] shutdown: waiting for fs preallocator... Thu Mar 1 17:17:51 [interruptThread] shutdown: lock for final commit... Thu Mar 1 17:17:51 [interruptThread] shutdown: final commit... Thu Mar 1 17:17:52 [interruptThread] shutdown: closing all files... Thu Mar 1 17:17:52 [interruptThread] closeAllFiles() finished Thu Mar 1 17:17:52 [interruptThread] journalCleanup... Thu Mar 1 17:17:52 [interruptThread] removeJournalFiles Thu Mar 1 17:17:52 [interruptThread] shutdown: removing fs lock... Thu Mar 1 17:17:52 dbexit: really exiting now 192.168.198.129选择为primary Thu Mar 1 00:17:51 [conn144] end connection 192.168.198.131:35714 Thu Mar 1 00:17:51 [rsSync] replSet syncThread: 10278 dbclient error communicating with server: 192.168.198.131:27017 Thu Mar 1 00:17:52 [rsHealthPoll] DBClientCursor::init call() failed Thu Mar 1 00:17:52 [rsHealthPoll] replSet info 192.168.198.131:27017 is down (or slow to respond): DBClientBase::findN: transport error: 192.168.198.131:27017 query: { replSetHeartbeat: "myset", v: 1, pv: 1, checkEmpty: false, from: "192.168.198.129:27017" } Thu Mar 1 00:17:52 [rsHealthPoll] replSet member 192.168.198.131:27017 is now in state DOWN Thu Mar 1 00:17:52 [rsMgr] not electing self, 192.168.198.132:27017 would veto Thu Mar 1 00:17:58 [rsMgr] replSet info electSelf 1 Thu Mar 1 00:17:58 [rsMgr] replSet PRIMARY 【ARBITER】192.168.198.132日志 Thu Mar 1 04:17:51 [conn143] end connection 192.168.198.131:56260 Thu Mar 1 04:17:53 [rsHealthPoll] DBClientCursor::init call() failed Thu Mar 1 04:17:53 [rsHealthPoll] replSet info 192.168.198.131:27017 is down (or slow to respond): DBClientBase::findN: transport error: 192.168.198.131:27017 query: { replSetHeartbeat: "myset", v: 1, pv: 1, checkEmpty: false, from: "192.168.198.132:27017" } Thu Mar 1 04:17:53 [rsHealthPoll] replSet member 192.168.198.131:27017 is now in state DOWN Thu Mar 1 04:17:58 [conn144] replSet info voting yea for 192.168.198.129:27017 (1) Thu Mar 1 04:17:59 [rsHealthPoll] replSet member 192.168.198.129:27017 is now in state PRIMARY Thu Mar 1 04:18:05 [rsHealthPoll] couldn't connect to 192.168.198.131:27017: couldn't connect to server 192.168.198.131:27017 PRIMARY> rs.status(); { "set" : "myset", "date" : ISODate("2012-03-01T09:20:37Z"), "myState" : 1, "syncingTo" : "192.168.198.131:27017", "members" : [ { "_id" : 0, "name" : "192.168.198.131:27017", "health" : 0, "state" : 8, "stateStr" : "(not reachable/healthy)", "uptime" : 0, "optime" : { "t" : 1330591997000, "i" : 1 }, "optimeDate" : ISODate("2012-03-01T08:53:17Z"), "lastHeartbeat" : ISODate("2012-03-01T09:17:50Z"), "pingMs" : 0, "errmsg" : "socket exception" }, { "_id" : 1, "name" : "192.168.198.129:27017", "health" : 1, "state" : 1, "stateStr" : "PRIMARY", "optime" : { "t" : 1330591997000, "i" : 1 }, "optimeDate" : ISODate("2012-03-01T08:53:17Z"), "self" : true }, { "_id" : 2, "name" : "192.168.198.132:27017", "health" : 1, "state" : 7, "stateStr" : "ARBITER", "uptime" : 2244, "optime" : { "t" : 0, "i" : 0 }, "optimeDate" : ISODate("1970-01-01T00:00:00Z"), "lastHeartbeat" : ISODate("2012-03-01T09:20:36Z"), "pingMs" : 0 } ], "ok" : 1 } PRIMARY> db.test.find() { "_id" : ObjectId("4f4f38fc47db2bfa5ceb2aee"), "name" : "foobar", "age" : 25 } { "_id" : ObjectId("4f4f3fe2a7c9a9d1eb78392f"), "name" : "ttlsa", "age" : 1 } 再次启动192.168.198.131的mongod服务 Thu Mar 1 17:23:24 [initandlisten] MongoDB starting : pid=6977 port=27017 dbpath=/data/mongodb/myset 64-bit host=node2 Thu Mar 1 17:23:24 [initandlisten] db version v2.0.3, pdfile version 4.5 Thu Mar 1 17:23:24 [initandlisten] git version: 05bb8aa793660af8fce7e36b510ad48c27439697 Thu Mar 1 17:23:24 [initandlisten] build info: Linux ip-10-110-9-236 2.6.21.7-2.ec2.v1.2.fc8xen #1 SMP Fri Nov 20 17:48:28 EST 2009 x86_64 BOOST_LIB_VERSION=1_41 Thu Mar 1 17:23:24 [initandlisten] options: { dbpath: "/data/mongodb/myset", fork: true, logappend: true, logpath: "/data/mongodb/myset/myset.log", oplogSize: 100, replSet: "myset" } Thu Mar 1 17:23:24 [initandlisten] journal dir=/data/mongodb/myset/journal Thu Mar 1 17:23:24 [initandlisten] recover : no journal files present, no recovery needed Thu Mar 1 17:23:26 [initandlisten] waiting for connections on port 27017 Thu Mar 1 17:23:26 [websvr] admin web console waiting for connections on port 28017 Thu Mar 1 17:23:27 [initandlisten] connection accepted from 192.168.198.129:43753 #1 Thu Mar 1 17:23:27 [initandlisten] connection accepted from 127.0.0.1:37253 #2 Thu Mar 1 17:23:27 [rsStart] trying to contact 192.168.198.129:27017 Thu Mar 1 17:23:27 [rsStart] replSet STARTUP2 Thu Mar 1 17:23:27 [rsSync] replSet SECONDARY SECONDARY> use test switched to db test SECONDARY> db.test.find() { "_id" : ObjectId("4f4f38fc47db2bfa5ceb2aee"), "name" : "foobar", "age" : 25 } { "_id" : ObjectId("4f4f3fe2a7c9a9d1eb78392f"), "name" : "ttlsa", "age" : 1 }

转载于:https://my.oschina.net/766/blog/211493

mongodb高可用性架构---Replica Set相关推荐

  1. Mongodb安装搭建Replica Set+Sharding集群

    2019独角兽企业重金招聘Python工程师标准>>> Mongodb安装搭建Replica Set+Sharding集群 一.简介 Replica Set:复制在为数据提供了冗余同 ...

  2. 大数据开发:MongoDB系统架构简介

    MongoDB作为NoSQL数据库,基于分布式环境的场景下,对于系统架构的性能是要求比较高的.面对分布式场景下的大规模数据存储,MongoDB以文档型存储任务为主.今天的大数据开发学习分享,我们就来讲 ...

  3. 基于Redis+MySQL+MongoDB存储架构应用

    摘  要: Redis+MySQL+MongoDB技术架构实现了本项目中大数据存储和实时云计算的需求.使用MongoDB切片的水平动态添加,可在不中断平台业务系统的同时保障扩容后的查询速度和云计算效能 ...

  4. 西电捷通:TISec系统的高可用性架构

    TISec即IP网络安全可信技术(Trust of IP Security,TISec)是一项保护 IP协议的安全协议,也是西电捷通三元对等安全架构在IP安全领域的应用实例.TISec技术不仅为 IP ...

  5. 就鹿晗宣布恋情导致微博宕机事件浅谈大型网站高可用性架构

    中午吃饭刷着刷着微博发现微博突然挂了.我一开始以为是家里网不好,后来换了流量刷还是刷不出内容,并且报error,我就知道微博应该是挂了.往朋友圈一看,原来是鹿晗和关晓彤微博互圈"宣布恋情&q ...

  6. 高可用性架构:云计算和高可用性

    作者:禅与计算机程序设计艺术 <高可用性架构:云计算和高可用性> 引言 1.1. 背景介绍 随着互联网业务的快速发展,云计算已经成为了企业构建和部署应用的基本手段.云计算带来了便利.灵活性 ...

  7. mongodb的架构 副本集搭建

    早期的版本使用master-slave,一主一从和mysql类型,但slave在此架构中为只读,如果主库宕机后,从库不能自动切换为主 需要手动才行 后期mongodb开发了个新的架构方案副本集,所以呢 ...

  8. MongoDB 主从架构

    主从架构: mongodb支持传统的master-slave架构.master节点负责数据的读写,slave没有写入权限.没有自动故障转移功能,需要指定master和slave端,不推荐在生产中使用. ...

  9. 知言 MongoDB首席架构师唐建法:20core处理27万混合读写操作实现

    MongoDB可以应用于各种规模的企业.各个行业以及各类应用程序的开源数据库.作为一个适用于敏捷开发的数据库,MongoDB的数据模式可以随着应用程序的发展而灵活地更新.与此同时,它也为开发人员 提供 ...

最新文章

  1. jQuery进行简单验证的正则表达式
  2. 如何把主机系统上传到服务器,主机系统上传到服务器
  3. Go语言竟成恶意软件的最爱!4年来Go编写的恶意软件飙增2000%,网友:这也能怪Go?...
  4. qt windows通过usb获取手机电量_华为手机系统故障修复及系统升级
  5. 信道分类、信道复用技术、CSMA/CD 协议、PPP 协议、MAC 地址、局域网、以太网、交换机、虚拟局域网
  6. 邓迎春绘画201702作品08
  7. LAMP构架概述及相关服务的搭建(附带搭建论坛实验)
  8. java convert函数_自己实现 java中 Convert.toDouble(String str)处理函数 | 学步园
  9. 一切为了孩子——一位IT麻麻的新西兰移民记录
  10. 【Python】下载所有 XKCD 漫画
  11. LSET与LREM结合删除list中特定索引的值
  12. imagick php手册,windows7下安装php的imagick和imagemagick扩展教程
  13. C-求二元一次方程解
  14. 淘宝SDK高级模板,设计师模块开放接口详解
  15. 苹果闪退解决方法_《天涯明月刀手游》无限闪退问题解决方法 闪退是什么问题...
  16. PyTorch训练中Dataset多线程加载数据,比Dataloader里设置多个workers还要快
  17. ShardingJDBC使用总结
  18. 时序预测 | MATLAB实现LSTM长短期记忆神经网络时间序列预测
  19. 3.1 CUDA执行模型概述
  20. google mapView 用法

热门文章

  1. java遍历查询的某一列_【jQuery:遍历相同class的所有值,遍历某一列td的值】
  2. python里面的类和对象_Python中类和对象在内存中是如何保存?
  3. 凡科虚拟服务器怎样做301,虚拟主机301重定向怎么做?网站301重定向方法之一
  4. 30天python开发_30天解锁Python量化开发——初探交易接口
  5. ie对java的设置字体,css3文字特效和浏览器兼容性
  6. android 系统的切图方式_UI设计切图规范
  7. python猜年龄代码_python入门教程NO.7用python来写一个猜数字游戏
  8. oracle12c 新特性,12c Oracle数据库新特性汇总
  9. 旋转的Apriltag码
  10. 超越YOLOv5,1.3M超轻量,高效易用,目标检测领域这一个就够了