欢迎光临
我们一直在努力

华为开发者空间:鲲鹏服务器 MongoDB RPM 部署与调优

1 概述

1.1 背景介绍

MongoDB是一个基于分布式文件存储的数据库。由C++语言编写,旨在为Web应用提供可扩展的高性能数据存储解决方案。MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。 性能调优是一个涉及多个层面的复杂过程,从硬件和操作系统的选择到子系统的设计和算法选择,都需要仔细考虑。在调优过程中,必须遵循一定的原则以确保得到正确的结果。通过本实验,用户可以快速掌握鲲鹏服务器中MongoDB的安装与使用,并对其性能调优有清晰认识。

1.2 适用对象

  • 企业
  • 个人开发者
  • 高校学生

1.3 案例时间

本案例总时长预计60分钟。

1.4 案例流程

1.4.png 说明: ① 自动部署并连接鲲鹏服务器; ② 配置安装环境; ③ 安装MongoDB; ④ 调优指南。

1.5 资源概览

本案例花费总计0元。

资源名称规格单价(元)时长(h)
云主机 2vCPUs 4GB 免费 1

最新案例动态,请查阅 《鲲鹏BoostKit之MongoDB安装与调优指南》。小伙伴快来领取华为开发者空间进行实操吧!

2 操作步骤

2.1 自动部署鲲鹏服务器

本案例中,使用云主机提供的鲲鹏沙箱资源,只需要执行简单的自动部署命令即可拉起一台免费的鲲鹏服务器。

  • 在云主机桌面右键选择“Open Terminal Here”,打开终端命令窗口。
  • 输入自动部署命令,命令如下:
  • hcd deploy –password abcd1234@ –time 3600

    命令的参数说明:

    • password:password关键字后设置的是鲲鹏服务器的root用户密码,命令中给出的默认为abcd1234@,开发者可以替换成自定义密码(至少8个字符)。
    • time:time关键字后面设置的为鲲鹏服务器的可用时间,单位为秒,至少600秒。当前实验预估需要1小时,在命令中申请的时间为60分钟,即3600秒。
  • 记录下自动部署后生成的弹性公网IP地址。 2.1.png
  • 2.2 配置安装环境

    使用命令登录到鲲鹏服务器,命令如下:

    ssh root@鲲鹏云服务器弹性公网IP

    2.2-1.png 停止防火墙。

    systemctl stop firewalld.service

    关闭防火墙。

    systemctl disable firewalld.service

    查看防火墙状态。

    systemctl status firewalld.service

    2.2-11.png 创建数据目录以存储MongoDB的数据文件。执行如下命令创建数据目录。

    mkdir /data
    mkdir -p /data/mongo

    配置外网Yum源:查看Yum源,可以看到存在外网Yum源(存在后缀为.repo的文件)。

    ls /etc/yum.repos.d/

    使Yum源生效。

    yum clean all
    yum makecache
    yum list

    配置本地Yum源:下载OS镜像文件。(备用下载地址:https://mirrors.huaweicloud.com/centos-vault/altarch/7.6.1810/isos/aarch64/CentOS-7-aarch64-Everything-1810.iso)

    wget https://dtse-mirrors.obs.cn-north-4.myhuaweicloud.com/case/0013/CentOS-7-aarch64-Everything-1810.iso

    挂载OS镜像文件,编辑文件。

    mount /root/CentOS-7-aarch64-Everything-1810.iso /mnt
    vim /etc/fstab

    按“i”进入编辑模式,在文件末尾添加如下信息。输入完成后按“Esc”键,输入 “:wq”,按“Enter”保存并退出编辑。

    /root/CentOS-7-aarch64-Everything-1810.iso /mnt iso9660 loop 0 0

    备份Yum源。

    cd /etc/yum.repos.d
    mkdir bak
    mv *.repo bak

    配置本地Yum源。

    cd /etc/yum.repos.d
    vim local.repo

    按“i”进入编辑模式,在文件末尾添加如下信息。输入完成后按“Esc”键,输入 “:wq”,按“Enter”保存并退出编辑。

    [local]
    name=local.repo
    baseurl=file:///mnt
    enabled=1
    gpgcheck=0

    查看local.repo文件。

    cat local.repo

    2.2-2.png 使Yum源生效。

    yum clean all
    yum makecache
    yum list

    2.3 安装MongoDB

    本文以MongoDB 4.0.12版本为例通过RPM包安装MongoDB和MongoDB Tools的操作步骤。 安装依赖包。

    cd ~
    yum -y install python2 python2-setuptools python2-devel net-tools

    切换到“/root”目录下,分别下载MongoDB和MongoDB Tools的RPM包。

    cd /root
    wget https://mirrors.huaweicloud.com/kunpeng/yum/el/7/aarch64/Packages/database/mongo-4.0.12-1.el7.aarch64.rpm –no-check-certificate
    wget https://mirrors.huaweicloud.com/kunpeng/yum/el/7/aarch64/Packages/database/mongodb-tools-4.0.6-1.aarch64.rpm –no-check-certificate

    安装MongoDB和MongoDB Tools的RPM包。

    rpm -ivh mongo-4.0.12-1.el7.aarch64.rpm
    rpm -ivh mongodb-tools-4.0.6-1.aarch64.rpm

    查看安装后的MongoDB和MongoDB Tools的RPM包和路径。

    rpm -qa | grep mongo-4.0.12
    rpm -qa | grep mongodb-tools-4.0.6-1
    ll /usr/local/mongo/bin/
    ll /usr/local/mongodb-tools/bin/

    2.3-1.png 查看MongoDB版本。

    cd ~
    find / -name mongod
    /usr/local/mongo/bin/mongod –version

    修改MongoDB的配置文件,删除并新建“/etc/mongodb.cnf”文件。

    rm -f /etc/mongodb.cnf
    vim /etc/mongodb.cnf

    按“i“进入编辑模式,添加如下内容,添加完成后按“Esc”键,输入“:wq”,按“Enter”保存并退出编辑。

    dbpath=/data/mongo
    logpath=/data/mongo/mongo.log
    logappend=true
    port=27017
    fork=true
    auth=false
    bind_ip=0.0.0.0

    配置文件参数说明:

    • dbpath代表数据文件存放目录。
    • logpath代表日志文件存放目录。
    • logappend=true代表日志以追加的形式添加。
    • port代表端口号。
    • fork=true代表以守护程序的方式启用,即在后台运行。
    • auth=false代表连接数据库不需要验证用户名和密码。
    • bind_ip代表可以访问的地址。127.0.0.1表示自己访问,0.0.0.0 表示所有人都能访问。

    启动MongoDB数据库,使用配置文件启动MongoDB数据库。

    nohup /usr/local/mongo/bin/mongod -f /etc/mongodb.cnf &

    确认MongoDB数据库进程是否正常启动,可以看到数据库进程ID为2995且已正常启动。

    ps -ef | grep mongod

    查看MongoDB数据库的监测端口,在本例中MongoDB数据库的监测端口为27017。

    netstat -anpt

    2.3-2.png 登录MongoDB数据库并验证数据库是否可以正常运行。

    cd /usr/local/mongo/bin
    ./mongo

    查看当前存在的数据库,并输入“exit“退出。

    show dbs

    2.3-3.png 验证MongoDB Tools中的命令是否正常,进入MongoDB Tools的bin目录。

    cd /usr/local/mongodb-tools/bin/

    验证MongoDB Tools命令是否正常。本文以mongorestore和mongoreplay为例进行说明。

    ./mongorestore –version
    ./mongorestore –help
    ./mongoreplay –version
    ./mongoreplay –help

    2.3-4.png

    2.4 调优指南

    2.4.1 缓存参数调优

    编辑文件,按“i“进入编辑模式,将“vm.swappiness = 0“ 修改为“vm.swappiness = 1“,修改完成后按“Esc”键,输入“:wq”,按“Enter”保存并退出编辑。

    vim /etc/sysctl.conf

    原理:vm.swappiness值越大,越积极使用交换分区;值越小,越积极使用内存,将值设置为“1”,以减少交换分区的使用。 2.4-1.png 执行如下命令使修改生效。

    sysctl -p

    将dirty_ratio参数设置为“5“,表示内存里的脏数据百分比不能超过这个值。

    echo 5 > /proc/sys/vm/dirty_ratio

    2.4.2 数据库参数调优

    通过调整数据库的配置参数,可以有效提升数据库的性能和可靠性(根据实际需求设计即可)。 请参见下表修改数据库的配置文件。配置文件默认为“/etc/mongodb.cnf”,修改配置文件后需重启数据库生效。

    参数说明建议
    acheSizeGB cacheSizeGB参数控制WiredTiger引擎使用内存上限。 如果一台机器只部署一个MongoDB,建议设置成内存的60%。
    Oplog Oplog用于MongoDB的复制。 建议大小设置为可用disk空间的5%。
    commitIntevalMs 控制MongoDB的journal日志刷新。 建议使用默认值,值越大,性能越好,但数据丢失可能性更大。
    syncPeriodSecs 控制flush到磁盘的时间间隔。 建议使用默认值,值越大,性能越好,但影响数据库可靠性。
    noprealloc 是否启用数据文件预分配。 建议设置为true。
    noscripting 是否启用脚本引擎。 建议设置为true。
    notablescan 是否允许表扫描。 建议设置为true。
    2.4.3 客户端优化

    编辑文件。

    vim /etc/sysctl.conf

    按“i”进入编辑模式,在末尾追加以下内容。

    net.ipv4.ip_local_port_range = 1024 65535
    net.ipv4.tcp_tw_reuse = 1
    net.core.somaxconn = 65535
    net.core.netdev_max_backlog = 8096
    net.ipv4.tcp_max_syn_backlog = 8192
    net.ipv4.tcp_keepalive_time = 600
    net.ipv4.tcp_fin_timeout = 30
    net.ipv4.tcp_max_tw_buckets = 3000

    2.4-2.png 参数说明:

    参数说明
    net.ipv4.tcp_tw_reuse 允许将TIME-WAIT sockets重新用于新的TCP连接 0:关闭(default)1:开启
    net.ipv4.ip_local_port_range 用于向外连接的端口范围
    net.core.somaxconn 定义了系统中每一个端口最大的监测队列的长度,这是个全局的参数,默认值为128
    net.core.netdev_max_backlog 每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目
    net.ipv4.tcp_max_syn_backlog 表示那些尚未收到客户端确认信息的连接(SYN消息)队列的长度,默认为1024,加大队列长度为262144,可以容纳更多等待连接的网络连接数
    net.ipv4.tcp_keepalive_time 表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间,默认为2小时
    net.ipv4.tcp_fin_timeout 表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭
    net.ipv4.tcp_max_tw_buckets 表示系统同时保持TIME_WAIT sockets的最大数量,默认为180000

    追加完成后按“Esc”键,输入“:wq”,按“Enter”保存并退出编辑。执行以下使修改结果立即生效。

    sysctl -p

    至此,鲲鹏BoostKit之MongoDB安装与调优全部完成。

    赞(0)
    未经允许不得转载:171主机测评 » 华为开发者空间:鲲鹏服务器 MongoDB RPM 部署与调优
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址