ホームページ データベース mysql チュートリアル 部署MongoDB时需要注意的调参

部署MongoDB时需要注意的调参

Jun 07, 2016 pm 04:08 PM
mongodb データベース

Mongodb会输出大量的日志消息,但请不要使用 --quiet选项(该选项会隐藏部分日志信息)。保持日志级别为默认值通常不错,此时日志中

部署MongoDB的生产服务器,给出如下相关建议:

  • 使用虚拟化环境;
  • 系统配置
  •      1)推荐RAID配置

    RAID(Redundant Array of Independent Disk,独立磁盘冗余阵列)是一种可以让我们把多块磁盘当做单独一块磁盘来使用的技术。可使用它来提高磁盘的可靠性或者性能,或二者兼有。一组使用RAID技术的磁盘被称作RAID磁盘阵列。

    RAID根据性能的不同,存在着多种配置方式,通常兼顾了速度与容错性。下列是几种最常见的配置方式:

    推荐使用RAID10,它比RAID0更安全,也能解决RAID1的性能问题。在副本集的基础上,再使用RAID1有些浪费,从而可选择RAID0。

    不要用RAID5,它会非常非常慢。 

    2)虚拟化

    a)禁止内存过度分配

      内存过度分配(memory overcommitting)的设置值决定了当进程向操作系统请求过度内存是应采取的策略。基于这一设置,内核可能会为进程分配内存,哪怕那些内存当前是不可用的(期望的结果是,当进程用到这段内存时它已变为可用的)。这种内核向进程许诺不存在的内存的行为,就叫做内存过度分配。这一特性使得Mongodb无法很好的运作。

    vm.overcomit_memory的值可能为0(让内核来猜测过度分配的大小),可能为1(满足所有内存分配请求),可能为2(分配的虚拟地址空间最多不超过交换空间与一小部分过度分配的和)。将此值设为2所代表的意义最为复杂,同时也是最佳选择。运行以下命令将此值设为2:

    $ echo 2>/proc/sys/vm/overcommit_memory

    更改这一设置后,无需重启Mongodb. 

    在此目录下,/proc/sys/vm/overcommit_memory

    该文件指定了内核针对内存分配的策略,其值可以是0、1、2。

    0,   表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。

    1,   表示内核允许分配所有的物理内存,而不管当前的内存状态如何。

    2,   表示内核允许分配超过所有物理内存和交换空间总和的内存(参照overcommit_ratio)。

    缺省设置:0 

    3) 在查阅文档中,对Linux下proc里关于磁盘性能的参数有涉及,如下:

         mongodb的mmap不调用fsync强刷到磁盘,操作系统也是会帮我们自动刷到磁盘的,linux有个dirty_writeback_centisecs参数用于定义脏数据在内存停留的时间(默认为500,即5秒),过了这个timeout时间就会被系统刷到磁盘上。在这个自动刷的过程中是会阻塞所有的IO操作的,如果要刷的数据特别多的话,容易产生一些长耗时的操作,例如有些使用mmap的程序每隔一段时间就会出现有超时操作,一般的优化手段是考虑修改系统参数dirty_writeback_centisecs,加快脏页刷写频率来减少长耗时。mongodb是定时强刷,不会有此问题。 

    在此目录下,/proc/sys/vm/dirty_writeback_centisecs

    这个参数控制内核的脏数据刷新进程pdflush的运行间隔。单位是 1/100 秒。缺省数值是500,也就是 5 秒。如果你的系统是持续地写入动作,那么实际上还是降低这个数值比较好,这样可以把尖峰的写操作削平成多次写操作。设置方法如下:

    echo "100" > /proc/sys/vm/dirty_writeback_centisecs

    如果你的系统是短期地尖峰式的写操作,并且写入数据不大(几十M/次)且内存有比较多富裕,那么应该增大此数值:

    echo "1000" > /proc/sys/vm/dirty_writeback_centisecs 

        4)日志

        mongodb默认将日志发送至stdout(标准输出,通常为终端)。大多初始化脚本会使用–logpath选项,将日志发送至文件。如在同一台机器上有多个MongoDB实例(比如说一个mongod和一个mongos),注意保证各实例的日志分别存放在单独的文件中。确保知道的日志的存放位置,并拥有文件的读访问权限。

    Mongodb会输出大量的日志消息,但请不要使用 --quiet选项(该选项会隐藏部分日志信息)。保持日志级别为默认值通常不错,此时日志中有足够的信息进行基本调试(如耗时过长或者启动异常的原因等),但日志占用的空间并不大。调试应用某特定问题时,可使用一些选项从日志中获取更多信息。

       首先,在重启Mongodb时,可通过在参数中附加数目更多的“v”(即-v、-vv、-vvv、-vvvv或-vvvvv),或运行如下setParameter命令,完成日志级别(loglevel)的更改。

    >db.adminCommand({"setParameter":1,"logLevel":3});

    记得将日志级别重设为0,否则日志中会存在过多不必要的内容。可将日志级别调高至5,这时mongod会在日志中记录几乎所有的操作,包括每一个请求所处理的内容。由于mongod将所有内容都写入了日志文件,因此可产生大量的磁盘读写操作(IO),从而拖慢一个忙碌的系统。如需即时看到正在进行的所有操作,打开分析器不失为更好的方法:

       MongoDB默认记录耗时超过100毫秒的查询信息。如100毫秒不适用于应用,可通过setProfilingLevel 命令来更改此阈值:

    > // 只记录耗时超过500毫秒的查询操作

    > db.setProfilingLevel(1,500)

    {"was":0,"slowms":100,"ok":1}

    >db.setProfilingLevel(0)

    {"was":1,"slowms":500,"ok":1}

    上述第二条指令将关闭分析器,,但第一条指令中以毫秒为单位的值将继续作为所有数据库中日志记录的阈值而生效。也可以用-slowms 选项重启MongoDB来更改这一阈值。

    最后,设置一个计划任务以便每天或每周分割(rotate)日志文件。如使用–logpath 选项启动MongoDB,向进程发送一个SIGUSR1 信号即使其对日志进行分割。也可以使用logRotate命令以达到相同目的:

    >db.adminCommand({"logRotate":1})

    如不是通过 --logpath 选项启动的MongoDB,则不能对日志进行分割。 

    5) 关闭数据库文件的 atime

    禁止系统对文件的访问时间更新会有效提高文件读取的性能。这个可以通过在/etc/fstab 文件中增加 noatime 参数来实现。例如:

    /dev/xvdb /data ext4 noatime 0 0

    修改完文件后重新 mount就可以:

    # mount -o remount /data 

    6)禁止 NUMA

    在一个使用NUMA技术的多处理器Linux 系统上,你应该禁止NUMA的使用。MongoDB在NUMA环境下运行性能有时候会可能变慢,特别是在进程负载很高的情况下。

    ------------------------------------------分割线------------------------------------------

    CentOS 6 使用 yum 安装MongoDB及服务器端配置

    Ubuntu 13.04下安装MongoDB2.4.3

    MongoDB入门必读(概念与实战并重)

    Ubunu 14.04下MongoDB的安装指南

    《MongoDB 权威指南》(MongoDB: The Definitive Guide)英文文字版[PDF]

    Nagios监控MongoDB分片集群服务实战

    基于CentOS 6.5操作系统搭建MongoDB服务

    MongoDB 的详细介绍:请点这里
    MongoDB 的下载地址:请点这里

    本文永久更新链接地址:

    このウェブサイトの声明
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

    ホットAIツール

    Undresser.AI Undress

    Undresser.AI Undress

    リアルなヌード写真を作成する AI 搭載アプリ

    AI Clothes Remover

    AI Clothes Remover

    写真から衣服を削除するオンライン AI ツール。

    Undress AI Tool

    Undress AI Tool

    脱衣画像を無料で

    Clothoff.io

    Clothoff.io

    AI衣類リムーバー

    Video Face Swap

    Video Face Swap

    完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

    ホットツール

    メモ帳++7.3.1

    メモ帳++7.3.1

    使いやすく無料のコードエディター

    SublimeText3 中国語版

    SublimeText3 中国語版

    中国語版、とても使いやすい

    ゼンドスタジオ 13.0.1

    ゼンドスタジオ 13.0.1

    強力な PHP 統合開発環境

    ドリームウィーバー CS6

    ドリームウィーバー CS6

    ビジュアル Web 開発ツール

    SublimeText3 Mac版

    SublimeText3 Mac版

    神レベルのコード編集ソフト(SublimeText3)

    MySQL:簡単な学習のためのシンプルな概念 MySQL:簡単な学習のためのシンプルな概念 Apr 10, 2025 am 09:29 AM

    MySQLは、オープンソースのリレーショナルデータベース管理システムです。 1)データベースとテーブルの作成:createdatabaseおよびcreateTableコマンドを使用します。 2)基本操作:挿入、更新、削除、選択。 3)高度な操作:参加、サブクエリ、トランザクション処理。 4)デバッグスキル:構文、データ型、およびアクセス許可を確認します。 5)最適化の提案:インデックスを使用し、選択*を避け、トランザクションを使用します。

    MySQL:世界で最も人気のあるデータベースの紹介 MySQL:世界で最も人気のあるデータベースの紹介 Apr 12, 2025 am 12:18 AM

    MySQLはオープンソースのリレーショナルデータベース管理システムであり、主にデータを迅速かつ確実に保存および取得するために使用されます。その実用的な原則には、クライアントリクエスト、クエリ解像度、クエリの実行、返品結果が含まれます。使用法の例には、テーブルの作成、データの挿入とクエリ、および参加操作などの高度な機能が含まれます。一般的なエラーには、SQL構文、データ型、およびアクセス許可、および最適化の提案には、インデックスの使用、最適化されたクエリ、およびテーブルの分割が含まれます。

    なぜMySQLを使用するのですか?利点と利点 なぜMySQLを使用するのですか?利点と利点 Apr 12, 2025 am 12:17 AM

    MySQLは、そのパフォーマンス、信頼性、使いやすさ、コミュニティサポートに選択されています。 1.MYSQLは、複数のデータ型と高度なクエリ操作をサポートし、効率的なデータストレージおよび検索機能を提供します。 2.クライアントサーバーアーキテクチャと複数のストレージエンジンを採用して、トランザクションとクエリの最適化をサポートします。 3.使いやすく、さまざまなオペレーティングシステムとプログラミング言語をサポートしています。 4.強力なコミュニティサポートを提供し、豊富なリソースとソリューションを提供します。

    MongoDBデータベースパスワードを表示するNAVICATの方法 MongoDBデータベースパスワードを表示するNAVICATの方法 Apr 08, 2025 pm 09:39 PM

    Hash値として保存されているため、Navicatを介してMongoDBパスワードを直接表示することは不可能です。紛失したパスワードを取得する方法:1。パスワードのリセット。 2。構成ファイルを確認します(ハッシュ値が含まれる場合があります)。 3.コードを確認します(パスワードをハードコードできます)。

    MongoDBおよびリレーショナルデータベース:包括的な比較 MongoDBおよびリレーショナルデータベース:包括的な比較 Apr 08, 2025 pm 06:30 PM

    MongoDBおよびリレーショナルデータベース:詳細な比較この記事では、NOSQLデータベースMongoDBと従来のリレーショナルデータベース(MySQLやSQLServerなど)の違いを詳細に調べます。リレーショナルデータベースは、行と列のテーブル構造を使用してデータを整理しますが、MongoDBは柔軟なドキュメント指向モデルを使用して、最新のアプリケーションのニーズをより適切に適しています。主にデータ構造を区別します。リレーショナルデータベースは、事前定義されたスキーマテーブルを使用してデータを保存し、テーブル間の関係は一次キーと外部キーを通じて確立されます。 MongoDBはJSONのようなBSONドキュメントを使用してコレクションに保存します。各ドキュメント構造は、パターンのないデザインを実現するために独立して変更できます。アーキテクチャデザイン:リレーショナルデータベースは、事前に定義された固定スキーマが必要です。 Mongodbサポート

    Centos Mongodbバックアップ戦略とは何ですか? Centos Mongodbバックアップ戦略とは何ですか? Apr 14, 2025 pm 04:51 PM

    MongoDB効率的なバックアップ戦略の詳細な説明CENTOSシステムでは、この記事では、データセキュリティとビジネスの継続性を確保するために、CENTOSシステムにMongoDBバックアップを実装するためのさまざまな戦略を詳細に紹介します。 Dockerコンテナ環境でのマニュアルバックアップ、タイミング付きバックアップ、自動スクリプトバックアップ、バックアップメソッドをカバーし、バックアップファイル管理のベストプラクティスを提供します。マニュアルバックアップ:MongoDumpコマンドを使用して、マニュアルフルバックアップを実行します。たとえば、Mongodump-Hlocalhost:27017-U Username-P Password-Dデータベース名-O/バックアップディレクトリこのコマンドは、指定されたデータベースのデータとメタデータを指定されたバックアップディレクトリにエクスポートします。

    作曲家を使用して、推奨システムのジレンマを解決する:Andres-Montanez/推奨 作曲家を使用して、推奨システムのジレンマを解決する:Andres-Montanez/推奨 Apr 18, 2025 am 11:48 AM

    eコマースのWebサイトを開発するとき、私は困難な問題に遭遇しました。ユーザーにパーソナライズされた製品の推奨事項を提供する方法です。当初、私はいくつかの簡単な推奨アルゴリズムを試しましたが、結果は理想的ではなく、ユーザーの満足度も影響を受けました。推奨システムの精度と効率を改善するために、より専門的なソリューションを採用することにしました。最後に、Andres-Montanez/Adcumentations Bundleを介してAndres-Montanez/Bundleをインストールしました。これは、問題を解決しただけでなく、推奨システムのパフォーマンスを大幅に改善しました。次の住所から作曲家を学ぶことができます。

    Debian Mongodbでデータを暗号化する方法 Debian Mongodbでデータを暗号化する方法 Apr 12, 2025 pm 08:03 PM

    DebianシステムでMongoDBデータベースを暗号化するには、次の手順に従う必要があります。ステップ1:MongoDBのインストール最初に、DebianシステムがMongoDBをインストールしていることを確認してください。そうでない場合は、インストールについては公式のMongoDBドキュメントを参照してください:https://docs.mongodb.com/manual/tutorial/install-mongodb-onedbian/-step 2:暗号化キーファイルを作成し、暗号化キーを含むファイルを作成し、正しい許可を設定します。

    See all articles