部署版本:Centos7.6部署mongdb4.2.12版本
1、mongdb官网下载系统版本对应的数据库
1.1确认操作系统版本和内核版本
[root@mysql-master ~]# cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)
[root@mysql-master data]# uname -a
Linux mysql-master 3.10.0-957.el7.x86_64 #1 SMP Thu Nov 8 23:39:32 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
1.2下载mongodb4.2.12
官网:https://www.mongodb.com/try/download/community
下载:[root@mysql-master data]# wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.2.12.tgz
2、MongoDB的安装部署
2.1 创建用户和用户组
[root@mysql-master data]# useradd mongod
[root@mysql-master data]# passwd mongod
注意:输入用户密码,此处mongod用户使用的密码和账户一致。
2.2 创建所需的目录
[root@mysql-master data]# mkdir -p /data/mongodb/{conf,log,data}
conf:存放配置文件
data:数据目录
log:日志目录
2.3 解压软件
[root@mysql-master data]# tar xvf mongodb-linux-x86_64-rhel62-4.2.12.tgz
[root@mysql-master data]# cp -r /data/mongodb-linux-x86_64-rhel62-4.2.12/bin/ /data/mongodb
2.4设置数据库目录权限
[root@mysql-master data]# chown -R mongod:mongod /data/mongodb
2.5 配置环境变量
[root@mysql-master data]# su - mongod
Last login: Fri Sep 24 00:21:43 EDT 2021 on pts/1
[mongod@mysql-master ~]$
添加用户的环境变量,打开环境变量文件后在末尾添加如下内容:
[mongod@mysql-master ~]$ vim .bash_profile
export PATH=/data/mongodb/bin:$PATH
加载环境变量
[mongod@mysql-master ~]$ source .bash_profile
2.6启动数据库
[mongod@mysql-master ~]$ mongod --dbpath=/data/mongodb/data --logpath=/data/mongodb/log/mongodb.log --port=27017 --logappend --fork
参数详解:
--dbpath:数据存放目录
--logpath:日志目录文件
--port: 数据库端口
--logappend:日志追加方式
2.7 登陆到数据库
#首次登陆数据库时,会有一些警告提示,后期设置配置文件后,会清除,暂时忽略。
#进入到mongodb后,会显示数据库的版本号、服务器地址和端口等信息。
[mongod@mysql-master ~]$ mongo
MongoDB shell version v4.2.12
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("e07d52c8-85f5-4a98-995b-6a03fa73f97b") }
MongoDB server version: 4.2.12
Server has startup warnings:
2021-09-23T10:41:54.418-0400 I CONTROL [initandlisten]
2021-09-23T10:41:54.418-0400 I CONTROL [initandlisten] ** WARNING: Access control is not enabled for the database.
2021-09-23T10:41:54.418-0400 I CONTROL [initandlisten] ** Read and write access to data and configuration is unrestricted.
2021-09-23T10:41:54.418-0400 I CONTROL [initandlisten]
2021-09-23T10:41:54.418-0400 I CONTROL [initandlisten]
2021-09-23T10:41:54.418-0400 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
2021-09-23T10:41:54.418-0400 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2021-09-23T10:41:54.418-0400 I CONTROL [initandlisten]
2021-09-23T10:41:54.418-0400 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
2021-09-23T10:41:54.418-0400 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2021-09-23T10:41:54.418-0400 I CONTROL [initandlisten]
---
Enable MongoDB's free cloud-based monitoring service, which will then receive and display
metrics about your deployment (disk utilization, CPU, operation statistics, etc).
The monitoring data will be available on a MongoDB website with a unique URL accessible to you
and anyone you share the URL with. MongoDB may use this information to make product
improvements and to suggest MongoDB products and deployment options to you.
To enable free monitoring, run the following command: db.enableFreeMonitoring()
To permanently disable this reminder, run the following command: db.disableFreeMonitoring()
---
>
注:>:表示已经进入到mongo的shell命令行,可以对数据库进行管理。
2.8数据库进程和端口检查
[mongod@mysql-master ~]$ ps -ef|grep mongo
[mongod@mysql-master ~]$ netstat -lntp|grep mong
2.9数据库启动和关闭
启动数据库:[mongod@mysql-master ~]$ mongod --dbpath=/mongodb/data --logpath=/mongodb/log/mongodb.log --port=27017 --logappend --fork
关闭数据库:[mongod@mysql-master ~]$ mongod -f /data/mongodb/conf/mongo.conf --shutdown
3、mongodb的配置文件及单库简洁配置
mongodb的配置文件格式是YMAL格式。可自定义为mongo.conf或按照项目业务名称自定义配置文件的名称即可,以.conf结尾。
3.1 mongodb配置文件详解
---系统日志模块
systemLog:
destination: file #Mongodb 日志输出的目的地,指定一个 file 或者 syslog,如果指定 file,必须指定 systemlog.path
logAppend: true #实例重启时,不创建新日志文件,在旧日志文件末尾继续添加
path: /data/mongodb/log/mongo.log #日志路径
---数据存储模块
storage:
dbPath: /data/mongodb/data #数据存储目录
journal: #回滚日志
enabled: true
directoryPerDB: true #默认 false,不适用 inmemory engine
engine: #存储引擎3.2默认wiredTiger
mmapv1: #4.0开始启用 mmapv1存储引擎
preallocDataFiles: #启用或禁用数据文件的预分配。默认情况下,MongoDB不会预分配数据文件。
nsSize: #默认16M命名空间文件的默认大小,即文件的结尾.ns。每个集合和索引都将计算为一个命名空间。
quota:
enforced: #默认 false,启用或禁用每个数据库可以拥有的数字数据文件的最大限制
maxFilesPerDB: #默认8,每个数据库的数据文件数量的限制和enforced参数结合使用。。
smallFiles: #默认 false 选项减少数据文件的初始大小,使用大量的库存较小的文件
wiredTiger:
engineConfig:
cacheSizeGB: 2 #将用于所有数据缓存的最大小
journalCompressor: #默认snappy,WiredTiger日志数据的压缩类型。
directoryForIndexes: true #默认false 索引集合storage.dbPath存储在数据单独子目录
collectionConfig:
blockCompressor: #默认snappy,用于压缩收集数据的默认压缩类型
indexConfig:
prefixCompression: #默认 true启用或禁用索引数据的前缀压缩
inMemory:
engineConfig:
inMemorySizeGB: #默认值:物理RAM的50%少于1 GB
---进程控制模块
processManagement: #使用处理系统守护进程的控制处理
fork: true # fork and run in background 后台运行
pidFilePath: /data/mongodb/pid/mongod.pid # location of pidfile 创建 pid 文件
---网络模块
net:
port: 28017 #监听端口
bindIp: localhost,192.168.0.1 #绑定内网 ip,
maxIncomingConnections: 5000 #mongos 或者 mongod 最大连接数,如果高于系统配置的最大连接阈值则不起作用
#http:
#enabled: true #开启 http 接口确保生产环境中的REST API和JSON API都被禁用以防止潜在的数据暴露和***者的漏洞。
---安全认证模块
security: #认证
keyFile: /data/mongod/conf/keyfile #秘钥文件的路径,用于 mongodb 分片集群或者副本集进行身份验证的共享秘钥
clusterAuthMode: keyFile #集群的认证方式 keyFile 秘钥文件进行身份认证,推荐 x509证书认证
authorization: enabled #启用或者禁用基于角色的访问控制来管理每个用户对数据库资源和操作的访问 enabled 或者 disables
javascriptEnabled: #启用或者禁用服务端JavaScript 执行,禁用时不能使用JavaScript代码的服务端执行操作
sasl:
hostName:
serviceName:
saslauthdSocketPath:
enableEncryption: #启用WiredTiger存储引擎的加密。您必须设置为true传递加密密钥和配置
encryptionCipherMode: #加密的模式适用于企业版
encryptionKeyFile: #通过KMIP 以外的进程管理密钥时的本地密钥文件的路径只有通过KMIP以外的进程管理密钥时才设置,需要saecurity.enableEncryption是true。
kmip:
keyIdentifier:
rotateMasterKey:
serverName:
port:
clientCertificateFile:
clientCertificatePassword:
serverCAFile:
---副本集配置模块
replication: #副本集用到的配置
oplogSizeMB: 1024 #复制操作日志的大小,详细介绍见oplog文章,
replSetName: eqxtest3 #副本集名称,同一个副本集的所有主机必须设置相同的名称
secondaryIndexPrefetch: #只用于 mmapv1存储引擎,默认二进制文件和相关操作索引加载到内存,none 不会加载,all 二次加载,_id_only出了已存在_id,不会加载其他索引
enableMajorityReadConcern: #默认 false
---分片集群配置模块
sharding: #分片用到的配置
clusterRole: shardsvr #分片集群角色,configsvr作为配置服务启动,shardsvr 分片实例启动
archiveMovedChunks: #块迁移期间,一个分片不保存文档从分片迁移,默认 false
autoSplit: # 默认 true,启用或者禁用自动分片,
configDB: #mongos 分片集群实例必须制定相同的配置服务副本集名字,configDB: /cfg1.example.net:27017, cfg2.example.net:27017
chunkSize: #默认64M
注意:MongoDB 3.6以后开始,默认mongod和mongos绑定到localhost。如果部署的成员在不同的主机上运行,或者希望远程客户端连接到部署服务器,则必须指定--bind_ip或net.bindIp
3.2 mongodb配置文件案例
cat > /data/mongodb/conf/mongo.conf <<EOF
systemLog:
destination: file
path: "/data/mongodb/log/mongodb.log"
logAppend: true
storage:
journal:
enabled: true
dbPath: "/data/mongodb/data/"
processManagement:
fork: true
net:
port: 27017
bindIp: 172.21.209.123,127.0.0.1
EOF
4 配置通过系统的systemd管理mongodb数据库服务
通过配置systemd后,可以像管理mysql服务一样管理mongodb服务。
4.1 systemd服务管理模板
cat > /etc/systemd/system/mongod.service <<EOF
[Unit]
Description=mongodb
After=network.target remote-fs.target nss-lookup.target
[Service]
User=mongod
Type=forking
ExecStart=/data/mongodb/bin/mongod --config /data/mongodb/conf/mongo.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/data/mongodb/bin/mongod --config /data/mongodb/conf/mongo.conf --shutdown
PrivateTmp=true
[Install]
WantedBy=multi-user.target
EOF
参数详解:
ExecStart:启动数据库服务的脚本路径
ExecStop:关闭数据库服务的脚本路径
--config:配置文件的路径
4.2、管理服务
[mongod@mysql-master data]$ systemctl restart mongod
[mongod@mysql-master data]$ systemctl stop mongod
[mongod@mysql-master data]$ systemctl start mongod
[mongod@mysql-master data]$ systemctl status mongod
● mongod.service - mongodb
Loaded: loaded (/etc/systemd/system/mongod.service; enabled; vendor preset: disabled)
Active: active (running) since Thu 2021-09-23 10:41:54 EDT; 17h ago
Main PID: 27201 (mongod)
CGroup: /system.slice/mongod.service
└─27201 /data/mongodb/bin/mongod --config /data/mongodb/conf/mongo.conf
至此:部署mongodb数据库完成,可实现单机部署和日常管理。