目录
MongoDB – 下载、安装、配置 及 副本集配置
启动命令
启动 mongodb 服务器 和 客户端 总结:
启动 mongodb 的服务器(单机和副本集)
启动单机模式的 mongodb 服务器
打开命令行窗口,执行如下命令即可启动 MongoDB 服务器了
mongod.exe --config "E:\install\mongodb\mongodb-4.2.25\mongod.conf"
就是只启动一个 mongodb 的服务器
启动副本集的 3 个副本节点(mongodb 服务器)
节点1:端口号:27017
mongod.exe --config "E:\install\mongodb\mongodb-4.2.25\replic\mongod_1.conf"
节点2:端口号:27018
mongod.exe --config "E:\install\mongodb\mongodb-4.2.25\replic\mongod_2.conf"
节点3:端口号:27019
mongod.exe --config "E:\install\mongodb\mongodb-4.2.25\replic\mongod_3.conf"
启动成功,如图
启动 mongodb 的客户端
打开命令行窗口,输入命令:
mongo
即可启动 mongodb 的客户端
启动成功,如图:
之所以只需要输入 mongo 就能启动 mongodb 的客户端,是因为我之前把 mongodb 的 bin 目录添加到 path 环境变量里面 。
MongoDB 下载
登录官网下载MongoDB的zip压缩包,并将压缩包解压到任意路径下。
点击产品,我这里选择社区版
我下载的版本是4.2.25,选择 zip 的压缩包进行下载。
MongoDB 安装
1、解压
把压缩包解压到这里,文件夹名字太长可以改短一点
解压后只有一个bin目录和一些授权文档
bin目录下包含了MongoDB数据库的两个重要命令:
mongod.exe(服务器端程序) 类似于redis.exe
mongo.exe(客户端程序)。 类似 redis-cli.exe
2、配置环境变量
建议将MongoDB安装目录下bin路径添加到系统PATH环境变量中。
方便操作系统能找到mongdb\bin目录下的命令
3、创建 mongod.conf 配置文件
运行 mongod.exe(服务端)需要指定大量选项,比如数据存储路径、日志存储路径等, 最简单的方式就是在运行 mongod.exe 命令时直接指定这些选项。 例如执行如下命令: mongod.exe --dbpath=..\data 更好的方式是用 --config 选项来指定配置文件 (安装目录下有一个mongod.conf 配置文件 ,这个版本没有就自己创建一个), 通过配置文件可指定更多选项。 配置文件中所指定数据目录、日志目录,都需要由开发人员自行先创建。
因为这个版本的安装目录下没有 mongod.conf 配置文件 ,所以就自己创建一个。
创建 mongod.conf 配置文件
添加配置信息
根据自己创建的配置文件,创建文件夹
# mongod.conf # 配置与存储有关的信息 storage: dbPath: E:\install\mongodb\mongodb-4.2.25\data\db journal: enabled: true # 指定与日志有关的信息,把日志输出到file文件夹 systemLog: destination: file quiet: true logAppend: false path: E:\install\mongodb\mongodb-4.2.25\logs\mongod.log #配置与网络有关的信息, mongodb 默认端口 27017 net: port: 27017 bindIp: 0.0.0.0
4、启动 MongoDB 服务器
方式1:命令启动
打开命令行窗口,执行如下命令即可启动 MongoDB 服务器了
mongod.exe --config "E:\install\mongodb\mongodb-4.2.25\mongod.conf"
我在启动这个命令时遇到的问题:
命令行启动mongodb服务器的问题及解决方案 – Unrecognized option: storage.journal
命令行启动 mongodb 服务器的问题及解决方案:Error parsing YAML config file: yaml-cpp: errorxxx: illegal map value
如图:启动成功
可以通过查看刚刚创建的 data 数据文件夹和 logs 日志文件夹是否有初始数据,我这里有出现,表明启动 mongodb 成功。
通过上面的命令,可以启动 mongodb 服务器,但是每次使用 mongodb 这个数据库的话,都需要打开命令行窗口,执行这个命令来启动,就比较麻烦。
如图:服务里面没有 mongodb 这个服务
方式2:将 MongoDB 注册成 Windows 服务器
为了方便,我们可以以管理员的身份来执行如下命令可将 MongoDB 注册成 Windows 服务器
mongod.exe --config "E:\install\mongodb\mongodb-4.2.25\mongod.conf" --install
比上面的启动命令多了 --install
需要以管理员的身份来打开命令行窗口:
输入命令:
成功将 mongodb 注册成 Windows 服务器
直接启动,让它运行,就不用每次使用 mongodb 数据库时,都得用命令来启动 mongodb 服务器,直接让 mongodb 这个数据库在电脑开机后就运行。
MongoDB 副本集节点介绍
MongoDB 副本集中节点可分为三类:
主节点(Primary):接收所有的写请求,并将所有修改同步到所有副节点(Secondary)。
副节点(Secondary):与主节点保持相同的数据集。 当主节点宕机的时候,其中之一会被选为Primary节点。
仲裁节点(Arbiter):仲裁节点不保存数据,也不可能被选为Primary节点,它的作用就是负责选择主节点。仲裁节点对硬件资源要求很低,通常建议与主、副节点保存在不同机器上。
一个节点就是一个 mongodb 服务器
MongoDB 副本集 配置
接下来要演示在同一个电脑弄3个 mongodb 的副本节点。
如图,先把上面演示的注册成windows服务的那个mongodb的服务停掉
1、添加不同节点的配置文件
要在同一台机器上运行多个MongoDB服务,只要用不同的 mongod.conf 配置文件、将 MongoDB 配置为监听不同端口即可。
(如果要将它们都添加成Windows服务,那就要为它们指定不同的服务名和显示名)
副本集模式的配置文件应在后面添加如下配置(同一个副本集的所有节点应使用相同副本集名称):
这里设置的 rs 就是副本集的名称
replication: replSetName: rs
1、先弄一个副本集,如图,创建一个replic文件夹,专门用来保存副本集模式的配置文件
2、把 congod.conf 配置文件拷贝一份到 replic 这个文件夹里面,修改配置文件的名字和内容,让其作为一个副本节点
3、因为我现在要弄三个节点(一个主节点、一个副节点,一个仲裁节点)来演示,所以把配置文件拷贝成3份,内容修改。
如图:
1、把 mongod.conf 配置文件拷贝三份,放到这个 replic 文件夹里面
2、每个节点的 mongod.conf 配置文件,都修改对应的data数据存储文件夹和log日志存储文件夹并创建出来。
3、然后每个节点都设置不同的端口号
4、显式指定我们绑定的这个主机的ip地址
这样就成功搞出3个副本节点出来了,然后这三个副本几点属于一个副本集,这个副本集叫:rs
2、启动 3 个副本节点(mongodb 服务器)
每个节点启动的命令不同,需要指定各自节点对应的 mongod_x.conf 配置文件
启动 3 个副本节点,也就是启动 3 个 mongodb 服务器。
节点1:端口号:27017
mongod.exe --config "E:\install\mongodb\mongodb-4.2.25\replic\mongod_1.conf"
节点2:端口号:27018
mongod.exe --config "E:\install\mongodb\mongodb-4.2.25\replic\mongod_2.conf"
节点3:端口号:27019
mongod.exe --config "E:\install\mongodb\mongodb-4.2.25\replic\mongod_3.conf"
启动节点成功,如图:
3、启动 mongodb 的客户端
打开命令行窗口,输入命令:
mongo
即可启动 mongodb 的客户端
4、使用 mongodb 客户端定义副本集的信息
上面启动了mongodb 的客户端之后,接下来就来定义副本集的信息。
使用 MongoDB 客户端执行如下命令:
定义副本集的配置:
rs_conf={ _id:"rs", members:[ {_id:0, host:'192.168.0.107:27017',priority:1}, {_id:1, host:'192.168.0.107:27018',priority:2}, {_id:2, host:'192.168.0.107:27019',arbiterOnly:true} ] }
如图:
在 MongoDB 中,rs 对象代表了副本集(Replica Set),在这里可以理解为定义了一个配置对象,
rs_conf 定义的配置对象指定了副本集的名称为:rs;
且指定该副本集包含3个节点:它们位于同一个主机上(192.168.0.107),只不过在不同的端口监听;
其中位于27019端口的节点是仲裁节点,它负责选举主节点
5、初始化副本集
继续在 mongodb 客户端初始化副本集,命令如下:
rs.initiate(rs_conf)
如图:{ “ok” : 1 } 则表示初始化成功
如图:secondary 表示当前启动的节点是副节点
再打开一个命令行窗口,启动 mongodb 客户端,同时指定一个节点端口号(mongodb 服务器)
输入命令:
mongo --port 27018
启动 27018 这个节点的客户端,可以看出此时这个节点是主节点。
(就是这个【客户端】是来操作 27018 这个节点【服务器】的)
如图:
至于 27017 和 27018 这个两个节点,谁是主节点,谁是副节点,我们是决定不了的。
这个是由 27019 这个仲裁节点决定的。
至此,mongodb 的副本集配置成功
查看副本集信息
可执行如下命令来查看副本集的相关信息:
命令在 主节点 或 副节点 查询都可以
rs.conf() :查看副本集的配置。
rs.status() :查看副本集的状态,可看到副本集内谁是主节点,谁是副节点,谁是仲裁节点等详细信息。
db.isMaster() :查看当前连接是否为主节点。
如果客户端当前连接到是副节点,可执行如下命令:
rs.slaveOk(boolean) :该命令设置副节点上是否可查看数据。默认状态下,副节点不允许查看数据。
副节点不允许写数据,除非它变成主节点。现在已经变成了secondaryOk()。
rs.conf() :查看副本集的配置
db.isMaster() :查看当前连接是否为主节点
rs.status() :查看副本集的状态
可看到副本集内谁是主节点,谁是副节点,谁是仲裁节点等详细信息。
rs.secondaryOk(true) :设置副节点可读取数据
如果客户端当前连接到是副节点,可执行如下命令: rs.secondaryOk(boolean)
该命令设置副节点上是否可查看数据。
默认状态下,副节点不允许查看数据。
副节点不允许写数据,除非它变成主节点。
如图:在副节点的命令行窗口,输入这个命令。
输入 :
rs.secondaryOk(true)
设置为true,表示让副节点可以查看读取数据