Mongodbは2つの利用可能なサービスバージョンをリリースしました:Community EditionとEnterprise Edition
私たちが使用するMongodbは、コミュニティバージョンで
公式に推奨されています。
最高のインストールエクスペリエンスを実現するために、MongoDBは人気のあるLinuxディストリビューションに適したパッケージを提供しています。これらのパッケージは、MongoDBを実行するための推奨される方法です。
1. Linuxプラットフォームのサポート
Red Hatにインストール
Red Hat Enterpriseおよび関連するLinuxシステムでのMongoDB Community Editionのインストールをサポートします。
Ubuntuにインストール
Ubuntu LinuxシステムへのMongoDB Community Editionのインストールをサポートします。
Debianにインストール
DebianシステムへのMongoDB Community Editionのインストールのサポート。
SUSEにインストール
SUSE LinuxシステムへのMongoDB Community Editionのインストールをサポートします。
Amazonにインストール
Amazon Linux AMIシステムへのMongoDB Community Editionのインストールをサポートします。
MongoDBは、LinuxのWindowsサブシステム(WSL)をサポートしていません。
2. Mac OSプラットフォームは、
MongoDB 4.2 Community Editionをサポートし、macOS 10.12以降をサポートします。
3. Windosプラットフォームは
、x86_64アーキテクチャでMongoDB 4.2 Community Editionをサポートし、次の64ビットバージョンのWindowsをサポートします。
Windows Server 2019
Windows 10 / Windows Server 2016
Windows 8.1 / Windows Server 2012 R2
Windows 8 / Windows Server 2012
Windows 7 / Windows Server 2008 R2
MongoDBは、これらのプラットフォームの64ビットバージョンのみをサポートしています。
Mongodbをインストールする前のCentosシステムの最適化
1.システムがTHPを禁止している
2. システムをセットアップするulimit
3. iptablesとSElinuxをオフにする
1. THPを禁止すべき理由
[CentOS] 6バージョン以降、Transparent Huge Pages(THP)が導入されました。この機能は、CentOS 7バージョン以降、デフォルトで有効になります。THPはもともとメモリのパフォーマンスを向上させることを目的としていましたが、一部のデータベースベンダーはTHPを直接オフにすることを推奨しています([Oracle]、MariaDB、MongoDBなど)。透過的な巨大なページは、実行時にメモリ割り当ての遅延を引き起こす可能性があります。 Huge page(THP)は、マシン上のバックバッファー(TLB)のルックアップのオーバーヘッドを削減できるLinuxメモリ管理システムです。
THPの起動ステータスを表示します。
[root @
master〜]#cat / sys / kernel / mm / transparent_hugepage / enabled [always] madvise never
[root @ master〜]#cat / sys / kernel / mm / transparent_hugepage / defrag
[always] madvise never
次のコマンドを実行してTHPを即座に無効にします
[root @ master〜]#echo never> / sys / kernel / mm / transparent_hugepage / enabled
[root @ master〜]#echo never> / sys / kernel / mm / transparent_hugepage / defrag
[root @ master〜] #cat / sys / kernel / mm / transparent_hugepage / enabled
always madvise [never]
[root @ master〜
]
#cat / sys / kernel / mm / transparent_hugepage / defrag always madvise [never] しかし是システム统重启一会就不生效了。
サービスを使用してTHPを制御する
両方の方法をsystemdにすることができます
(systemctl)
[root @ master〜]#cat /etc/systemd/system/disable-transparent-huge-pages.service
[Unit]
Description=Disable Transparent Huge Pages (THP)
DefaultDependencies=no
After=sysinit.target local-fs.target
Before=mongod.service
[Service]
Type=oneshot
ExecStart=/bin/sh -c 'echo never | tee /sys/kernel/mm/transparent_hugepage/enabled > /dev/null'
ExecStart=/bin/sh -c 'echo never | tee /sys/kernel/mm/transparent_hugepage/defrag > /dev/null'
[Install]
WantedBy=basic.target
[root @ master〜]#systemctl daemon-reload
[root @ master〜]#systemctl enable disable-transparent-huge-pages
[root @ master〜]#systemctl start disable-transparent-huge-pages
System V Init(サービス)
[root @ master〜]#/etc/init.d/disable-transparent-hugepages
#!/bin/bash
### BEGIN INIT INFO
# Provides: disable-transparent-hugepages
# Required-Start: $local_fs
# Required-Stop:
# X-Start-Before: mongod mongodb-mms-automation-agent
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Disable Linux transparent huge pages
# Description: Disable Linux transparent huge pages, to improve
# database performance.
### END INIT INFO
case $1 in
start)
if [ -d /sys/kernel/mm/transparent_hugepage ]; then
thp_path=/sys/kernel/mm/transparent_hugepage
elif [ -d /sys/kernel/mm/redhat_transparent_hugepage ]; then
thp_path=/sys/kernel/mm/redhat_transparent_hugepage
else
return 0
fi
echo 'never' | tee ${thp_path}/enabled > /dev/null
unset thp_path
;;
esac
[root @ master〜]#chmod 755 /etc/init.d/disable-transparent-hugepages
[root @ master〜]#chkconfig --add disable-transparent-hugepages
[root @ master〜]#/etc/init.d / disable-transparent-hugepages start
2. UNIX ulimit設定
ほとんどのUNIXライクなオペレーティングシステム(LinuxおよびmacOSを含む)は、プロセスとユーザーに基づいてシステムリソース(スレッド、ファイル、ネットワーク接続など)の使用を制限および制御する方法を提供します。これらの「ulimit」により、1人のユーザーがシステムリソースを使いすぎないようにすることができます。これらの制限のデフォルト値が低い場合があり、通常のMongoDB操作中に多くの問題を引き起こす可能性があります。
mongodとmongosは、スレッドとファイル記述子を使用して、接続を追跡し、内部操作を毎回管理します。このセクションでは、MongoDBの一般的なリソース利用モデルの概要を説明します。これらの数値を実際のデプロイメントに関する情報と組み合わせて使用し、理想的なulimit設定を決定します。
一般に、すべてのmongodおよびmongosインスタンス:
- ファイル記述子とスレッドを使用して、各着信接続を追跡します。
- 各内部スレッドまたはpthreadをシステムプロセスとして追跡する
ulimit
各ユーザーのさまざまなリソース制限を参照します。したがって、[ mongod
]インスタンスが複数のプロセスまたは複数の[ mongod
]プロセスを同時に実行しているユーザーとして実行された場合、これらのリソースの競合が発生する可能性があります。また、processes
値(つまり-u
)は、異なるプロセスとサブプロセスのスレッドの合計数を指すことに注意してください。
ulimit
次の形式でコマンドを発行することにより、設定を変更できます。
ulimit -n <値>
ハードおよびソフトのulimit設定はMongodbのパフォーマンスに影響します。ハードulimitは、ユーザーがアクティブ化できるプロセスの最大数を指します。
Red Hat Enterprise LinuxとCentOS 6および7では、単一の最大プロセス制限nproc が適用され、ulimit 設定が上書きされます。この値は、バージョンに応じて、次の構成ファイルで定義されます。 |
システムバージョン | 価値 | ファイル |
---|---|---|---|
RHEL / CentOS 7 | 4096 | /etc/security/limits.d/20-nproc.conf | |
RHEL / CentOS 6 | 1024 | /etc/security/limits.d/90-nproc.conf |
ulimitを変更する2つの方法
1、添加配置信息:
[root@master ~]# vim /etc/security/limits.d/20-nproc.conf
* soft nproc 64000
* soft nofile 64000
mongodbサービスを再起動します。
2、添加配置
[root@master ~]#vim /etc/security/limits.conf
mongod soft nofile 64000
mongod hard nofile 64000
mongod soft nproc 32000
mongod hard nproc 32000
mongodbサービスを再起動します。
3. iptablesとSElinuxを閉じる
systemctl status firewalld.service
systemctl stop firewalld.service
systemctl disable firewalld.service
構成ファイル:/ etc / selinux / config
パラメータを次のように設定します:SELINUX =無効