【Mongodb】 replica set 两种添加节点方法的日志分析

    这篇文章算是《replica set 添加和删除节点》的点缀,本来没打算查看添加节点的第二种方法,即拷贝其他节点的数据文件到新的节点,本着“入微”的原则,对两种方法做一下对比,具体添加节点的过程和前面介绍的一样,只是在启动mongod服务之前要拷贝数据文件到本机。

下面是空库添加到一个replica set中的日志记录:

####连接primary库

Tue Nov  1 14:22:57 [initandlisten] connection accepted from 10.250.7.220:54235 #2

Tue Nov  1 14:22:57 [initandlisten] connection accepted from 10.250.7.220:54236 #3

Tue Nov  1 14:22:57 [initandlisten] connection accepted from 10.250.7.220:54237 #4

Tue Nov  1 14:22:57 [rsStart] trying to contact 10.250.7.220:27018

Tue Nov  1 14:22:57 [rsStart] trying to contact 10.250.7.220:27019

Tue Nov  1 14:22:57 [rsStart] trying to contact 10.250.7.220:27020

####从primary库复制replica set的配置信息,并保存到本地 -dbpath 指定的文件目录####

Tue Nov  1 14:22:57 [rsStart] replSet got config version 2 from a remote, saving locally

Tue Nov  1 14:22:57 [rsStart] replSet info saving a newer config version to local.system.replset

Tue Nov  1 14:22:57 [FileAllocator] allocating new datafile /opt/mongodata/r1/local.ns, filling with zeroes...

Tue Nov  1 14:22:57 [FileAllocator] creating directory /opt/mongodata/r1/_tmp

Tue Nov  1 14:22:57 [FileAllocator] done allocating datafile /opt/mongodata/r1/local.ns, size: 16MB,  took 0.118 secs

Tue Nov  1 14:22:57 [FileAllocator] allocating new datafile /opt/mongodata/r1/local.0, filling with zeroes...

Tue Nov  1 14:23:01 [FileAllocator] done allocating datafile /opt/mongodata/r1/local.0, size: 64MB,  took 3.807 secs

Tue Nov  1 14:23:01 [FileAllocator] allocating new datafile /opt/mongodata/r1/local.1, filling with zeroes...

Tue Nov  1 14:23:02 [rsStart] replSet saveConfigLocally done

Tue Nov  1 14:23:02 [FileAllocator] done allocating datafile /opt/mongodata/r1/local.1, size: 128MB,  took 1.068 secs

Tue Nov  1 14:23:02 [rsStart] replSet STARTUP2

Tue Nov  1 14:23:02 [rsMgr] replSet total number of votes is even - add arbiter or give one member an extra vote

Tue Nov  1 14:23:02 [rsSync] ******

####创建oplog 日志文件####

Tue Nov  1 14:23:02 [rsSync] creating replication oplog of size: 944MB...

Tue Nov  1 14:23:02 [FileAllocator] allocating new datafile /opt/mongodata/r1/local.2, filling with zeroes...

Tue Nov  1 14:23:04 [rsHealthPoll] replSet info member 10.250.7.220:27018 is up

Tue Nov  1 14:23:04 [rsHealthPoll] replSet member 10.250.7.220:27018 is now in state SECONDARY

Tue Nov  1 14:23:04 [rsHealthPoll] replSet info member 10.250.7.220:27019 is up

Tue Nov  1 14:23:04 [rsHealthPoll] replSet member 10.250.7.220:27019 is now in state SECONDARY

Tue Nov  1 14:23:04 [rsHealthPoll] replSet info member 10.250.7.220:27020 is up

Tue Nov  1 14:23:04 [rsHealthPoll] replSet member 10.250.7.220:27020 is now in state PRIMARY

Tue Nov  1 14:23:49 [FileAllocator] done allocating datafile /opt/mongodata/r1/local.2, size: 1024MB,  took 46.28 secs

Tue Nov  1 14:23:50 [rsSync] ******

####应用主库的日志,复制数据文件####

Tue Nov  1 14:23:50 [rsSync] replSet initial sync pending

Tue Nov  1 14:23:50 [rsSync] replSet syncing to: 10.250.7.220:27020

Tue Nov  1 14:23:50 [rsSync] build index local.me { _id: 1 }

Tue Nov  1 14:23:50 [rsSync] build index done 0 records 0.003 secs

Tue Nov  1 14:23:50 [rsSync] replSet initial sync drop all databases

Tue Nov  1 14:23:50 [rsSync] dropAllDatabasesExceptLocal 1

Tue Nov  1 14:23:50 [rsSync] replSet initial sync clone all databases

Tue Nov  1 14:23:50 [rsSync] replSet initial sync cloning db: test

Tue Nov  1 14:23:50 [FileAllocator] allocating new datafile /opt/mongodata/r1/test.ns, filling with zeroes...

Tue Nov  1 14:23:51 [FileAllocator] done allocating datafile /opt/mongodata/r1/test.ns, size: 16MB,  took 0.8 secs

Tue Nov  1 14:23:51 [FileAllocator] allocating new datafile /opt/mongodata/r1/test.0, filling with zeroes...

Tue Nov  1 14:23:55 [FileAllocator] done allocating datafile /opt/mongodata/r1/test.0, size: 64MB,  took 3.643 secs

Tue Nov  1 14:23:55 [FileAllocator] allocating new datafile /opt/mongodata/r1/test.1, filling with zeroes...

Tue Nov  1 14:23:55 [rsSync] build index test.yql { _id: 1 }

Tue Nov  1 14:23:56 [rsSync] build index done 1 records 0.006 secs

Tue Nov  1 14:23:56 [rsSync] replSet initial sync query minValid

Tue Nov  1 14:23:56 [rsSync] replSet initial oplog application from 10.250.7.220:27020 starting at Nov  1 14:14:05:1 to Nov  1 14:14:05:1

Tue Nov  1 14:23:57 [rsSync] replSet initial sync finishing up

Tue Nov  1 14:23:57 [rsSync] replSet set minValid=4eaf8e2d:1

Tue Nov  1 14:23:57 [rsSync] build index local.replset.minvalid { _id: 1 }

Tue Nov  1 14:23:57 [rsSync] build index done 0 records 0.023 secs

Tue Nov  1 14:23:57 [rsSync] replSet initial sync done

Tue Nov  1 14:23:58 [rsSync] replSet syncing to: 10.250.7.220:27020

Tue Nov  1 14:23:58 [rsSync] replSet SECONDARY

Tue Nov  1 14:24:02 [FileAllocator] done allocating datafile /opt/mongodata/r1/test.1, size: 128MB,  took 7.428 secs

Tue Nov  1 14:24:16 [clientcursormon] mem (MB) res:16 virt:2848 mapped:1312

Tue Nov  1 14:24:42 [initandlisten] connection accepted from 127.0.0.1:21141 #5

Tue Nov  1 14:29:16 [clientcursormon] mem (MB) res:16 virt:2849 mapped:1312

Tue Nov  1 14:34:16 [clientcursormon] mem (MB) res:16 virt:2913 mapped:1312

Tue Nov  1 14:39:16 [clientcursormon] mem (MB) res:16 virt:2913 mapped:1312

===下面是删除节点以后的日志==

Tue Nov  1 14:39:28 [conn2] end connection 10.250.7.220:54235

Tue Nov  1 14:39:29 [rsMgr] replset msgReceivedNewConfig version: version: 3

Tue Nov  1 14:39:29 [rsMgr] replSet info saving a newer config version to local.system.replset

Tue Nov  1 14:39:29 [rsMgr] replSet saveConfigLocally done

Tue Nov  1 14:39:29 [rsMgr] replSet error self not present in the repl set configuration:

Tue Nov  1 14:39:29 [rsMgr] { _id: "myset", version: 3, members: [ { _id: 0, host: "10.250.7.220:27018" }, { _id: 1, host: "10.250.7.220:27019" }, { _id: 2, host: "10.

250.7.220:27020" } ] }

-------------------------------------------------------------------------

这是拷贝replica set myset 中其他节点的数据文件!(记住是数据文件,一定不要mongod.lock ,每个mongod进程都需要自己的数据目录,如果你要运行3个mongod的实例,那么就需要3个独自的目录。mongod启动的时候会在数据目录创建一个mongod.lock文件,阻止其他进程使用此目录.)

####连接primary库,这一点和上面一种方法一样。

Tue Nov  1 15:53:24 [initandlisten] connection accepted from 10.250.7.220:54761 #2

Tue Nov  1 15:53:28 [initandlisten] connection accepted from 10.250.7.220:54763 #3

Tue Nov  1 15:53:28 [initandlisten] connection accepted from 10.250.7.220:54764 #4

Tue Nov  1 15:53:34 [clientcursormon] mem (MB) res:31 virt:2606 mapped:1232

Tue Nov  1 15:53:34 [rsStart] trying to contact 10.250.7.220:27018

Tue Nov  1 15:53:34 [rsStart] trying to contact 10.250.7.220:27019

Tue Nov  1 15:53:34 [rsStart] trying to contact 10.250.7.220:27020

####拷贝配置文件,并保存。这一点和上面一种方法一样。

Tue Nov  1 15:53:34 [rsStart] replSet got config version 6 from a remote, saving locally

Tue Nov  1 15:53:34 [rsStart] replSet info saving a newer config version to local.system.replset

Tue Nov  1 15:53:34 [rsStart] replSet saveConfigLocally done

Tue Nov  1 15:53:34 [rsStart] replSet STARTUP2

Tue Nov  1 15:53:34 [rsMgr] replSet total number of votes is even - add arbiter or give one member an extra vote

Tue Nov  1 15:53:34 [rsSync] replSet SECONDARY

Tue Nov  1 15:53:34 [rsHealthPoll] replSet info member 10.250.7.220:27018 is up

Tue Nov  1 15:53:34 [rsHealthPoll] replSet member 10.250.7.220:27018 is now in state SECONDARY

Tue Nov  1 15:53:34 [rsHealthPoll] replSet info member 10.250.7.220:27019 is up

Tue Nov  1 15:53:34 [rsHealthPoll] replSet member 10.250.7.220:27019 is now in state SECONDARY

Tue Nov  1 15:53:34 [rsHealthPoll] replSet info member 10.250.7.220:27020 is up

Tue Nov  1 15:53:34 [rsHealthPoll] replSet member 10.250.7.220:27020 is now in state PRIMARY

Tue Nov  1 15:53:34 [rsMgr] replSet can't see a majority, will not try to elect self

Tue Nov  1 15:53:38 [rsSync] replSet syncing to: 10.250.7.220:27020

从上面的日志来看,整个第二种方法初始化的速度比较快。当然考虑拷贝数据文件的时间,在大量数据的时候,才能看到哪一个比较好!

Note:学习mongodb 的时候注意查看输出日志。从里面能看到很多重要的信息。如果对mongodb 进行监控的话,也要对输出日志进行分析!

时间: 2024-09-14 04:01:26

【Mongodb】 replica set 两种添加节点方法的日志分析的相关文章

mongoDB分页的两种方法(图例)_MongoDB

mongoDB分页的两种方法mongoDB的分页查询是通过limit(),skip(),sort()这三个函数组合进行分页查询的下面这个是我的测试数据db.test.find().sort({"age":1}); 第一种方法查询第一页的数据:db.test.find().sort({"age":1}).limit(2); 查询第二页的数据:db.test.find().sort({"age":1}).skip(2).limit(2); 查询其他页

thinkPHP中钩子的两种配置调用方法详解_php实例

本文实例讲述了thinkPHP中钩子的两种配置调用方法.分享给大家供大家参考,具体如下: thinkphp的钩子行为类是一个比较难以理解的问题,网上有很多写thinkphp钩子类的文章,我也是根据网上的文章来设置thinkphp的钩子行为的,但根据这些网上的文章,我在设置的过程中,尝试了十几次都没有成功,不过,我还是没有放弃,最后还是在一边调节细节,一边试验的过程中实现了钩子行为的设置.下面是我个人的设置经验,在这里跟大家分享一下. 个人做了两种设置,都试验成功了,一个简单点,在thinkphp

python+django能够同时使用mongodb和mysql两种数据库引擎吗?

问题描述 python+django能够同时使用mongodb和mysql两种数据库引擎吗? 各位朋友们好,我原来做一个项目:因为表没有关联,所以用的是非关系型数据库mongodb,项目开发环境用的是python+django,部署在ubuntu上.当时用了pymongo做python和mongodb的连接,用mongoengine做了django与mongodb的连接. 现在来了新的需求,表之间有关联,因此我准备添加一个mysql数据库. 请教各位朋友们,django展示网页的时候,能够同时展

Android两种不同的方法去实现图像的放大与缩小(很有帮助)

其实不算两种不同的方法,只是一个方法用的是硬编码,而另一个用的是MVC设计模式,用的都是同一个类Matrix. 第一种:硬编码方式 MainActivity.java package com.android.yhb; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Matrix; import an

Android——Fragment介绍及两种基本使用方法

       今天在调ViewPager的时候,感觉ViewPager+Fragment这种做法更灵活,所以,现在拿出来Fragment再整理下. 一,为什么要用Fragment          1,灵活布局                          Fragment表现Activity中用UI的一个行为或者一部分.可以组合多个fragment放在一个单独的activity中来创建一个多界面区域的UI,并可以在多个activity里重用某一个fragment.把fragment想象成一

thinkPHP中钩子的两种配置调用方法详解

本文实例讲述了thinkPHP中钩子的两种配置调用方法.分享给大家供大家参考,具体如下: thinkphp的钩子行为类是一个比较难以理解的问题,网上有很多写thinkphp钩子类的文章,我也是根据网上的文章来设置thinkphp的钩子行为的,但根据这些网上的文章,我在设置的过程中,尝试了十几次都没有成功,不过,我还是没有放弃,最后还是在一边调节细节,一边试验的过程中实现了钩子行为的设置.下面是我个人的设置经验,在这里跟大家分享一下. 个人做了两种设置,都试验成功了,一个简单点,在thinkphp

AJAX 开发的两种不同的方法

ajax     最近几年Ajax应用程序开发出现了两种截然不同的方法,每一种方法都对以前的结构模型进行扩展.由于两种方法性质看起来是不同的,所以在实际应用程序的开发中应选择其中一种.     当我们第一次听到Ajax这个术语的时候,我们的第一反应可能就是其较高的Web页面交互性.至少在JavaScript中的Web应用程序部分必要的代码提供交互性,虽然在Ajax应用程序意义方面都有一致的意见,但对于开发者如何与JavaScript进行交互或者如何在客户端与服务器之间分配显示逻辑有一些分歧.  

ASP两种调试程序的方法

程序 大家在调试一个程序时,有时候可能这个程序很长,多到成百上千行的代码,如果你的程序写的又零乱不堪,到了这种时候通常都不知道自己写了些什么,有些人还比较懒,像我,连个注释都不写,但是我从来没有被我的程序搞晕过,一般来说,不管你的程序是不是面向对像的开发模式,在局部的程序代码里,你的程序还是结构式的,如果你没有把一个模块分成几个小模块去做,而是几百行甚至上千行的代码全在一个模块里,那么一但出了问题,你恐怕哭都来不及,你不得不整天整天的找bug,就算你的程序运行上没有问题,而在设计上却有漏洞什么的

SQL服务器内存有两种基本管理方法:动态分配和静态分配

动态|服务器|静态 SQL服务器内存有两种基本管理方法:动态分配和静态分配 控制程序可使用的内存数量.动态分配允许管理员声明一块内存的大小:考虑到它的实际使用,SQL服务器可以分配给其需要占用的内存的最大值,并且(理论上)在没有使用内存的情况下将其释放.静态分配则是创建一块固定的内存空间,提供给SQL Server使用--不再进行分配. 在默认情况下,SQL Server被设置成动态分配,分配给其正在运行的计算机内所有可用的物理内存.许多管理员注意到SQL Server内存随时间的流逝被逐渐消耗