ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
#### 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的启动状态:** >[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 (service)** [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”可防止单个用户使用过多的系统资源。有时,这些限制的默认值较低,在正常的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 7 | 4096 |/etc/security/limits.d/20-nproc.conf| |RHEL / CentOS 6 | 1024|/etc/security/limits.d/90-nproc.conf | **修改ulimit两种方法** ``` 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=disabled ### 服务器时区:我们要配置时间服务保证服务器时间是一致的。 ### 4、Mongodb 启动和停止服务 mongodb 启动: 推荐第二种方式 1、mongod --port 12345 --dbpath /srv/mongodb/ 2、mongod -f /data/mongodb/conf/mongodb.conf >停止mongod进程可以采用 1、kill -2 (mongod process ID) 2、kill (mongod process ID) 3、mongod --shutdown 4、db.shutdownServer() 前两种方式就不介绍了: 3、 --shutdown ``` [root@10-1-1-159 ~]# sudo -u mongod /data/mongodb-4.2.2/bin/mongod -f /data/mongodb/conf/mongodb.conf --shutdown killing process with pid: 28761 ``` 4、db.shutdownServer() ``` [root@10-1-1-159 ~]# sudo -u mongod /data/mongodb-4.2.2/bin/mongo 10.1.1.159:27010 rs02:SECONDARY> db.getMongo().setSlaveOk() rs02:SECONDARY> use admin switched to db admin rs02:SECONDARY> db.shutdownServer() 2020-03-20T14:37:28.602+0800 E QUERY [js] Error: shutdownServer failed: { "operationTime" : Timestamp(1584686240, 1), "ok" : 0, "errmsg" : "shutdown must run from localhost when running db without auth", "code" : 13, "codeName" : "Unauthorized", "$clusterTime" : { "clusterTime" : Timestamp(1584686240, 1), "signature" : { "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="), "keyId" : NumberLong(0) } } } : _getErrorWithCode@src/mongo/shell/utils.js:25:13 DB.prototype.shutdownServer@src/mongo/shell/db.js:426:19 @(shell):1:1 rs02:SECONDARY> ``` 需要使用localhost连接mongo实例,在配置文件启动时候添加: >bindIp: 10.1.1.159,localhost ``` [root@10-1-1-159 ~]# sudo -u mongod /data/mongodb-4.2.2/bin/mongo localhost:27020 > use admin switched to db admin > db.shutdownServer() 2020-03-20T14:47:49.186+0800 I NETWORK [js] DBClientConnection failed to receive message from localhost:27020 - HostUnreachable: Connection closed by peer server should be down... ``` 切勿使用kill -9(即SIGKILL)终止mongod实例。