mongodb(官方文档翻译3.4)

最近公司使用了mongodb,于是我把学习mongodb时,根据官方英文文档翻译过来的笔记拿出来看了一遍,分享出来供广大网友学习参考…如有不足请多多指教!

编译文档

This repository contains a major revision of the MongoDB documentation, currently accessible at http://docs.mongodb.org/manual/. You can build the documentation locally if you have giza and Inkscape installed:
【linux】
【pip 是一个现代的,通用的 Python 包管理工具。提供了对 Python 包的查找、下载、安装、卸载的功能。
pip is already installed if you’re using Python 2 >=2.7.9 or Python 3 >=3.4
or
https://pip.pypa.io/en/stable/installing/

#pip install giza
#yum install git
git clone https://github.com/mongodb/docs.git(当前版本)
git clone --branch v3.4 https://github.com/mongodb/docs.git(指定版本)
cd docs/
make html
cd …/
#tar -zcf docs.tar.gz docs

Linux安全

selinux关闭:

#setenforce 0 --临时生效
#vim /etc/selinux/config —修改 SELINUX=disabled
在这里插入图片描述
#getenforce (查看)
在这里插入图片描述
(成功关闭)

防火墙(linux6 iptables | linux7 firewall)

linux6
#vim /etc/sysconfig/iptables
-A INPUT -p tcp -m state --state NEW -m tcp --dport 8080 -j ACCEPT
#service iptables restart --重启
#chkconfig iptables off --设置开机不启动
#service iptables stop --关闭
linux7
#firewall-cmd --zone=public --add-port=8080/tcp --permanent –添加
#firewall-cmd --reload --重启
#firewall-cmd --zone=public --list-ports --查看
#systemctl disable firewalld --禁用
#systemctl stop firewalld --停用

安装

Windows

下载: https://www.mongodb.com/download-center#community
1.安装后在根目录下创建: data (数据) log(日志) 目录、mongodb.conf (配置文件)
在这里插入图片描述
2.配置mongodb.conf

dbpath=D:\DataBase\MongoDB\Server\3.4\db
logpath=D:\DataBase\MongoDB\Server\3.4\log\mongodb.log
logappend=true
journal=true
quiet=true
port=27017

3.启动脚本(mongod-start.bat)

@echo off
ECHO. * * * * Mongod 服务端 启动脚本 For Windows * * * *
ECHO. * * * * write by liuli * * * ** * * ** * * ** * *
d:
cd D:\DataBase\MongoDB\Server\3.4\bin
ECHO. Mongod start…
mongod --config D:\DataBase\MongoDB\Server\3.4\mongodb.conf
pause

  1. 通过执行mongod.exe,使用–install选项来安装服务(已管理员身份运行cmd)

mongod --config D:\DataBase\MongoDB\Server\3.4\mongodb.conf --install
net start MongoDB
net stop MongoDB
删除服务
mongod –remove

在这里插入图片描述
5. 后台管理 Shell(注意:这里把D:\DataBase\MongoDB\Server\3.4\bin加入到了环境变量)
在这里插入图片描述

Linux-配置安装

1.解压

#tar -zxvf mongodb-linux-x86_64-rhel70-3.4.10.tgz

2.创建目录和配置文件

MongoDB的数据存储在data目录的db目录下,但是这个目录在安装过程不会自动创建,所以你需要手动创建data目录,并在data目录中创建db目录。
注意:/data/db 是 MongoDB 默认的启动的数据库路径(–dbpath)。
#cd /home
#mv mongodb-linux-x86_64-rhel70-3.4.10 mongodb3.4
#mkdir {data,log}
#vim mongodb.conf
dbpath=/home/mongodb3.4/data
logpath=/home/mongodb3.4/mongodb.log
logappend=true
journal=true
directoryperdb=true
quiet=true
port=27017

3.启动(后台运行)

#/home/mongodb3.4/bin/mongod --fork --config /home/mongodb3.4/mongodb.conf &

在这里插入图片描述

#/home/mongodb3.4/bin/mongod --config /home/mongodb3.4/mongodb.conf &
需要在mongodb.conf中添加:
fork = true (不支持windows)

4.设置开机启动
#vim /etc/rc.d/init.d/mongodb

#######start
#!/bin/bash
#chkconfig:35 99 01
EXE_FILE=/home/mongodb3.4/bin/mongod
CONFIG_FILE=/home/mongodb3.4/mongodb.conf
MONGOPID=ps -ef| grep mongod| grep -v grep| awk '{print $2}'
case “$1” in
start)
ulimit -n 3000
echo -n “Starting MongoDB server”
$EXE_FILE --config KaTeX parse error: Expected 'EOF', got '&' at position 13: CONFIG_FILE &̲ echo "[ ok…MONGOPID" ]; then
kill -15 $MONGOPID
fi
echo “[ ok ]”
;;
status)
ps -aux| grep mongod
;;
*)
echo -n “Usage: /etc/init.d/mongodb {start|stop|status}”
exit 1
esac
exit 0
######end

注册服务:

#chmod 755 /etc/rc.d/init.d/ mongodb
#chkconfig --add mongodb
#chkconfig --list mongodb
#chkconfig --del mongodb --不需要了可以删除

5.管理

(linux7)
#systemctl start mongodb 启动
#systemctl stop mongodb 关闭
(linux6 7)
#service mongodb start 启动
#service mongodb stop 关闭

Linux-yum安装

配置yun源
#vim /etc/yum.repos.d/mongodb-org-3.4.repo

v3
[mongodb-org-3.4]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.4/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.4.asc
v2
[mongodb-org-2.6]
name=MongoDB 2.6 Repository
baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/x86_64/
gpgcheck=0
enabled=1
安装
#yum install -y mongodb-org

/var/lib/mongo – 数据库路径
/var/log/mongodb --log路径
/etc/mongod.conf --配置文件
管理
在这里插入图片描述

**准备

shell**
(mongo)
1、连接 mongo ./mongo 【依据安装方式】
2、退出 quit() exit ctrl+c
3、显示当前命令数:
cmdCount = 1;
prompt = function() {
return (cmdCount++) + “> “;
}
4、显示主机和数据库信息
host = db.serverStatus().host;
prompt = function() {
return db+”@”+host+"$ “;
}
5、自定义提示以显示时间和文档计数
prompt = function() {
return “Uptime:”+db.serverStatus().uptime+” Documents:"+db.stats().objects+" > ";
}
6、修改控制台输出数据量(默认20)
DBQuery.shellBatchSize = 10;

------------------ mongo
mongo –help
mongo –nodb --不连接数据库,稍后连接
----------------------db
show dbs --服务器上所有数据库
use – 切换当前数据库
db.help()
db.dropDatabase() – 删除db
show users --当前数据库的用户
show roles --当前数据库的所有角色
show profile --打印花费1毫秒或更多的五个最近的操作
show databases --所有可用数据库的列表
load() --执行一个JavaScript文件
show collections当前数据库的所有集合
db.collection.help()
db.collection.find().help()
db.collection.find().toArray --查看方法实现
-------------------------------js
db.auth() 如果以安全模式运行,则认证用户。
coll = db. 将当前数据库中的特定集合设置为一个变量 coll,如下例所示:
db.collection.find() 查找集合中的所有文档并返回一个游标。
db.collection.insertOne() 将新文档插入到集合中。
db.collection.insertMany() 将多个新文档插入到集合中。
db.collection.updateOne() 更新集合中的单个现有文档。
db.collection.updateMany() 更新集合中的多个现有文档。
db.collection.save() 插入新文档或更新集合中的现有文档。
db.collection.deleteOne() 从集合中删除单个文档。
db.collection.deleteMany() 从集合中删除文档。
db.collection.drop() 丢弃或删除完整的集合。
db.collection.createIndex() 如果索引不存在,则在集合上创建一个新索引; 否则,操作无效。
db.getSiblingDB() 使用相同的连接返回对另一个数据库的引用,而不显式切换当前数据库。这允许跨数据库查询。

基本概念

SQL术语/概念 MongoDB术语/概念 解释/说明
在这里插入图片描述
注意:
1.文档中的键/值对是有序的
2.MongoDB区分类型和大小写
元数据
数据库的信息是存储在集合中。它们使用了系统的命名空间:dbname.system.*
在这里插入图片描述
数据类型(常见数据类型)
在这里插入图片描述

CRUD

Create

db.collection.insertOne() 3.2+
db.collection.insertMany() 3.2+
db.collection.insert()

Read

db.collection.find()
db.collection.findOne() —查询一条
db.collection.find().pretty() —格式化输出
show collections --查询所有文档

Update

db.collection.update()
db.collection.save()
db.collection.updateOne() 3.2+
db.collection.updateMany() 3.2+
db.collection.replaceOne() 3.2+

Delete

db.collection.deleteOne() 3.2+
db.collection.deleteMany() 3.2+

插入
参考:https://github.com/472732787/mongodb/tree/master/sql

查询
$type操作符是基于BSON类型来检索集合中匹配的数据类型,并返回结果。
在这里插入图片描述

参考:https://github.com/472732787/mongodb/tree/master/sql
修改
参考:https://github.com/472732787/mongodb/tree/master/sql

删除
在这里插入图片描述
参考:https://github.com/472732787/mongodb/tree/master/sql

Bulk Write

在这里插入图片描述
参考:https://github.com/472732787/mongodb/tree/master/sql

索引

ensureIndex() 方法来创建索引

db.COLLECTION_NAME.ensureIndex({KEY:1})
Key 值为你要创建的索引字段,1为指定按升序创建索引,如果你想按降序来创建索引指定为-1即可,ensureIndex() 接收可选参数,可选参数列表如下:
在这里插入图片描述
参考:https://github.com/472732787/mongodb/tree/master/sql

TextSearch

参考:https://github.com/472732787/mongodb/tree/master/sql

管理

配置

在这里插入图片描述
-------------------------------------配置参数-------------------------------------------

–quiet # 安静输出
–port arg # 指定服务端口号,默认端口27017
–bind_ip arg # 绑定服务IP,若绑定127.0.0.1,则只能本机访问,不指定默认本地所有IP
–logpath arg # 指定MongoDB日志文件,注意是指定文件不是目录
–logappend # 使用追加的方式写日志
–pidfilepath arg # PID File 的完整路径,如果没有设置,则没有PID文件
–keyFile arg # 集群的私钥的完整路径,只对于Replica Set 架构有效
–unixSocketPrefix arg # UNIX域套接字替代目录,(默认为 /tmp)
–fork # 以守护进程的方式运行MongoDB,创建服务器进程
–auth # 启用验证
–cpu # 定期显示CPU的CPU利用率和iowait
–dbpath arg # 指定数据库路径
–diaglog arg # diaglog选项 0=off 1=W 2=R 3=both 7=W+some reads
–directoryperdb # 设置每个数据库将被保存在一个单独的目录
–journal # 启用日志选项,MongoDB的数据操作将会写入到journal文件夹的文件里
–journalOptions arg # 启用日志诊断选项
–ipv6 # 启用IPv6选项
–jsonp # 允许JSONP形式通过HTTP访问(有安全影响)
–maxConns arg # 最大同时连接数 默认2000
–noauth # 不启用验证
–nohttpinterface # 关闭http接口,默认关闭27018端口访问
–noprealloc # 禁用数据文件预分配(往往影响性能)
–noscripting # 禁用脚本引擎
–notablescan # 不允许表扫描
–nounixsocket # 禁用Unix套接字监听
–nssize arg (=16) # 设置信数据库.ns文件大小(MB)
–objcheck # 在收到客户数据,检查的有效性,
–profile arg # 档案参数 0=off 1=slow, 2=all
–quota # 限制每个数据库的文件数,设置默认为8
–quotaFiles arg # number of files allower per db, requires --quota
–rest # 开启简单的rest API
–repair # 修复所有数据库run repair on all dbs
–repairpath arg # 修复库生成的文件的目录,默认为目录名称dbpath
–slowms arg (=100) # value of slow for profile and console log
–smallfiles # 使用较小的默认文件
–syncdelay arg (=60) # 数据写入磁盘的时间秒数(0=never,不推荐)
–sysinfo # 打印一些诊断系统信息
–upgrade #如果需要升级数据库 * Replicaton 参数


–fastsync # 从一个dbpath里启用从库复制服务,该dbpath的数据库是主库的快照,可用于快速启用同步
–autoresync # 如果从库与主库同步数据差得多,自动重新同步,
–oplogSize arg # 设置oplog的大小(MB) * 主/从参数,默认为硬盘剩余空间的5%


–master # 主库模式
–slave # 从库模式
–source arg # 从库 端口号
–only arg # 指定单一的数据库复制
–slavedelay arg # 设置从库同步主库的延迟时间 * Replica set(副本集)选项:


–replSet arg # 设置副本集名称 * Sharding(分片)选项


–configsvr # 声明这是一个集群的config服务,默认端口27019,默认目录/data/configdb
–shardsvr # 声明这是一个集群的分片,默认端口27018

关闭

查看进程
#netstat -tlnp |grep mongod
强制关闭
#kill -9
#pkill mongod
–建议使用
kill
kill -2
–干净关闭
use admin
db.shutdownServer()
–需要指定数据库集目录(默认/data/db)
mongod --shutdown --dbpath /var/lib/mongo/

—意外关机恢复
【不正确的关闭可能会使数据处于不一致的状态。在不正常关机后,如果存在非空 mongod.lock文件,则mongod实例在重新启动时记录以下消息:
Detected unclean shutdown - mongod.lock is not empty.

–操作之前最好先备份
mongod --dbpath /var/lib/mongo --repair

安全

用户

警告处理

  1. WARNING: Access control is not enabled for the database. Read and write access to data and configuration is unrestricted.
  2. WARNING: You are running this process as the root user, which is not recommended.
  3. WARNING: /sys/kernel/mm/transparent_hugepage/enabled is ‘always’. WARNING: /sys/kernel/mm/transparent_hugepage/enabled is ‘always’.
  4. WARNING: /sys/kernel/mm/transparent_hugepage/defrag is ‘always’. We suggest setting it to ‘never’

配置文件中添加 【配置完用户后在开启】
–老版本
auth=true
–新版本 yaml格式
security:
authorization: enabled
在这里插入图片描述
启用身份认证
在启用之前确保在admin库中有userAdmin或userAdminAnyDatabase角色的用户,此用户可以管理用户和角色

  1. 启动没有访问控制的MongoDB(关闭认证)
  2. 连接到数据库创建管理员用户

use admin
– 创建
db.createUser(
{
user: “admin”,
pwd: “admin”,
roles: [ { role: “userAdminAnyDatabase”, db: “admin” } ]
}
)
– 查询
db.system.users.find()

  1. 重启认证(启用认证)

use admin
db.auth(“admin”,“admin”)
or
#mongo --port 27017 -u “admin” -p “admin” --authenticationDatabase “admin”

在这里插入图片描述
该用户对其他数据库没有访问权限(和oracle/mysql。。。。不一样)
4. 为test库 创建用户

use test
db.createUser(
{
user: “test”,
pwd: “test”,
roles: [ { role: “readWrite”, db: “test” }]
}
)
db.auth(“test”,“test”)
or
#mongo --port 27017 -u “test” -p “test” --authenticationDatabase “test” –
在这里插入图片描述
可以访问了

  1. 查询用户【用户信息在admin库】

db.system.users.find()
or
use test
db.getUser(“test”)
在这里插入图片描述
 1.思考:如果切换到test 直接在admin为test 创建
use admin
db.createUser(
{
user: “mytest”,
pwd: “mytest”,
roles: [ { role: “readWrite”, db: “test” }]
}
)
之前认证失败:
use test
switched to db test
db.auth(“mytest”,“mytest”)
Error: Authentication failed.
0
在这里插入图片描述
 2.测试(roles 中db 的作用):
db.createUser(
{
user: “mytest”,
pwd: “mytest”,
roles: [ { role: “readWrite”}]
}
)
couldn’t add user: Missing expected field “db”

  1. 修改密码

db.changeUserPassword(“test”, “123456”)

在这里插入图片描述

角色

  1. 查看数据库用户角色

use test
db.getUser(“test”)

  1. 自定义角色

use admin
db.createRole(
{
role: “myRole”,
privileges: [
{
actions: [ “dropCollection” ],
resource: { db: “”, collection: “system.views” }
}
],
roles: []
}
)
–删除自定义角色
db.dropRole(“myRole”)

  1. 获取指定角色的用户以及详细权限

use test
db.getRole( “readWrite”, { showPrivileges: true } )

  1. 授权

use test
db.grantRolesToUser(
“test”,
[
{ role: “read”, db: “test” }
]
)
db.getUser(“test”) --查询结果

  1. 回收

db.revokeRolesFromUser(
“test”,
[
{ role: “read”, db: “test” }
]
)
db.getUser(“test”) --查询结果
在这里插入图片描述
在这里插入图片描述

角色管理方法
在这里插入图片描述

角色权限

                               参考官方文档

权限不足?

db.serverStatus()
{
“ok” : 0,
“errmsg” : “not authorized on admin to execute command { serverStatus: 1.0 }”,
“code” : 13,
“codeName” : “Unauthorized”
}

  1. 找到该权限对应的角色:clusterMonitor
  2. 给用户赋予该角色
    db.grantRolesToUser(
    “admin”,
    [
    { role: “clusterMonitor”, db: “admin” }
    ]
    )
    db.serverStatus() -不要重新登录,立马生效

sys collection

–需要dbAdmin权限

use admin
db.grantRolesToUser(
“admin”,
[
{ role: “dbAdmin”, db: “admin” }
]
)
–查询
db.system.roles.find() --存放用户自定义角色
db.system.users.find() --用户信息
db.system.version.find() --版本信息

ssl

https://github.com/472732787/mongodb/tree/master/ssl

  1. 生成自签名证书和私钥, 将证书和私钥连接到.pem文件
    #cd /etc/ssl/
    #openssl req -newkey rsa:2048 -new -x509 -days 365 -nodes -out mongodb-cert.crt -keyout mongodb-cert.key
    #cat mongodb-cert.key mongodb-cert.crt > mongodb.pem
    在这里插入图片描述
  2. 配置加密连接(vim /etc/mongod.conf)
    – 新版基于yaml格式
    net:
    ssl:
    mode: requireSSL
    PEMKeyFile: /etc/ssl/mongodb.pem
    –老版
    sslMode = requireSSL
    sslPEMKeyFile = /etc/ssl/mongodb.pem
    重启服务: systemctl restart mongod
  3. 客户端连接
    #vim /etc/hosts
    127.0.0.1 www.test.com
    #mongo --ssl --host www.test.com --sslCAFile /etc/ssl/mongodb.pem

存储

Storage Engines

存储引擎是数据库的一部分,负责管理数据在内存和磁盘上的存储方式
–storageEngine
WiredTiger 3.2开始默认的存储引擎【在64位版本中可用,3.0或更高版本】,非常适合大多数工作负载,推荐使用,WiredTiger提供了文档级的并发模型(mvcc),检查点和压缩等功能。在MongoDB Enterprise中,WiredTiger还支持静态 加密。
检查点(即将快照数据写入磁盘),间隔为60秒或2千兆字节的日志数据。
MMAPv1是原始的MongoDB存储引擎,是3.2之前的MongoDB版本的默认存储引擎。它在大量读取和写入以及就地更新的工作负载上表现良好。
每60秒钟写入磁盘上的数据文件,并大约每100毫秒写入日志文件。
storage.syncPeriodSecs
storage.journal.commitIntervalMs
In-Memory不是将文件存储在磁盘上,而是将其保留在内存中,以获得更可预测的数据延迟。(紧企业版支持)

MMAPv1 —升级-–》WiredTiger
单节点:
mongodump --out
mongod --storageEngine wiredTiger --dbpath
mongorestore
副本
db.shutdownServer()
mongod --storageEngine wiredTiger --dbpath --replSet
集群(参考上面)

Journaling

在这里插入图片描述
oeacel : redo log | mysql :binlog
WiredTiger存储引擎
为了在出现故障时提供持久性,能提供崩溃恢复能力,MongoDB使用预写日志记录到磁盘日志文件。
通过日记,恢复过程:
1.查看数据文件以查找上一个检查点的标识符。
2.在日志文件中搜索与上一个检查点的标识符相匹配的记录。
3.从上一个检查点开始,在日志文件中应用这些操作。
目录:dbPath/ journal
格式:WiredTigerLog.
大小:约为100 MB。一旦文件超过这个限制,WiredTiger将创建一个新的日志文件
A clean shutdown removes all the files in the journal directory. A dirty shutdown (crash) leaves files in the journal directory; these are used to automatically recover the database to a consistent state when the mongod process is restarted.
在这里插入图片描述
MMAPv1存储引擎
当发生写操作时,MongoDB会更新内存视图。启用日记功能后,MongoDB首先将内存中的更改写入磁盘日志文件。如果MongoDB在对数据文件进行更改前终止或遇到错误,MongoDB可以使用日志文件将写入操作应用于数据文件并保持一致的状态。

GridFS

GridFS是用于存储和检索超过 BSON- document大小限制 16 MB的文件
GridFS使用两个集合来存储文件。一个集合存储文件块,另一个存储文件元数据
使用:

  1. MongoDB驱动程序
  2. mongofiles命令行工具

监控

需要clusterMonitor权限

mongostat

mongostat是mongodb自带的状态检测工具,在命令行下使用。它会间隔固定时间获取mongodb的当前运行状态,并输出。如果你发现数据库突然变慢或者有其他问题的话,你第一手的操作就考虑采用mongostat来查看mongo的状态。
./mongostat 5 --5s返回一次

mongotop

mongotop提供了一个方法,用来跟踪一个MongoDB的实例,查看哪些大量的时间花费在读取和写入数据。 mongotop提供每个集合的水平的统计数据。默认情况下,mongotop返回值的每一秒。
./mongotop 5 --5s返回一次

db.serverStatus()

会返回数据库状态的总体概述,详细介绍磁盘使用情况,内存使用情况,连接情况,日志记录和索引访问。

db.stats()

反映存储的使用量,包含在数据库中的数据的数量,和对象,收集和索引计数器。

db.collection.stats()

集合的信息,同(db.stats())

rs.status()

副本集的状态概述

SNMP

MongoDB Enterprise can provide database metrics via SNMP

备份恢复

mongodump

mongodump -h dbhost -d dbname -o dbdirectory
-h:
MongDB所在服务器地址,例如:127.0.0.1,当然也可以指定端口号:127.0.0.1:27017
-d:
需要备份的数据库实例,例如:test
-o:
备份的数据存放位置,例如:/home,当然该目录需要提前建立,在备份完成后,系统自动在home目录下建立一个test目录,这个目录里面存放该数据库实例的备份数据。
在这里插入图片描述
#./mongodump -h 127.0.0.1 -d test -o /home
在这里插入图片描述
BSON( Binary Serialized Document Format) 是一种二进制形式的存储格式,采用了类似于 C 语言结构体的名称、对表示方法,支持内嵌的文档对象和数组对象,具有轻量性、可遍历性、高效性的特点,可以有效描述非结构化数据和结构化数据

mongorestore

mongorestore -h <:port> -d dbname
–host <:port>, -h <:port>:
MongoDB所在服务器地址,默认为: localhost:27017
–db , -d :
需要恢复的数据库实例,例如:test,当然这个名称也可以和备份时候的不一样,比如test2
–drop:
恢复的时候,先删除当前数据,然后恢复备份的数据。就是说,恢复后,备份后添加修改的数据都会被删除,慎用!

mongorestore 最后的一个参数,设置备份数据所在位置,例如:/home/test。
你不能同时指定 和 --dir 选项,–dir也可以设置备份目录。
–dir:
指定备份的目录
你不能同时指定 和 --dir 选项。

–删除

use test
db.dropDatabase()
–恢复(基于前面的数据演示)
./mongorestore --db test /home/test/
./mongorestore --db test --drop --dir /home/test/
./mongorestore --db test --collection mycol --dir /home/test/mycol.bson
–查看
show dbs
show collections

Replication

Replica Set Master-Slave

在这里插入图片描述
1.主(Master)可读可写,当数据有修改的时候,会将oplog同步到所有连接的salve上去。
2.从(Slave)只读不可写,自动从Master同步数据
并不推荐使用Master-Slave架构,因为Master-Slave其中Master宕机后不能自动恢复,推荐使用Replica Set.

目录准备(根目录D:\DataBase\MongoDB\Server)
d:
cd D:\DataBase\MongoDB\Server
mkdir Replication\Master\db &
mkdir Replication\Master\logs &
mkdir Replication\Slave\db &
mkdir Replication\Slave\logs
配置
主节点(配置文件)
D:\DataBase\MongoDB\Server\Replication\mongodb-Master.conf
dbpath=D:\DataBase\MongoDB\Server\Replication\Master\db
logpath=D:\DataBase\MongoDB\Server\Replication\Master\logs\mongodb.log
logappend=true
journal=true
quiet=true
port=37027
#主节点配置
master=true
oplogSize=2048
从节点(配置文件)
D:\DataBase\MongoDB\Server\Replication\mongodb-Slave.conf

dbpath=D:\DataBase\MongoDB\Server\Replication\Slave\db
logpath=D:\DataBase\MongoDB\Server\Replication\Slave\logs\mongodb.log
logappend=true
journal=true
quiet=true
port=37037
#配置从节点
slave=true
source=127.0.0.1:37027
autoresync=true

启动
mongod --config D:\DataBase\MongoDB\Server\Replication\mongodb-Master.conf
mongod --config D:\DataBase\MongoDB\Server\Replication\mongodb-Slave.conf
验证
连接到主库,插入数据

mongo --port 37207
db.printReplicationInfo() —查看主节点的状态
use test
db.runoob.insert({“name”:“第一个值”})
show dbs
连接到从库,查看数据
mongo --port 37037
db.printSlaveReplicationInfo() – 查看从节点的状态
默认 从库是禁止读写的(在从节点上,需要在执行rs.slaveOk())
rs.slaveOk()
show dbs
db.runoob.find()
测试插入(报错):
db.runoob2.insert({“name”:“第一个值”})
“code” : 10107, “errmsg” : “not master”

Replica Set Arbiter

在这里插入图片描述
(1)主节点(Primary)
接收所有的写请求,然后把修改同步到所有Secondary。一个Replica Set只能有一个Primary节点,当Primary挂掉后,其他Secondary或者Arbiter节点会重新选举出来一个主节点。默认读请求也是发到Primary节点处理的,需要转发到Secondary需要客户端修改一下连接配置。
(2)副本节点(Secondary)
与主节点保持同样的数据集。当主节点挂掉的时候,参与选主。
(3)仲裁者(Arbiter)
不保有数据,不参与选主,只进行选主投票。使用Arbiter可以减轻数据存储的硬件需求,Arbiter跑起来几乎没什么大的硬件资源需求,但重要的一点是,在生产环境下它和其他数据节点不要部署在同一台机器上。
(4)选主过程
其中Secondary宕机,不受影响,若Primary宕机,会进行重新选主:
在这里插入图片描述

目录准备(根目录D:\DataBase\MongoDB\Server)
d:
cd D:\DataBase\MongoDB\Server
mkdir ReplicaSet\rs0-0\db &
mkdir ReplicaSet\rs0-1\db &
mkdir ReplicaSet\rs0-2\db &
mkdir ReplicaSet\rs0-3\db&
mkdir ReplicaSet\rs0-4\db&

配置
【不要在副本集的同一系统上运行】
D:\DataBase\MongoDB\Server\ReplicaSet\rs0-0.conf (做观察者)
dbpath=D:\DataBase\MongoDB\Server\ReplicaSet\rs0-0\db
logpath=D:\DataBase\MongoDB\Server\ReplicaSet\mongodb-0.log
logappend=true
journal=true
quiet=true
port=37300
#rs0
replSet=rs0
oplogSize=2048
D:\DataBase\MongoDB\Server\ReplicaSet\rs0-1.conf(做主节点)
dbpath=D:\DataBase\MongoDB\Server\ReplicaSet\rs0-1\db
logpath=D:\DataBase\MongoDB\Server\ReplicaSet\mongodb-1.log
logappend=true
journal=true
quiet=true
port=37301
#rs1
replSet=rs0
oplogSize=2048
D:\DataBase\MongoDB\Server\ReplicaSet\rs0-2.conf
dbpath=D:\DataBase\MongoDB\Server\ReplicaSet\rs0-2\db
logpath=D:\DataBase\MongoDB\Server\ReplicaSet\mongodb-2.log
logappend=true
journal=true
quiet=true
port=37302
#rs2
replSet=rs0
oplogSize=2048
D:\DataBase\MongoDB\Server\ReplicaSet\rs0-3.conf
dbpath=D:\DataBase\MongoDB\Server\ReplicaSet\rs0-3\db
logpath=D:\DataBase\MongoDB\Server\ReplicaSet\mongodb-3.log
logappend=true
journal=true
quiet=true
port=37303
#rs3
replSet=rs0
oplogSize=2048
D:\DataBase\MongoDB\Server\ReplicaSet\rs0-4.conf
dbpath=D:\DataBase\MongoDB\Server\ReplicaSet\rs0-4\db
logpath=D:\DataBase\MongoDB\Server\ReplicaSet\mongodb-4.log
logappend=true
journal=true
quiet=true
port=37304
#rs3
replSet=rs0
oplogSize=2048

启动
mongod --config D:\DataBase\MongoDB\Server\ReplicaSet\rs0-0.conf
mongod --config D:\DataBase\MongoDB\Server\ReplicaSet\rs0-1.conf
mongod --config D:\DataBase\MongoDB\Server\ReplicaSet\rs0-2.conf
–演示添加 删除
mongod --config D:\DataBase\MongoDB\Server\ReplicaSet\rs0-3.conf
mongod --config D:\DataBase\MongoDB\Server\ReplicaSet\rs0-4.conf
所有配置都必须在主节点Primary上操作
连接主节点【37301】

mongo 127.0.0.1:37301
–使用rs.initiate()添加主节点
rsconf = {
_id: “rs0”,
members: [
{
_id: 0,
host: “127.0.0.1:37301”
}
]
}
–初始化配置
rs.initiate(rsconf)
–添加其他节点
rs.add(“127.0.0.1:37302”)
–添加仲裁节点
rs.addArb(“127.0.0.1:37300”)
–验证配置
rs.conf()
–查看状态
rs.status()

–添加其他节点

rs.add(“127.0.0.1:37303”)
rs.add(“127.0.0.1:37304”)

删除节点:

rs.remove(“127.0.0.1:37303”)
rs.remove(“127.0.0.1:37304”)
-----修改优先级
rs.reconfig()
–修改members优先级
cfg = rs.conf()
cfg.members[2].priority = 0.1 (如果修改的是主节点,修改就不在是主节点了)
rs.reconfig(cfg)
–设置隐藏副本(不能是主节点,对客户端不可见,可以参与投票,一般做备份使用)
cfg = rs.conf()
cfg.members[0].priority = 0
cfg.members[0].hidden = true
rs.reconfig(cfg)
–配置延迟副本
cfg = rs.conf()
cfg.members[0].priority = 0
cfg.members[0].hidden = true
cfg.members[0].slaveDelay = 3600
rs.reconfig(cfg)
–让成员不参与投票
cfg = rs.conf()
cfg.members[3].votes = 0;
cfg.members[3].priority = 0;
rs.reconfig(cfg)
解压后放在: D:\DataBase\MongoDB\Server

Shard:

用于存储实际的数据块,每个碎片包含分片数据的一个子集。每个分片都可以作为副本集进行部署.
Config Server:
配置服务器存储群集的元数据和配置设置, 从MongoDB 3.4开始,必须将配置服务器部署为副本集(CSRS)
要求:
• Must have zero arbiters.
• Must have no delayed members.
• Must build indexes (i.e. no member should have buildIndexes setting set to false).
Router(mongos):
mongos作为查询路由器,提供客户端应用程序和分片集群之间的接口
在这里插入图片描述
测试环境可简化:
在这里插入图片描述
MongoDB在集合级别分割数据,将集合数据分布到集群中的分片上。

配置

目录准备(根目录D:\DataBase\MongoDB\Server)
d:
cd D:\DataBase\MongoDB\Server
mkdir HashedSharding\hs0-0\db &
mkdir HashedSharding\hs0-1\db &
mkdir HashedSharding\hs0-2\db&
mkdir HashedSharding\hs0-3\db &
mkdir HashedSharding\hs0-4\db &
mkdir HashedSharding\hs0-5\db &
mkdir HashedSharding\hs0-6\db
【Config Server :0、1、2 Shard :3、4 Routers 5、6】
配置 Config Server (3个 配置成为一个replica set)
D:\DataBase\MongoDB\Server\HashedSharding\hs0-0.conf
#where to write logging data.
systemLog:
destination: file
logAppend: true
path: D:\DataBase\MongoDB\Server\HashedSharding\mongodb-0.log
#Where and how to store data.
storage:
dbPath: D:\DataBase\MongoDB\Server\HashedSharding\hs0-0\db
journal:
enabled: true
#how the process runs
processManagement:
#fork: true # fork and run in background only for linux
pidFilePath: D:\DataBase\MongoDB\Server\HashedSharding\hs0-0\mongod.pid # location of pidfile

#network interfaces
net:
port: 37400
sharding:
clusterRole: configsvr
replication:
replSetName: hs0
D:\DataBase\MongoDB\Server\HashedSharding\hs0-1.conf
#where to write logging data.
systemLog:
destination: file
logAppend: true
path: D:\DataBase\MongoDB\Server\HashedSharding\mongodb-1.log
#Where and how to store data.
storage:
dbPath: D:\DataBase\MongoDB\Server\HashedSharding\hs0-1\db
journal:
enabled: true
#how the process runs
processManagement:
#fork: true # fork and run in background only for linux
pidFilePath: D:\DataBase\MongoDB\Server\HashedSharding\hs0-1\mongod.pid # location of pidfile

#network interfaces
net:
port: 37401
sharding:
clusterRole: configsvr
replication:
replSetName: hs0
D:\DataBase\MongoDB\Server\HashedSharding\hs0-2.conf
#where to write logging data.
systemLog:
destination: file
logAppend: true
path: D:\DataBase\MongoDB\Server\HashedSharding\mongodb-2.log
#Where and how to store data.
storage:
dbPath: D:\DataBase\MongoDB\Server\HashedSharding\hs0-2\db
journal:
enabled: true
#how the process runs
processManagement:
#fork: true # fork and run in background only for linux
pidFilePath: D:\DataBase\MongoDB\Server\HashedSharding\hs0-2\mongod.pid # location of pidfile

#network interfaces
net:
port: 37402
sharding:
clusterRole: configsvr
replication:
replSetName: hs0
启动
mongod --config D:\DataBase\MongoDB\Server\HashedSharding\hs0-0.conf
mongod --config D:\DataBase\MongoDB\Server\HashedSharding\hs0-1.conf
mongod --config D:\DataBase\MongoDB\Server\HashedSharding\hs0-2.conf
初始化
–连接任意一个节点
mongo 127.0.0.1:37400/37401/37402
rs.initiate(
{
_id: “hs0”,
configsvr: true,
members: [
{ _id : 0, host : “127.0.0.1:37400” },
{ _id : 1, host : “127.0.0.1:37401” },
{ _id : 2, host : “127.0.0.1:37402” }
]
}
)
配置 Shard (2个)
D:\DataBase\MongoDB\Server\HashedSharding\hs0-3.conf
#where to write logging data.
systemLog:
destination: file
logAppend: true
path: D:\DataBase\MongoDB\Server\HashedSharding\mongodb-3.log
#Where and how to store data.
storage:
dbPath: D:\DataBase\MongoDB\Server\HashedSharding\hs0-3\db
journal:
enabled: true
#how the process runs
processManagement:
#fork: true # fork and run in background only for linux
pidFilePath: D:\DataBase\MongoDB\Server\HashedSharding\hs0-3\mongod.pid # location of pidfile

#network interfaces
net:
port: 37501
sharding:
clusterRole: shardsvr
replication:
replSetName: hs0
D:\DataBase\MongoDB\Server\HashedSharding\hs0-4.conf
#where to write logging data.
systemLog:
destination: file
logAppend: true
path: D:\DataBase\MongoDB\Server\HashedSharding\mongodb-4.log
#Where and how to store data.
storage:
dbPath: D:\DataBase\MongoDB\Server\HashedSharding\hs0-4\db
journal:
enabled: true
#how the process runs
processManagement:
#fork: true # fork and run in background only for linux
pidFilePath: D:\DataBase\MongoDB\Server\HashedSharding\hs0-4\mongod.pid # location of pidfile

#network interfaces
net:
port: 37502
sharding:
clusterRole: shardsvr
replication:
replSetName: hs0
启动
mongod --config D:\DataBase\MongoDB\Server\HashedSharding\hs0-3.conf
mongod --config D:\DataBase\MongoDB\Server\HashedSharding\hs0-4.conf
初始化
–连接任意一个节点
mongo 127.0.0.1:37501/37502
rs.initiate(
{
_id : “hs0”,
members: [
{ _id : 0, host : “127.0.0.1:37501” },
{ _id : 1, host : “127.0.0.1:37502” }
]
}
)
配置 Router(mongos) (2个)
D:\DataBase\MongoDB\Server\HashedSharding\hs0-5.conf
#where to write logging data.
systemLog:
destination: file
logAppend: true
path: D:\DataBase\MongoDB\Server\HashedSharding\mongodb-5.log
#Where and how to store data.
#storage:
#dbPath: D:\DataBase\MongoDB\Server\HashedSharding\hs0-5\db
#journal:
#enabled: true
#how the process runs
processManagement:
#fork: true # fork and run in background only for linux
pidFilePath: D:\DataBase\MongoDB\Server\HashedSharding\hs0-5\mongod.pid # location of pidfile

#network interfaces
net:
port: 37601
sharding:
configDB: hs0/127.0.0.1:37400,127.0.0.1:37401,127.0.0.1:37402
D:\DataBase\MongoDB\Server\HashedSharding\hs0-6.conf
#where to write logging data.
systemLog:
destination: file
logAppend: true
path: D:\DataBase\MongoDB\Server\HashedSharding\mongodb-6.log
#Where and how to store data.
#storage:
#dbPath: D:\DataBase\MongoDB\Server\HashedSharding\hs0-6\db
#journal:
#enabled: true
#how the process runs
processManagement:
#fork: true # fork and run in background only for linux
pidFilePath: D:\DataBase\MongoDB\Server\HashedSharding\hs0-6\mongod.pid # location of pidfile

#network interfaces
net:
port: 37602
sharding:
configDB: hs0/127.0.0.1:37400,127.0.0.1:37401,127.0.0.1:37402
注意:
configDB: hs0 之前有个空格(去掉会报错)
启动
mongos --config D:\DataBase\MongoDB\Server\HashedSharding\hs0-5.conf
mongos --config D:\DataBase\MongoDB\Server\HashedSharding\hs0-6.conf
添加shards
–连接任意一个节点
mongo 127.0.0.1:37601/37602
–添加
sh.addShard( “hs0/127.0.0.1:37501”)
sh.addShard( “hs0/127.0.0.1:37502”)
–开启数据共享
sh.enableSharding(“test”)
–共享集合
Hashed Sharding
sh.shardCollection(".", { : “hashed” } )
Ranged Sharding
sh.shardCollection(".", { : } )

管理

在Config Server上
–连接任意一个节点

mongo 127.0.0.1:37400/37401/37402
use config
–查询群集中所有数据库的列表
db.databases.find()
–查看所有集合
show collections
–查看集群详情
db.printShardingStatus()
sh.status()
添加shared
– a shard for a replica set
sh.addShard( “rs1/mongodb0.example.net:27018” )
– a standalone mongod
sh.addShard( “mongodb0.example.net:27018” )
在Router(mongos):上
–查看所有Shard
db.adminCommand( { listShards: 1 } )

MongoDB Java

http://mongodb.github.io/mongo-java-driver/
查看版本./mongod --version

org.mongodb mongo-java-driver 3.4.3

参考:https://github.com/472732787/mongodb/tree/master/client

文中所涉及的代码和配置文件请移步github
https://github.com/472732787/mongodb

MongoDB Spring Boot

https://github.com/472732787/com-spring-multiple-datasource/tree/master/multiple-datasource-mongo

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值