Mongodb的oplogsize修改
<p><span style="font-size: 18pt">前景:</span></p><p> 由于某些情况,我们必须修改oplog size来增大同步窗口期,例如业务的快速增长,延迟节点无法跟上Primary节点的oplog增长速度;MongoDB在3.6版本后才对oplogSize支持了动态修改,但MongoDB版本低于3.6版本则需要逐个剔除副本集逐个扩容,至此记录修改oplogsize的步骤。</p>
<p><strong>查询oplogsize大小命令:</strong></p>
<p>repset:PRIMARY> db.getReplicationInfo() #查看 oplog 的状态,输出信息包括 oplog 日志大小,操作日志记录的起始时间</p>
<p>repset:PRIMARY> db.printReplicationInfo() #查看oplog的状态、总大小、使用大小、存储的时间范围、记录时长。</p>
<p><span><span>repset:PRIMARY> db.oplog.rs.stats().maxSize #显示当前的oplog大小 maxSize</span></span><code class="docutils literal"><span class="pre"><br></span></code></p>
<div class="cnblogs_code">
<pre>repset:PRIMARY><span style="color: rgba(0, 0, 0, 1)"> db.getReplicationInfo()
{
</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">logSizeMB</span><span style="color: rgba(128, 0, 0, 1)">"</span> : 1755.03173828125<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">usedMB</span><span style="color: rgba(128, 0, 0, 1)">"</span> : <span style="color: rgba(128, 0, 128, 1)">0.84</span><span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">timeDiff</span><span style="color: rgba(128, 0, 0, 1)">"</span> : <span style="color: rgba(128, 0, 128, 1)">861042</span><span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">timeDiffHours</span><span style="color: rgba(128, 0, 0, 1)">"</span> : <span style="color: rgba(128, 0, 128, 1)">239.18</span><span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">tFirst</span><span style="color: rgba(128, 0, 0, 1)">"</span> : <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Mon Jun 24 2019 16:18:20 GMT+0800 (CST)</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">tLast</span><span style="color: rgba(128, 0, 0, 1)">"</span> : <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Thu Jul 04 2019 15:29:02 GMT+0800 (CST)</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">now</span><span style="color: rgba(128, 0, 0, 1)">"</span> : <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Thu Jul 04 2019 15:29:06 GMT+0800 (CST)</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
}
repset:PRIMARY</span>><span style="color: rgba(0, 0, 0, 1)"> db.printReplicationInfo()
configured oplog size: 1755.03173828125MB
log length start to end: 861132secs (</span><span style="color: rgba(128, 0, 128, 1)">239</span><span style="color: rgba(0, 0, 0, 1)">.2hrs)
oplog first </span><span style="color: rgba(0, 0, 255, 1)">event</span> time:Mon Jun <span style="color: rgba(128, 0, 128, 1)">24</span> <span style="color: rgba(128, 0, 128, 1)">2019</span> <span style="color: rgba(128, 0, 128, 1)">16</span>:<span style="color: rgba(128, 0, 128, 1)">18</span>:<span style="color: rgba(128, 0, 128, 1)">20</span> GMT+<span style="color: rgba(128, 0, 128, 1)">0800</span><span style="color: rgba(0, 0, 0, 1)"> (CST)
oplog last </span><span style="color: rgba(0, 0, 255, 1)">event</span> time: Thu Jul <span style="color: rgba(128, 0, 128, 1)">04</span> <span style="color: rgba(128, 0, 128, 1)">2019</span> <span style="color: rgba(128, 0, 128, 1)">15</span>:<span style="color: rgba(128, 0, 128, 1)">30</span>:<span style="color: rgba(128, 0, 128, 1)">32</span> GMT+<span style="color: rgba(128, 0, 128, 1)">0800</span><span style="color: rgba(0, 0, 0, 1)"> (CST)
now: Thu Jul </span><span style="color: rgba(128, 0, 128, 1)">04</span> <span style="color: rgba(128, 0, 128, 1)">2019</span> <span style="color: rgba(128, 0, 128, 1)">15</span>:<span style="color: rgba(128, 0, 128, 1)">30</span>:<span style="color: rgba(128, 0, 128, 1)">36</span> GMT+<span style="color: rgba(128, 0, 128, 1)">0800</span> (CST)</pre>
</div>
<p><span style="font-size: 18pt">一、修改MongoDB3.6版本以上的oplog</span></p>
<p> 3.6版本后支持的动态扩容方法</p>
<p>1、修改之前oplogsize的大小:</p>
<div class="cnblogs_code">
<pre>repset:PRIMARY><span style="color: rgba(0, 0, 0, 1)"> db.getReplicationInfo()
{
</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">logSizeMB</span><span style="color: rgba(128, 0, 0, 1)">"</span> : <span style="color: rgba(128, 0, 128, 1)">1755.03173828125</span><span style="color: rgba(0, 0, 0, 1)">, #大小为1.8G
</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">usedMB</span><span style="color: rgba(128, 0, 0, 1)">"</span> : <span style="color: rgba(128, 0, 128, 1)">0.83</span><span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">timeDiff</span><span style="color: rgba(128, 0, 0, 1)">"</span> : <span style="color: rgba(128, 0, 128, 1)">860512</span><span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">timeDiffHours</span><span style="color: rgba(128, 0, 0, 1)">"</span> : <span style="color: rgba(128, 0, 128, 1)">239.03</span><span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">tFirst</span><span style="color: rgba(128, 0, 0, 1)">"</span> : <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Mon Jun 24 2019 16:18:20 GMT+0800 (CST)</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">tLast</span><span style="color: rgba(128, 0, 0, 1)">"</span> : <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Thu Jul 04 2019 15:20:12 GMT+0800 (CST)</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">now</span><span style="color: rgba(128, 0, 0, 1)">"</span> : <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Thu Jul 04 2019 15:20:15 GMT+0800 (CST)</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
}</span></pre>
</div>
<p>登录到mongo shell后查看oplog.rs集合大小</p>
<div class="cnblogs_code">
<pre>repset:PRIMARY><span style="color: rgba(0, 0, 0, 1)"> use local
switched to db local
repset:PRIMARY</span>><span style="color: rgba(0, 0, 0, 1)"> db.oplog.rs.stats().maxSize
NumberLong(</span><span style="color: rgba(128, 0, 128, 1)">1840284160</span>)#单位为bytes,即1.8G</pre>
</div>
<p>2、通过管理命令修改</p>
<div class="cnblogs_code">
<pre>repset:PRIMARY><span style="color: rgba(0, 0, 0, 1)"> use local
switched to db local
repset:PRIMARY</span>> db.adminCommand({replSetResizeOplog:<span style="color: rgba(128, 0, 128, 1)">1</span>,size:<span style="color: rgba(128, 0, 128, 1)">4096</span><span style="color: rgba(0, 0, 0, 1)">}) #单位为MB,扩容至4G
{
</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">ok</span><span style="color: rgba(128, 0, 0, 1)">"</span> : <span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">operationTime</span><span style="color: rgba(128, 0, 0, 1)">"</span> : Timestamp(<span style="color: rgba(128, 0, 128, 1)">1562225042</span>, <span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)">),
</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">$clusterTime</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> : {
</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">clusterTime</span><span style="color: rgba(128, 0, 0, 1)">"</span> : Timestamp(<span style="color: rgba(128, 0, 128, 1)">1562225042</span>, <span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)">),
</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">signature</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> : {
</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">hash</span><span style="color: rgba(128, 0, 0, 1)">"</span> : BinData(<span style="color: rgba(128, 0, 128, 1)">0</span>,<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">AAAAAAAAAAAAAAAAAAAAAAAAAAA=</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">),
</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">keyId</span><span style="color: rgba(128, 0, 0, 1)">"</span> : NumberLong(<span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">)
}
}
}</span></pre>
</div>
<p>3、验证是否成功</p>
<div class="cnblogs_code">
<pre>repset:PRIMARY><span style="color: rgba(0, 0, 0, 1)"> db.oplog.rs.stats().maxSize
NumberLong(</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">4294967296</span><span style="color: rgba(128, 0, 0, 1)">"</span>)</pre>
</div>
<p>至此,Mongodb的oplogsize动态扩展成功。</p>
<p><span style="color: rgba(255, 0, 0, 1)"><strong>注意:</strong></span></p>
<p><span> <span style="color: rgba(255, 0, 0, 1)">更改给定副本集成员 </span></span><span style="color: rgba(255, 0, 0, 1)"><span style="color: rgba(255, 0, 0, 1)"><code class="xref mongodb mongodb-dbcommand docutils literal">replSetResizeOplog</code></span></span><span><span><span style="color: rgba(255, 0, 0, 1)">的oplog大小不会更改副本集中任何其他成员的oplog大小</span>。</span><span>必须</span></span><code class="xref mongodb mongodb-dbcommand docutils literal">replSetResizeOplog</code><span><span>在群集中的每个副本集成员上</span><span>运行 </span><span>,以更改所有成员的oplog大小。</span></span></p>
<p><span> 减小OPLOG大小并</span><em>不能</em><span><span>自动收回磁盘空间。</span><span>您必须</span></span><code class="xref mongodb mongodb-dbcommand docutils literal">compact</code><span><span>针对</span><span>数据库</span><span>中的 </span></span><code class="docutils literal">oplog.rs</code><span><span>集合</span><span>运行</span></span><code class="docutils literal">local</code><span>。</span><code class="docutils literal">compact</code><span><span> 阻止它运行的数据库上的所有操作。</span><span>运行</span></span><code class="docutils literal">compact</code><span>针对</span><code class="docutils literal">oplog.rs</code><span><span>因此防止OPLOG同步。</span><span>有关调整oplog和压缩大小的过程 </span></span><code class="docutils literal">oplog.rs</code><span>,请参阅</span>更改Oplog的大小<span>。</span></p>
<p><span style="font-size: 18pt">二、修改MongoDB3.6版本以下的oplog</span></p>
<p><span>需求: Oplog扩容,尽量少的影响业务 </span></p>
<p><span>思路:先由从节点开始,一台一台的从复制集中剥离,修改,再回归复制集,最后操作主节点来减少业务影响时间。</span></p>
<p><span>流程:先关闭一个从节点,去掉–replSet启动参数,更换启动端口–port,将节点以单机模式启动。</span></p>
<p><span>备份:备份现有的oplog</span></p>
<p><span style="font-size: 14pt">详细过程:</span></p>
<p><span style="font-size: 18.6667px"><span style="font-size: 14px">1、关闭从节点</span><br></span></p>
<div class="cnblogs_code">
<pre># ps -ef|<span style="color: rgba(0, 0, 0, 1)">grep mongo
root </span><span style="color: rgba(128, 0, 128, 1)">28527</span> <span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(128, 0, 128, 1)">0</span> <span style="color: rgba(128, 0, 128, 1)">14</span>:<span style="color: rgba(128, 0, 128, 1)">46</span> ? <span style="color: rgba(128, 0, 128, 1)">00</span>:<span style="color: rgba(128, 0, 128, 1)">00</span>:<span style="color: rgba(128, 0, 128, 1)">17</span> mongod -f /etc/<span style="color: rgba(0, 0, 0, 1)">mongod1.conf
root </span><span style="color: rgba(128, 0, 128, 1)">28605</span> <span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(128, 0, 128, 1)">0</span> <span style="color: rgba(128, 0, 128, 1)">14</span>:<span style="color: rgba(128, 0, 128, 1)">46</span> ? <span style="color: rgba(128, 0, 128, 1)">00</span>:<span style="color: rgba(128, 0, 128, 1)">00</span>:<span style="color: rgba(128, 0, 128, 1)">18</span> mongod -f /etc/<span style="color: rgba(0, 0, 0, 1)">mongod2.conf
root </span><span style="color: rgba(128, 0, 128, 1)">28686</span> <span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(128, 0, 128, 1)">0</span> <span style="color: rgba(128, 0, 128, 1)">14</span>:<span style="color: rgba(128, 0, 128, 1)">46</span> ? <span style="color: rgba(128, 0, 128, 1)">00</span>:<span style="color: rgba(128, 0, 128, 1)">00</span>:<span style="color: rgba(128, 0, 128, 1)">12</span> mongod -f /etc/<span style="color: rgba(0, 0, 0, 1)">mongod3.conf</span><span style="color: rgba(0, 0, 0, 1)">
root </span><span style="color: rgba(128, 0, 128, 1)">30794</span> <span style="color: rgba(128, 0, 128, 1)">28282</span><span style="color: rgba(128, 0, 128, 1)">0</span> <span style="color: rgba(128, 0, 128, 1)">15</span>:<span style="color: rgba(128, 0, 128, 1)">50</span> pts/<span style="color: rgba(128, 0, 128, 1)">0</span> <span style="color: rgba(128, 0, 128, 1)">00</span>:<span style="color: rgba(128, 0, 128, 1)">00</span>:<span style="color: rgba(128, 0, 128, 1)">00</span><span style="color: rgba(0, 0, 0, 1)"> grep mongo
# mongod --shutdown -f /etc/<span style="color: rgba(0, 0, 0, 1)">mongod2.conf
killing process with pid: </span><span style="color: rgba(128, 0, 128, 1)">28605</span></pre>
</div>
<p>2、修改从节点配置文件,</p>
<p> 注释副本集配置参数并修改端口,及单击模式启动</p>
<div class="cnblogs_code">
<pre># mongod -f /etc/<span style="color: rgba(0, 0, 0, 1)">mongod2.conf
about to fork child process, waiting until server </span><span style="color: rgba(0, 0, 255, 1)">is</span> ready <span style="color: rgba(0, 0, 255, 1)">for</span><span style="color: rgba(0, 0, 0, 1)"> connections.
forked process: </span><span style="color: rgba(128, 0, 128, 1)">30940</span><span style="color: rgba(0, 0, 0, 1)">
child process started successfully, parent exiting</span></pre>
</div>
<p>注:此时停止掉副节点的依旧保持在副本集中,不过此时它的状态为不可达,健康值为0。在作为单机模式启动修改完成,再以副本集模式启动即可。</p>
<p>3、备份节点oplog记录</p>
<div class="cnblogs_code">
<pre># mongodump -h <span style="color: rgba(128, 0, 128, 1)">172.17</span>.<span style="color: rgba(128, 0, 128, 1)">136.124</span>:<span style="color: rgba(128, 0, 128, 1)">27021</span> -dlocal -c oplog.rs -o /root/<span style="color: rgba(0, 0, 0, 1)">oplog
</span><span style="color: rgba(128, 0, 128, 1)">2019</span>-<span style="color: rgba(128, 0, 128, 1)">07</span>-04T15:<span style="color: rgba(128, 0, 128, 1)">59</span>:<span style="color: rgba(128, 0, 128, 1)">01.603</span>+<span style="color: rgba(128, 0, 128, 1)">0800</span><span style="color: rgba(0, 0, 0, 1)"> writing local.oplog.rs to
</span><span style="color: rgba(128, 0, 128, 1)">2019</span>-<span style="color: rgba(128, 0, 128, 1)">07</span>-04T15:<span style="color: rgba(128, 0, 128, 1)">59</span>:<span style="color: rgba(128, 0, 128, 1)">01.630</span>+<span style="color: rgba(128, 0, 128, 1)">0800</span> done dumping local.oplog.rs (<span style="color: rgba(128, 0, 128, 1)">8069</span> documents)</pre>
</div>
<p>4、进入mongo,将现在的oplog中最新的位置复制到tmp表(local数据库)中:</p>
<div class="cnblogs_code">
<pre>><span style="color: rgba(0, 0, 0, 1)"> use local
switched to db local
</span>> db.temp.save( db.oplog.rs.find( { }, { ts: <span style="color: rgba(128, 0, 128, 1)">1</span>, h: <span style="color: rgba(128, 0, 128, 1)">1</span> } ).sort( {$natural : -<span style="color: rgba(128, 0, 128, 1)">1</span>} ).limit(<span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)">).next() )
WriteResult({ </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">nInserted</span><span style="color: rgba(128, 0, 0, 1)">"</span> : <span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)"> })
</span>><span style="color: rgba(0, 0, 0, 1)"> db.temp.find()#验证记录是否存在
{ </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">_id</span><span style="color: rgba(128, 0, 0, 1)">"</span> : ObjectId(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">5d1db2646bebcb3f6483cce3</span><span style="color: rgba(128, 0, 0, 1)">"</span>), <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">ts</span><span style="color: rgba(128, 0, 0, 1)">"</span> : Timestamp(<span style="color: rgba(128, 0, 128, 1)">1562226683</span>, <span style="color: rgba(128, 0, 128, 1)">1</span>), <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">h</span><span style="color: rgba(128, 0, 0, 1)">"</span> : NumberLong(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">2207544736706975504</span><span style="color: rgba(128, 0, 0, 1)">"</span>) }</pre>
</div>
<p> 5、删除原有oplog集合</p>
<div class="cnblogs_code">
<pre>><span style="color: rgba(0, 0, 0, 1)"> db.oplog.rs.drop()
</span><span style="color: rgba(0, 0, 255, 1)">true</span></pre>
</div>
<p>6、创建新的oplog集合,为4G</p>
<div class="cnblogs_code">
<pre>> db.runCommand({create:<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">oplog.rs</span><span style="color: rgba(128, 0, 0, 1)">"</span>,capped:<span style="color: rgba(0, 0, 255, 1)">true</span>,size:(<span style="color: rgba(128, 0, 128, 1)">4</span>*<span style="color: rgba(128, 0, 128, 1)">1024</span>*<span style="color: rgba(128, 0, 128, 1)">1024</span>*<span style="color: rgba(128, 0, 128, 1)">1024</span><span style="color: rgba(0, 0, 0, 1)">)})
{ </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">ok</span><span style="color: rgba(128, 0, 0, 1)">"</span> : <span style="color: rgba(128, 0, 128, 1)">1</span> }#创建成功</pre>
</div>
<p>7、将tmp中的数据存储到新的oplog中,并验证</p>
<div class="cnblogs_code">
<pre>><span style="color: rgba(0, 0, 0, 1)"> db.oplog.rs.save( db.temp.findOne() )
WriteResult({
</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">nMatched</span><span style="color: rgba(128, 0, 0, 1)">"</span> : <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">nUpserted</span><span style="color: rgba(128, 0, 0, 1)">"</span> : <span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">nModified</span><span style="color: rgba(128, 0, 0, 1)">"</span> : <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">_id</span><span style="color: rgba(128, 0, 0, 1)">"</span> : ObjectId(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">5d1db2646bebcb3f6483cce3</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">)
})
</span>><span style="color: rgba(0, 0, 0, 1)"> db.oplog.rs.find()#验证
{ </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">_id</span><span style="color: rgba(128, 0, 0, 1)">"</span> : ObjectId(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">5d1db2646bebcb3f6483cce3</span><span style="color: rgba(128, 0, 0, 1)">"</span>), <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">ts</span><span style="color: rgba(128, 0, 0, 1)">"</span> : Timestamp(<span style="color: rgba(128, 0, 128, 1)">1562226683</span>, <span style="color: rgba(128, 0, 128, 1)">1</span>), <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">h</span><span style="color: rgba(128, 0, 0, 1)">"</span> : NumberLong(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">2207544736706975504</span><span style="color: rgba(128, 0, 0, 1)">"</span>) }</pre>
</div>
<p>8、关闭从节点,并恢复原有config配置,并在config中设置oplogSize为你之前设置的大小,并启动。</p>
<p> 关闭从节点</p>
<div class="cnblogs_code">
<pre># mongod --shutdown -f /etc/<span style="color: rgba(0, 0, 0, 1)">mongod2.conf
killing process with pid: </span><span style="color: rgba(128, 0, 128, 1)">30940</span></pre>
</div>
<p> 恢复原有配置文件时,要注意oplogSizeMB参数值的修改,修改为扩容后的值</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">#配置文件中指定oplog大小<br>replication:
oplogSizeMB: </span><span style="color: rgba(128, 0, 128, 1)">4096</span><span style="color: rgba(0, 0, 0, 1)">
replSetName: repset</span></pre>
</div>
<p> 重新启动从节点</p>
<div class="cnblogs_code">
<pre># mongod -f /etc/<span style="color: rgba(0, 0, 0, 1)">mongod2.conf
about to fork child process, waiting until server </span><span style="color: rgba(0, 0, 255, 1)">is</span> ready <span style="color: rgba(0, 0, 255, 1)">for</span><span style="color: rgba(0, 0, 0, 1)"> connections.
forked process: </span><span style="color: rgba(128, 0, 128, 1)">31702</span><span style="color: rgba(0, 0, 0, 1)">
child process started successfully, parent exiting</span></pre>
</div>
<p>9、登陆mongoshell检查节点状态及oplog大小</p>
<div class="cnblogs_code">
<pre># mongo 172.17.136.124:27018<br>repset:SECONDARY><span style="color: rgba(0, 0, 0, 1)"> db.getReplicationInfo()
{
</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">logSizeMB</span><span style="color: rgba(128, 0, 0, 1)">"</span> : <span style="color: rgba(128, 0, 128, 1)">4096</span><span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">usedMB</span><span style="color: rgba(128, 0, 0, 1)">"</span> : <span style="color: rgba(128, 0, 128, 1)">0.01</span><span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">timeDiff</span><span style="color: rgba(128, 0, 0, 1)">"</span> : <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">timeDiffHours</span><span style="color: rgba(128, 0, 0, 1)">"</span> : <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">tFirst</span><span style="color: rgba(128, 0, 0, 1)">"</span> : <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Thu Jul 04 2019 15:51:23 GMT+0800 (CST)</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">tLast</span><span style="color: rgba(128, 0, 0, 1)">"</span> : <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Thu Jul 04 2019 15:51:23 GMT+0800 (CST)</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">now</span><span style="color: rgba(128, 0, 0, 1)">"</span> : <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Thu Jul 04 2019 16:20:43 GMT+0800 (CST)</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
}</span></pre>
</div>
<p> 至此,oplog大小修改完毕,依次修改其他节点,修改主节点是可先降级或直接关闭主节点</p>
<div class="cnblogs_code">
<pre>Primary>rs.stepDown() ---可以更有效的产生选举</pre>
</div>
<p>补充:</p>
<p>1、若是在启动副本集是指定了oplogsize大小。在动态扩容后,oplog.rs集合大小已发生变化,但配置文件中最初指定的oplogsize大小不变,并且重启后依旧不变,但是oplogsize依旧是扩容之后的大小。</p>
<p>2、如果减小oplogsize的大小,可能会造成oplog记录丢失,导致节点异常,故不可减小。</p>
<p>参考文档:</p>
<p>https://docs.mongodb.com/manual/reference/command/replSetResizeOplog/#dbcmd.replSetResizeOplog #oplog动态扩容官网资料</p>
<p>https://docs.mongodb.com/manual/core/replica-set-oplog/#oplog #oplog及副本集相关文档</p>
<p>http://www.mongoing.com/oplog #oplog扩容参考文档</p>
<p>http://www.mongoing.com/blog/oplog-size #oplog大小设置估算</p>
<p>http://blog.itpub.net/31547523/viewspace-2214748/</p>
<p>https://www.cnblogs.com/operationhome/p/10688798.html</p><br><br>
来源:https://www.cnblogs.com/wushaoyu/p/11132795.html
頁:
[1]