MongoDB介绍和部署
文档数据库
文档(json)类数据库
{
id:101
name:zhangsan
age:18
}
逻辑结构
Mongodb 逻辑结构 MySQL逻辑结构
库 :database 库
集合(collection) 表
文档(document) 数据行
最像 RDBMS 的 NoSQL
事务,锁,索引 类似于MySQL
项目:
Oracle MySQL ---》 MongoDB
银行,保险公司 流水信息 ---》 MongoDB
流水信息可以做 ---》 大数据分析 ---》 推送产品
国内目前最大的应用场景:
360 ---》 17年年底 ---》 2600多个MongoDB 节点
病毒库,各种信息。大数据存储
选择之所以称之为选择,肯定是痛苦的!
------->oldguo
安装部署
下载MongoDB:
https://www.mongodb.com/download-center/community/releases
https://www.mongodb.org/dl/linux/x86_64-rhel70
系统准备
# (1)redhat或centos6.2以上系统
# (2)系统开发包完整
# (3)ip地址和hosts文件解析正常
# (4)iptables防火墙&SElinux关闭
# (5)关闭大页内存机制 *****重要
########################################################################
# 关闭大页内存
# 在生产环境使用mongodb时,最好按官方文档关闭linux的大内存机制,关闭原因和关闭方法详见下方官方文档 :
# 各系统关系大内存页-官方文档
# root用户下
# 在vi /etc/rc.local最后添加如下代码
# 重启生效
if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi
cat >>/etc/profile <<EOF
if [ -f /sys/kernel/mm/transparent_hugepage/enabled ]; then
echo never >/sys/kernel/mm/transparent_hugepage/enabled
fi
if [ -f /sys/kernel/mm/transparent_hugepage/defrag ]; then
echo never >/sys/kernel/mm/transparent_hugepage/defrag
fi
EOF
source /etc/profile
# 手工临时生效
cat /sys/kernel/mm/transparent_hugepage/enabled
cat /sys/kernel/mm/transparent_hugepage/defrag
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
其他系统关闭参照官方文档:
https://docs.mongodb.com/manual/tutorial/transparent-huge-pages/
---------------
为什么要关闭?
Transparent Huge Pages (THP) is a Linux memory management system
that reduces the overhead of Translation Lookaside Buffer (TLB)
lookups on machines with large amounts of memory by using larger memory pages.
However, database workloads often perform poorly with THP,
because they tend to have sparse rather than contiguous memory access patterns.
You should disable THP on Linux machines to ensure best performance with MongoDB.
############################################################################
mongodb安装
创建所需用户和组
useradd mongod && echo mongod|passwd --stdin mongod
创建mongodb所需目录结构
mkdir -p /data/mongodb/{conf,log,data}
上传并解压软件到指定位置
cd /data
tar xf mongodb-linux-x86_64-rhel70-3.6.12.tgz -C /opt
ln -sv /opt/mongodb-linux-x86_64-rhel70-3.6.20 /opt/mongodb
设置目录结构权限
chown -R mongod:mongod /opt/mongodb /data/mongodb
设置用户环境变量
su - mongod
echo 'export PATH=/opt/mongodb/bin:$PATH' >> /home/mongod/.bash_profile
source /home/mongod/.bash_profile
启动mongodb
mongod --dbpath=/data/mongodb/data --logpath=/data/mongodb/log/mongodb.log --port=27017 --logappend --fork
[mongod@mysql-node01 ~]$ mongod --dbpath=/data/mongodb/data --logpath=/data/mongodb/log/mongodb.log --port=27017 --logappend --fork
about to fork child process, waiting until server is ready for connections.
forked process: 7390
child process started successfully, parent exiting
[mongod@mysql-node01 ~]$
# mongo 默认端口号 27017
[mongod@mysql-node01 ~]$ ss -lntp|grep mongod
LISTEN 0 128 127.0.0.1:27017 *:* users:(("mongod",pid=7390,fd=11))
[mongod@mysql-node01 ~]$
登录mongodb
[mongod@server2 ~]$ mongo
使用配置文件
# YAML模式
# NOTE:
# YAML does not support tab characters for indentation: use spaces instead.
# --系统日志有关
systemLog:
destination: file
path: "/data/mongodb/log/mongodb.log" --日志位置
logAppend: true --日志以追加模式记录,默认是覆盖模式
# --数据存储有关
storage:
journal:
enabled: true
dbPath: "/data/mongodb/data" --数据路径的位置
# -- 进程控制
processManagement:
fork: true --后台守护进程
pidFilePath: <string> --pid文件的位置,一般不用配置,可以去掉这行,自动生成到data中
# --网络配置有关,3.4版本之后是必须配置的
net:
bindIp: <ip> -- 监听地址
port: <port> -- 端口号,默认不配置端口号,是27017
# -- 安全验证有关配置,3.4版本之前,默认是不开启安全验证的
security:
authorization: enabled --是否打开用户名密码验证,默认无用户,只能本地连接
# ------------------以下是复制集与分片集群有关----------------------
replication:
oplogSizeMB: <NUM>
replSetName: "<REPSETNAME>"
secondaryIndexPrefetch: "all"
sharding:
clusterRole: <string>
archiveMovedChunks: <boolean>
# ---for mongos only
replication:
localPingThresholdMs: <int>
sharding:
configDB: <string>
# YAML例子
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: 192.168.73.120,127.0.0.1
security:
authorization: enabled
EOF
MongoDB 的启动和关闭
# 启动
mongod -f /data/mongodb/conf/mongo.conf
# 关闭
mongod -f /data/mongodb/conf/mongo.conf --shutdown
mongodb 使用systemd管理
# root 用户:
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=/opt/mongodb/bin/mongod --config /data/mongodb/conf/mongo.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/opt/mongodb/bin/mongod --config /data/mongodb/conf/mongo.conf --shutdown
PrivateTmp=true
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl restart mongod
systemctl stop mongod
systemctl start mongod