QQ截图20241220084910.png

一、环境说明

1、centos7.8 x86_64位最小化安装系统 2、二进制包安装mongodb7.0.15 3、关闭服务器selinux 4、关闭服务器系统透明大叶(mongodb安装内存优化要求) 5、采用二进制包方式安装mongodb7.0.15

二、mongodb安装部署过程

2.1、下载软件包

wget  https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-7.0.15.tgz
wget  https://repo.mongodb.org/yum/redhat/7/mongodb-org/7.0/x86_64/RPMS/mongodb-org-server-7.0.15-1.el7.x86_64.rpm
wget  https://repo.mongodb.org/yum/redhat/7/mongodb-org/7.0/x86_64/RPMS/mongodb-org-mongos-7.0.15-1.el7.x86_64.rpm
wget https://downloads.mongodb.com/compass/mongosh-2.0.1-linux-x64.tgz 
wget https://downloads.mongodb.com/compass/mongosh-2.3.4-linux-x64.tgz

2.2、安装指令及软件包说明

mongodb-org-server:  服务端,包含mongod启动命令和mongos配置分配命令
mongodb-org-mongos: 配置分片用
mongosh-2.0.1-linux-x64.tgz:mongo shell客户端命令

tar xf /root/mongodb-linux-x86_64-rhel70-7.0.15.tgz -C /usr/local/
ln -sv /usr/local/mongodb-linux-x86_64-rhel70-7.0.15 /usr/local/mongodb
rpm -ivh mongodb-org-mongos-7.0.15-1.el7.x86_64.rpm 
rpm -ivh mongodb-org-server-7.0.15-1.el7.x86_64.rpm
tar xf mongosh-2.0.1-linux-x64.tgz -C /usr/local/
cp /usr/local/mongosh-2.0.1-linux-x64/bin/mongosh /usr/local/sbin/mongosh

2.3、创建相关数据存放目录

id mongod
mkdir /data/mongodb/{data,logs,tmp,key} -p
cd /data/
chown -R mongod.mongod mongodb 
mkdir /usr/local/mongodb/etc -p

2.4、创建密钥认证

openssl rand -base64 232  > /data/mongodb/key/mongo-keyfile
chmod 400  /data/mongodb/key/mongo-keyfile
chown mongod:mongod /data/mongodb/key/mongo-keyfile

2.5、mongod.conf 配置文件参数

cat > /usr/local/mongodb/etc/mongod.conf <<EOF 
systemLog:
  traceAllExceptions: true
  destination: file
  logAppend: true
  logRotate: rename
  timeStampFormat: iso8601-local
  path: /data/mongodb/logs/mongod.log
  component:
     accessControl:
        verbosity: 1
     command:
        verbosity: 1
storage:
  dbPath: /data/mongodb/data
  directoryPerDB: true
  
  syncPeriodSecs: 60
  engine: wiredTiger
  wiredTiger:
    engineConfig:
      cacheSizeGB: 3
      directoryForIndexes: true
      journalCompressor: zlib
      zstdCompressionLevel: 10
operationProfiling:
  slowOpThresholdMs: 100

processManagement:
  fork: true  ## fork and run in background
  pidFilePath: /data/mongodb/tmp/mongod.pid 
  timeZoneInfo: /usr/share/zoneinfo

net:
  port: 27017
  bindIp: 10.0.0.8,localhost,master-db02  # Enter 0.0.0.0,:: to bind
  maxIncomingConnections: 5000
  unixDomainSocket:
   enabled: true
   pathPrefix: /data/mongodb/tmp
  listenBacklog: 4096

#sharding:  配置分片参数 
#  clusterRole: configsvr

#replication: 配置副本集参数 
#  replSetName: repset
#  oplogSizeMB: 10240

#security:  开启安全登陆密码认证和密钥认证
#    keyFile: /data/mongodb/key/mongo-keyfile
#    authorization: enabled
	
EOF	

2.6、mongodb启动配置文件

cat > /usr/lib/systemd/system/mongod.service <<EOF 

[Unit]
Description=MongoDB Database Server
Documentation=https://docs.mongodb.org/manual
After=network-online.target
Wants=network-online.target

[Service]
User=mongod
Group=mongod
Environment="OPTIONS=-f /usr/local/mongodb/etc/mongod.conf"
Environment="MONGODB_CONFIG_OVERRIDE_NOFORK=1"
EnvironmentFile=-/etc/sysconfig/mongod
ExecStart=/usr/local/mongodb/bin/mongod --config /usr/local/mongodb/etc/mongod.conf
PermissionsStartOnly=true
PIDFile=/data/mongodb/tmp/mongod.pid
RuntimeDirectory=mongodb
#Type=forking
# file size
LimitFSIZE=infinity
# cpu time
LimitCPU=infinity
# virtual memory size
LimitAS=infinity
# open files
LimitNOFILE=64000
# processes/threads
LimitNPROC=64000
# locked memory
LimitMEMLOCK=infinity
# total threads (user+kernel)
TasksMax=infinity
TasksAccounting=false
# Recommended limits for mongod as specified in
# https://docs.mongodb.com/manual/reference/ulimit/#recommended-ulimit-settings

[Install]
WantedBy=multi-user.target

EOF	

2.7、启动mongodb-server服务

systemctl daemon-reload 
systemctl enable mongod 
systemctl start mongod 
systemctl status mongod

微信图片_20241220083520.png

2.8、mongosh登陆

微信图片_20241220083649.png

提示要关闭透明大页

三、关闭透明大叶

3.1、临时关闭透明大叶

echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag

3.2、永久关闭透明大页

要永久禁用透明大页,需要修改/etc/default/grub文件。在GRUB_CMDLINE_LINUX参数中后面增加如下内容:

transparent_hugepage=never
[root@master-db02 ~]# cat  /etc/default/grub                                   
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto rhgb quiet transparent_hugepage=never"
GRUB_DISABLE_RECOVERY="true"

完成后,更新GRUB配置文件并重启系统:

# grub2-mkconfig -o /boot/grub2/grub.cfg
# reboot

[root@master-db03 ~]# grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-3.10.0-1127.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-1127.el7.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-1201807ccfc740b4bd230c987f47e586
Found initrd image: /boot/initramfs-0-rescue-1201807ccfc740b4bd230c987f47e586.img
done
[root@master-db03 ~]# reboot

系统重启后,再次执行以下命令以确认透明大页被禁用:

cat /sys/kernel/mm/transparent_hugepage/enabled 输出为always madvise [never]即可确认关闭成功。 此时登陆mongodb 不再提示关闭透明大叶

[root@master-db03 ~]# mongosh mongodb://127.0.0.1:27017
Current Mongosh Log ID: 6765690916c15886a24c0e6f
Connecting to:          mongodb://127.0.0.1:27017/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+2.0.1
Using MongoDB:          7.0.15
Using Mongosh:          2.0.1
mongosh 2.3.7 is available for download: https://www.mongodb.com/try/download/shell

For mongosh info see: https://docs.mongodb.com/mongodb-shell/

------
   The server generated these startup warnings when booting
   2024-12-20T20:53:41.370+08:00: The configured WiredTiger cache size is more than 80% of available RAM. See http://dochub.mongodb.org/core/faq-memory-diagnostics-wt
   2024-12-20T20:53:44.288+08:00: Access control is not enabled for the database. Read and write access to data and configuration is unrestricted
------

test> 

关于透明大叶的介绍: https://www.henghost.com/news/article/188999/?rdmc=692e23eaea&rdme=1734516890 https://www.modb.pro/db/1789819758162022400 https://mp.weixin.qq.com/s/Z5ktp3uZdkE9WfOi28bfow

四、创建管理员账户和密码

use admin 
db.createUser({user: 'root', pwd:'TShLQd3tr74', roles:[{role: 'root', db: 'admin'}]});
show users;


test> use admin
switched to db admin
admin> db.createUser({user: 'root', pwd:'TShLQd3tr74', roles:[{role: 'root', db: 'admin'}]});
{ ok: 1 }
admin> show users
[
  {
    _id: 'admin.root',
    userId: new UUID("903a8a74-fb4f-4a12-b4de-27b319fd6d09"),
    user: 'root',
    db: 'admin',
    roles: [ { role: 'root', db: 'admin' } ],
    mechanisms: [ 'SCRAM-SHA-1', 'SCRAM-SHA-256' ]
  }
]
admin> show users;
[
  {
    _id: 'admin.root',
    userId: new UUID("903a8a74-fb4f-4a12-b4de-27b319fd6d09"),
    user: 'root',
    db: 'admin',
    roles: [ { role: 'root', db: 'admin' } ],
    mechanisms: [ 'SCRAM-SHA-1', 'SCRAM-SHA-256' ]
  }
]

五、开启认证登陆

5.1、修改配置文件开启参数并重启mongo服务

[root@master-db03 ~]# tail -3 /usr/local/mongodb/etc/mongod.conf 
security:
    #keyFile: /data/mongodb/key/mongo-keyfile
    authorization: enabled

重启mongo服务 
systemctl restart mongod

5.2、密码方式登陆

mongosh mongodb://127.0.0.1:27017/admin -u root -p 'TShLQd3tr74'
mongosh mongodb://127.0.0.1:27017/admin -u root -p 'TShLQd3tr74' --quiet 

[root@master-db03 ~]# mongosh mongodb://127.0.0.1:27017/admin -u root -p 'TShLQd3tr74' --quiet 
admin> show users;
[
  {
    _id: 'admin.root',
    userId: new UUID("903a8a74-fb4f-4a12-b4de-27b319fd6d09"),
    user: 'root',
    db: 'admin',
    roles: [ { role: 'root', db: 'admin' } ],
    mechanisms: [ 'SCRAM-SHA-1', 'SCRAM-SHA-256' ]
  }
]
admin> show dbs;
admin   132.00 KiB
config  108.00 KiB
local    72.00 KiB
admin> 

手动输入密码登陆:

mongosh -u "root" -p --authenticationDatabase "admin" --quiet 

[root@master-db03 ~]# mongosh -u "root" -p --authenticationDatabase "admin" --quiet 
Enter password: ***********
test> show dbs;
admin   132.00 KiB
config   72.00 KiB
local    72.00 KiB
test> show databases;
admin   132.00 KiB
config   72.00 KiB
local    72.00 KiB
test> 

5.3、写入指令到文本进行执行

[root@master-db03 ~]# cat /root/1.txt     
show databases;
show users;

[root@master-db03 ~]# mongosh mongodb://127.0.0.1:27017/admin -u root -p 'TShLQd3tr74' --quiet < 1.txt 
admin> show databases;
admin   132.00 KiB
config  108.00 KiB
local    72.00 KiB
admin> show users;
[
  {
    _id: 'admin.root',
    userId: new UUID("903a8a74-fb4f-4a12-b4de-27b319fd6d09"),
    user: 'root',
    db: 'admin',
    roles: [ { role: 'root', db: 'admin' } ],
    mechanisms: [ 'SCRAM-SHA-1', 'SCRAM-SHA-256' ]
  }
]
admin> [root@master-db03 ~]#