MongoDB 持久化
<h1 class="md-end-block md-heading"><span class="md-plain">复制</span></h1><p class="md-end-block md-p"><span class="md-plain">MongoDB复制是将数据同步在多个服务器的过程。</span></p>
<p class="md-end-block md-p"><span class="md-plain">复制提供了数据的冗余备份,并在多个服务器上存储数据副本,提高了数据的可用性, 并可以保证数据的安全性。</span></p>
<ul class="ul-list" data-mark="-">
<li class="md-list-item">
<p class="md-end-block md-p"><span class="md-plain">保障数据的安全性</span></p>
</li>
<li class="md-list-item">
<p class="md-end-block md-p"><span class="md-plain">数据高可用性 (24*7)</span></p>
</li>
<li class="md-list-item">
<p class="md-end-block md-p"><span class="md-plain">灾难恢复</span></p>
</li>
<li class="md-list-item">
<p class="md-end-block md-p"><span class="md-plain">无需停机维护(如备份,重建索引,压缩)</span></p>
</li>
<li class="md-list-item">
<p class="md-end-block md-p"><span class="md-plain">分布式读取数据</span></p>
</li>
</ul>
<p class="md-end-block md-p"><span class="md-plain">MongoDB复制是主从结构:一主一从或一主多从</span></p>
<p class="md-end-block md-p"><strong>主从节点设置</strong></p>
<ul class="ul-list" data-mark="*">
<li class="md-list-item">
<p class="md-end-block md-p"><span class="md-plain">启动一个MongoDB服务,连接后使用命令<strong>rs.initiate()</strong><span class="md-plain">来启动一个新的副本集</span></span></p>
<ul class="ul-list" data-mark="*">
<li class="md-list-item">
<p class="md-end-block md-p"><span class="md-plain">使用<strong>rs.conf()</strong><span class="md-plain">来查看副本集的配置,使用<strong>rs.status()</strong><span class="md-plain">命令查看副本集状态</span></span></span></p>
</li>
</ul>
</li>
<li class="md-list-item">
<p class="md-end-block md-p"><span class="md-plain">添加从节点:使用<strong>rs.add(HOST_NAME:PORT)</strong><span class="md-plain">方法来添加副本集的成员</span></span></p>
<ul class="ul-list" data-mark="*">
<li class="md-list-item">
<p class="md-end-block md-p"><span class="md-plain">使用命令<strong>db.isMaster()</strong><span class="md-plain">判断当前运行的Mongo服务是否为主节点</span></span></p>
</li>
</ul>
</li>
</ul>
<p class="md-end-block md-p"><span class="md-plain">MongoDB中只能通过主节点将Mongo服务添加到副本集中,主从在主机宕机后所有服务将停止,而副本集在主机宕机后,副本会接管主节点成为主节点,不会出现宕机的情况。</span></p>
<h1 class="md-end-block md-heading"><span class="md-plain">分片</span></h1>
<p class="md-end-block md-p"><span class="md-plain">分片:是另一种集群,当MongoDB存储海量的数据时,一台机器可能不足以存储数据,也可能不足以提供可接受的读写吞吐量。这时就可以通过在多台机器上分割数据,使得数据库系统能存储和处理更多的数据。</span></p>
<ul class="ul-list" data-mark="-">
<li class="md-list-item">
<p class="md-end-block md-p"><span class="md-plain">复制所有的写入操作到主节点</span></p>
</li>
<li class="md-list-item">
<p class="md-end-block md-p"><span class="md-plain">延迟的敏感数据会在主节点查询</span></p>
</li>
<li class="md-list-item">
<p class="md-end-block md-p"><span class="md-plain">单个副本集限制在12个节点</span></p>
</li>
<li class="md-list-item">
<p class="md-end-block md-p"><span class="md-plain">当请求量巨大时会出现内存不足。</span></p>
</li>
<li class="md-list-item">
<p class="md-end-block md-p"><span class="md-plain">本地磁盘不足</span></p>
</li>
<li class="md-list-item">
<p class="md-end-block md-p"><span class="md-plain">垂直扩展价格昂贵</span></p>
</li>
</ul>
<p class="md-end-block md-p"><span class="md-plain">下图展示了在MongoDB中使用分片集群结构分布:</span></p>
<p class="md-end-block md-p"><span class="md-image md-img-loaded" data-src="https://www.runoob.com/wp-content/uploads/2013/12/sharding.png"><img src="https://www.runoob.com/wp-content/uploads/2013/12/sharding.png"></span></p>
<p class="md-end-block md-p"><span class="md-plain">上图中主要有如下所述三个主要组件:</span></p>
<ul class="ul-list" data-mark="-">
<li class="md-list-item">
<p class="md-end-block md-p"><span class="md-plain">Shard:</span></p>
<p class="md-end-block md-p"><span class="md-plain">用于存储实际的数据块,实际生产环境中一个shard server角色可由几台机器组个一个replica set承担,防止主机单点故障</span></p>
</li>
<li class="md-list-item">
<p class="md-end-block md-p"><span class="md-plain">Config Server:</span></p>
<p class="md-end-block md-p"><span class="md-plain">mongod实例,存储了整个 ClusterMetadata,其中包括 chunk信息。</span></p>
</li>
<li class="md-list-item">
<p class="md-end-block md-p"><span class="md-plain">Query Routers:</span></p>
<p class="md-end-block md-p"><span class="md-plain">前端路由,客户端由此接入,且让整个集群看上去像单一数据库,前端应用可以透明使用。</span></p>
</li>
</ul>
<h1 class="md-end-block md-heading"><span class="md-plain">备份和恢复</span></h1>
<h2 class="md-end-block md-heading"><span class="md-plain">备份</span></h2>
<p class="md-end-block md-p"><span class="md-plain">mongodump命令可以导出所有数据到指定目录中</span></p>
<pre class="md-fences md-end-block ty-contain-cm modeLoaded">mongodump <span class="cm-attribute">-h dbhost <span class="cm-attribute">-d dbname <span class="cm-attribute">-o dbdirectory</span></span></span></pre>
<ul class="ul-list" data-mark="-">
<li class="md-list-item">
<p class="md-end-block md-p"><span class="md-plain">-h:MongDB所在服务器地址,例如:127.0.0.1,当然也可以指定端口号:127.0.0.1:27017</span></p>
</li>
<li class="md-list-item">
<p class="md-end-block md-p"><span class="md-plain">-d:需要备份的数据库实例,例如:test</span></p>
</li>
<li class="md-list-item">
<p class="md-end-block md-p"><span class="md-plain">-o:备份的数据存放位置,例如:c:\data\dump,当然该目录需要提前建立,在备份完成后,系统自动在dump目录下建立一个test目录,这个目录里面存放该数据库实例的备份数据。</span></p>
</li>
</ul>
<h2 class="md-end-block md-heading"><span class="md-plain">恢复</span></h2>
<p class="md-end-block md-p"><span class="md-plain">mongorestore 命令恢复备份的数据</span></p>
<pre class="md-fences md-end-block ty-contain-cm modeLoaded">mongorestore <span class="cm-attribute">-h <hostname><:port> <span class="cm-attribute">-d dbname <path></span></span></pre>
<ul class="ul-list" data-mark="-">
<li class="md-list-item">
<p class="md-end-block md-p"><span class="md-plain">--host <:port>, -h <:port>:</span></p>
<p class="md-end-block md-p"><span class="md-plain">MongoDB所在服务器地址,默认为: localhost:27017</span></p>
</li>
<li class="md-list-item">
<p class="md-end-block md-p"><span class="md-plain">--db , -d :</span></p>
<p class="md-end-block md-p"><span class="md-plain">需要恢复的数据库实例,例如:test,当然这个名称也可以和备份时候的不一样,比如test2</span></p>
</li>
<li class="md-list-item">
<p class="md-end-block md-p"><span class="md-plain">--drop:</span></p>
<p class="md-end-block md-p"><span class="md-plain">恢复的时候,先删除当前数据,然后恢复备份的数据。就是说,恢复后,备份后添加修改的数据都会被删除,慎用哦!</span></p>
</li>
<li class="md-list-item">
<p class="md-end-block md-p"><<span class="md-plain">path>:</span></p>
<p class="md-end-block md-p"><span class="md-plain">mongorestore 最后的一个参数,设置备份数据所在位置,例如:c:\data\dump\test。</span></p>
<p class="md-end-block md-p"><span class="md-plain">你不能同时指定 <<span class="md-plain">path> 和 --dir 选项,--dir也可以设置备份目录。</span></span></p>
</li>
<li class="md-list-item">
<p class="md-end-block md-p"><span class="md-plain">--dir:</span></p>
<p class="md-end-block md-p"><span class="md-plain">指定备份的目录</span></p>
<p class="md-end-block md-p"><span class="md-plain">你不能同时指定 <<span class="md-plain">path> 和 --dir 选项。</span></span></p>
</li>
</ul>
<h1 class="md-end-block md-heading"><span class="md-plain">监控</span></h1>
<p class="md-end-block md-p"><span class="md-plain">MongoDB中提供了mongostat 和 mongotop 两个命令来监控MongoDB的运行情况</span></p>
<h2 class="md-end-block md-heading"><span class="md-plain">mongostat</span></h2>
<p class="md-end-block md-p"><span class="md-plain">mongostat是mongodb自带的状态检测工具,在命令行下使用。它会间隔固定时间获取mongodb的当前运行状态,并输出;进入mongodb\bin执行mongostat命令</span></p>
<h2 class="md-end-block md-heading"><span class="md-plain">mongotop</span></h2>
<p class="md-end-block md-p"><span class="md-plain">mongotop也是mongodb下的一个内置工具,跟踪一个MongoDB的实例,查看哪些大量的时间花费在读取和写入数据。 mongotop提供每个集合的水平的统计数据。默认情况下,mongotop返回值的间隔为一秒</span></p>
<p class="md-end-block md-p md-focus"><span class="md-plain">进入mongodb\bin执行mongotop命令,可以在后面指定间隔时间</span></p><br><br>
来源:https://www.cnblogs.com/yjh1995/p/14164223.html
頁:
[1]