mongodb mongodb主从复制原理会复制索引吗

MongoDB(3)
MongoDB分为主从复制和复制集
一,主从复制
mongodb支持传统的master-slave架构。没有自动故障转移功能,需要指定master和slave端。不推荐。
1,创建两个配置文件
dbpath=/usr/local/mongodb/data11
logpath=/usr/local/mongodb/log/mongodb11.log
port=27011
master=true参数
master:是否为主。
dbpath=/usr/local/mongodb/data12
logpath=/usr/local/mongodb/log/mongodb2.log
port=27012
slave=true
source=10.1.2.198:27011参数
salve:是否为从。
source:主的IP和端口。
2,分别启动两个mongod,在主上插入数据,在从上查看时会提示错误
not master and slaveOk=false&&&&& 这是因为从库默认是不可读写的,所以需要设置
rs.slaveOk()
二,复制集
复制集带有自动故障转移功能,复制集架构比复制架构更好维护,功能更强。推荐。
1,创建三个配置文件
dbpath=/usr/local/mongodb/data1
logpath=/usr/local/mongodb/log/mongodb1.log
port=27071
replSet=rsvi /f
bpath=/usr/local/mongodb/data2
logpath=/usr/local/mongodb/log/mongodb2.log
port=27072
replSet=rsvi /f
dbpath=/usr/local/mongodb/data3
logpath=/usr/local/mongodb/log/mongodb3.log
port=27073
replSet=rs参数
replSet:复制集的名称,只有含有相同的复制集名称的节点才能加入复制集。
2,分别启动三个mongod,进入需要设置为主的机器上执行初始化
&config = {
&_id&: &repl&,
members: [
{ &_id&: 0,
&host&: &10.34.136.15:27071&
{ &_id&: 1,
&host&: &10.34.136.15:27072&
 { &_id&: 2,
&host&: &10.34.136.15:27073&
&rs.initiate(config)rs:复制集对象,复制集的命令都在rs对象内
初始化后,&&&符号前就会显示当前节点的【复制集:主/从】的状态
& rs.initiate(config)
{ &ok& : 1 }
3,查看状态
rs:PRIMARY& rs.status();
4,查看是否主从(如果发生切换,使用rs.status()查看更准确)
rs:PRIMARY& db.isMaster()
5,登录其他两个从节点,虽然会显示【复制集:主/从】的状态,但是无法操作
原因是从节点默认无法读写,执行slaveOk
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:201147次
积分:2745
积分:2745
排名:第14056名
原创:80篇
转载:104篇
评论:50条
文章:11篇
阅读:37124
文章:34篇
阅读:64356
(1)(5)(2)(7)(15)(18)(5)(13)(26)(26)(1)(23)(23)(6)(10)(2)(1)
(window.slotbydup = window.slotbydup || []).push({
id: '4740881',
container: s,
size: '200,200',
display: 'inlay-fix'MongoDB如何新增索引 | MongoDB中文社区8天学通MongoDB——第五天 主从复制
从这一篇开始我们主要讨论mongodb的部署技术。
我们知道sql server能够做到读写分离,双机热备份和集群部署,当然mongodb也能做到,实际应用中我们不希望数据库采用单点部署,
如果碰到数据库宕机或者被毁灭性破坏那是多么的糟糕。
从这一篇开始我们主要讨论mongodb的部署技术。
我们知道sql server能够做到读写分离,双机热备份和集群部署,当然mongodb也能做到,实际应用中我们不希望数据库采用单点部署,
如果碰到数据库宕机或者被毁灭性破坏那是多么的糟糕。
一:主从复制
1: 首先看看模型图
2: 从上面的图形中我们可以分析出这种架构有如下的好处:
数据备份。
数据恢复。
读写分离。
3:下面我们就一一实践
实际应用中我们肯定是多服务器部署,限于自己懒的装虚拟机,就在一台机器上实践了。
第一步:我们把mongodb文件夹放在D盘和E盘,模拟放在多服务器上。
第二步:启动D盘上的mongodb,把该数据库指定为主数据库,其实命令很简单:&mongodb --dbpath='XXX' --master,
端口还是默认的27017.
第三步:同样的方式启动E盘上的mongodb,指定该数据库为从属数据库,命令也很简单,当然我们要换一个端口,比如:8888。
source 表示主数据库的地址。
&mongod --dbpath=xxxx --port=8888 --slave --source=127.0.0.1:27017
第四步:从图中的红色区域我们发现了一条:“applied 1 operations"这样的语句,并且发生的时间相隔10s,也就说明从属数据库每10s
就向主数据库同步数据,同步依据也就是寻找主数据库的”OpLog“日志,可以在图中红色区域内发现”sync_pullOpLog“字样。
接下来我们要做的就是测试,惊讶的发现数据已经同步更新,爽啊。
如果我还想增加一台从属数据库,但是我不想在启动时就指定,而是后期指定,那么mongodb可否做的到呢?答案肯定是可以的。
我们的主或者从属数据库中都有一个叫做local的集合,主要是用于存放内部复制信息。
好,那么我们就试一下,我在F盘再拷贝一份mongodb的运行程序,cmd窗口好多啊,大家不要搞乱了。
看上面的log,提示没有主数据库,没关系,某一天我们良心发现,给他后期补贴一下,哈哈,再开一个cmd窗口,语句也就是
在sources中add一个host地址,最后发现数据也同步到127.0.0.1:5555这台从属数据库中....
5: 读写分离
这种手段在大一点的架构中都有实现,在mongodb中其实很简单,在默认的情况下,从属数据库不支持数据的读取,但是没关系,
在驱动中给我们提供了一个叫做“slaveOkay"来让我们可以显示的读取从属数据库来减轻主数据库的性能压力,这里就不演示了。
二:副本集
这个也是很牛X的主从集群,不过跟上面的集群还是有两点区别的。
该集群没有特定的主数据库。
如果哪个主数据库宕机了,集群中就会推选出一个从属数据库作为主数据库顶上,这就具备了自动故障恢复功能,很牛X的啊。
好,我们现在就来试一下,首先把所有的cmd窗口关掉重新来,清掉db下的所有文件。
既然我们要建立集群,就得取个集群名字,这里就取我们的公司名shopex, --replSet表示让服务器知道shopex下还有其他数据库,
这里就把D盘里面的mongodb程序打开,端口为2222。指定端口为3333是shopex集群下的另一个数据库服务器。
既然上面说3333是另一个数据库服务器,不要急,现在就来开,这里把E盘的mongodb程序打开。
ok,看看上面的日志红色区域,似乎我们还没有做完,是的,log信息告诉我们要初始化一下“副本集“,既然日志这么说,那我也就
这么做,随便连接一下哪个服务器都行,不过一定要进入admin集合。
第四步: 开启成功后,我们要看看谁才能成为主数据库服务器,可以看到端口为2222的已经成为主数据库服务器。
第五步:我们知道sql server里面有一个叫做仲裁服务器,那么mongodb中也是有的,跟sql server一样,仲裁只参与投票选举,这里我们
把F盘的mongodb作为仲裁服务器,然后指定shopex集群中的任一个服务器端口,这里就指定2222。
然后我们在admin集合中使用rs.addArb()追加即可。
追加好了之后,我们使用rs.status()来查看下集群中的服务器状态,图中我们可以清楚的看到谁是主,还是从,还是仲裁。
不是说该集群有自动故障恢复吗?那么我们就可以来试一下,在2222端口的cmd服务器按Ctrl+C来KO掉该服务器,立马我们发现
在3333端口的从属服务器即可顶上,最后大家也可以再次使用rs.status()来看下集群中服务器的状态。
版权声明:本文内容由互联网用户自发贡献,本社区不拥有所有权,也不承担相关法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至: 进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
用云栖社区APP,舒服~
【云栖快讯】红轴机械键盘、无线鼠标等753个大奖,先到先得,云栖社区首届博主招募大赛9月21日-11月20日限时开启,为你再添一个高端技术交流场所&&
基于飞天分布式系统和高性能存储,提供三节点副本集的高可用架构,容灾切换,故障迁移完全透明化。并提供专业的数据库在...
MySQL 是全球最受欢迎的开源数据库,阿里云MySQL版 通过深度的内核优化和独享实例提供稳定极致的数据库性能...
支持以数据库为核心的结构化存储产品之间的数据传输。 它是一种集数据迁移、数据订阅及数据实时同步于一体的数据传输服...
为您提供简单高效、处理能力可弹性伸缩的计算服务,帮助您快速构建更稳定、安全的应用,提升运维效率,降低 IT 成本...
阿里云双11狂欢,不只是5折
Loading...mongodb主从复制状态异常_mongodb吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:1,629贴子:
mongodb主从复制状态异常收藏
版本:mongodb 2.4.5
&db.printSlaveReplicationInfo()TypeError: status.members has no properties shell/db.js:751
mongodb,网易云一站式MongoDB解决方案,便捷高可靠,支持自动备份,一键快速恢复.mongodb,网易云0元免费备案,7*24小时客户支持,20年技术积累,50万+用户接入.
你确定你已经搭建好了?
登录百度帐号推荐应用博客访问: 299602
博文数量: 110
博客积分: 3621
博客等级: 中校
技术积分: 1066
注册时间:
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
分类: 数据库开发技术
在同一台机器上用2个不同的端口,启动mongodb在数据库目录下建立2个新目录[root@localhost ~]# mkdir /data/db/master&[root@localhost ~]# mkdir /data/db/slave主:只需要带上--master参数,表明这是个主就可以了,相当的方便。[root@localhost ~]# /usr/local/bin/mongod --master -dbpath=/data/db/master -port=11536 &
[root@localhost ~]# Mon Jul 25 20:21:59 [initandlisten] MongoDB starting : pid=10939 port=11536 dbpath=/data/db/master master=1 32-bit从:带上--slave参数指明是个从,指定--source,主的地址和端口,就可以了,比MYSQL方便很多。[root@localhost bin]# /usr/local/bin/mongod -port 11537 --slave -dbpath=/data/db/slave --source 127.0.0.1:11536
Mon Jul 25 20:25:52 [initandlisten] MongoDB starting : pid=11158 port=11537 dbpath=/data/db/slave slave=1 32-bit新开一个终端,登录11536(主),并写入一条记录[root@localhost ~]# /usr/local/bin/mongo --port=11536
MongoDB shell version: 1.8.2
connecting to: 127.0.0.1:11536/test
& use brucezuo
switched to db brucezuo
& db.createCollection("table1")
{ "ok" : 1 }
& db.table1.insert({id:1,name:"zxy",age:29})
&新开一个终端,登录11537(从),查看数据是否一致[root@localhost ~]# /usr/local/bin/mongo --port=11537
MongoDB shell version: 1.8.2
connecting to: 127.0.0.1:11537/test
& show dbs
& use brucezuo
switched to db brucezuo
& db.table1.find()
{ "_id" : ObjectId("4e2e348ed502dbae1aee469e"), "id" : 1, "name" : "zxy", "age" : 29 }
&两端数据完全一致。从上面的测试来看,mongodb对主从复制的配置比MYSQL要方便太多了。
阅读(716) | 评论(0) | 转发(0) |
相关热门文章
给主人留下些什么吧!~~
请登录后评论。

我要回帖

更多关于 mongodb 主从配置 的文章

 

随机推荐