Mongodb安装必读之系统优化

Mongodb发行了两个可用的服务版本:社区版和企业版

我们所使用的的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 Linux AMI系统上安装MongoDB Community Edition。

MongoDB不支持Linux的Windows子系统(WSL)。

2、Mac OS平台支持
MongoDB 4.2 Community Edition支持macOS 10.12或更高版本。

3、Windos平台支持
MongoDB 4.2 Community Edition在x86_64架构上支持Windows的以下64位版本:

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位版本。

Centos 系统安装Mongodb 前系统优化

1、系统禁止THP
2、设置系统 ulimit
3、关闭iptables和SElinux

1、为什么要禁止THP

自[CentOS]6版本开始引入了Transparent Huge Pages(THP),从CentOS7版本开始,该特性默认就会启用。尽管THP的本意是为提升内存的性能,不过某些数据库厂商还是建议直接关闭THP(比如说[Oracle]、MariaDB、MongoDB等),透明的Huge Pages可能会在运行时引起内存分配延迟,透明的大页(THP)是一种Linux内存管理系统,它可以减少机器上的后备缓冲区(TLB)查找的开销。

查看THP的启动状态:

[ ~]# cat /sys/kernel/mm/transparent_hugepage/enabled
[always] madvise never
[ ~]# cat /sys/kernel/mm/transparent_hugepage/defrag
[always] madvise never

运行以下命令即时禁用THP

[ ~]# echo never > /sys/kernel/mm/transparent_hugepage/enabled
[ ~]# echo never > /sys/kernel/mm/transparent_hugepage/defrag
[ ~]# cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]
[ ~]# cat /sys/kernel/mm/transparent_hugepage/defrag
always madvise [never]
但是系统重启一会就不生效了。

使用服务来控制THP

两重方式都可以
systemd (systemctl)

[ ~]# 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

[ ~]# systemctl daemon-reload
[ ~]# systemctl enable disable-transparent-huge-pages
[ ~]# systemctl start disable-transparent-huge-pages

System V Init (service)
[ ~]# /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

[ ~]# chmod 755 /etc/init.d/disable-transparent-hugepages
[ ~]# chkconfig --add disable-transparent-hugepages
[ ~]# /etc/init.d/disable-transparent-hugepages start

2、UNIX ulimit 设置

大多数类似UNIX的操作系统(包括Linux和macOS)都提供了一种方法来限制和控制基于进程和用户的系统资源(例如线程,文件和网络连接)的使用。这些“ ulimit”可防止单个用户使用过多的系统资源。有时,这些限制的默认值较低,在正常的MongoDB操作过程中可能会导致许多问题。
mongod并且mongos每次使用线程和文件描述符跟踪连接并管理内部操作。本节概述了MongoDB的常规资源利用模式。将这些数字与有关您的部署及其使用的实际信息结合使用,以确定理想的ulimit设置。

通常,所有mongod和mongos实例:

  • 使用文件描述符和线程跟踪每个传入的连接。
  • 跟踪每个内部线程或pthread作为系统进程

ulimit指的是针对每个用户的各种资源限制。因此,如果您的[mongod]实例是以同时运行多个进程或多个[mongod]进程的用户身份执行的,则可能会看到这些资源的争用。另外,请注意,processes值(即-u)是指不同进程和子进程线程的组合数量。

您可以ulimit通过发出以下格式的命令来更改设置:

ulimit -n <值>

硬和软的ulimit设置会影响到Mongodb的性能,硬ulimit是指用户可以激活的最大进程数,

红帽企业Linux和CentOS 6和7强制执行一个单独的最大进程限制nproc,该限制将覆盖ulimit设置。该值在以下配置文件中定义,具体取决于版本:
系统版本文件
RHEL / CentOS 74096/etc/security/limits.d/20-nproc.conf
RHEL / CentOS 61024/etc/security/limits.d/90-nproc.conf

修改ulimit两种方法

1、添加配置信息:

[ ~]# vim /etc/security/limits.d/20-nproc.conf

*          soft    nproc     64000
*          soft    nofile     64000

重启mongodb服务

2、添加配置

[ ~]#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=disabled

服务器时区:我们要配置时间服务保证服务器时间是一致的。

相关推荐