ITPub博客

首页 > 数据库 > > MongoDB复制集安装配置图文教程-Windows篇

MongoDB复制集安装配置图文教程-Windows篇

作者:浪花小雨滴 时间:2020-05-12 11:13:50 0 删除 编辑

Mongodb复制集由一组Mongod实例(进程)组成,包含一个Primary节点和多个Secondary节点,Mongodb Driver(客户端)的所有数据都写入Primary,Secondary从Primary同步写入的数据,以保持复制集内所有成员存储相同的数据集,提供数据的高可用。

MongoDB复制集特点

1、主节点是唯一的,但不是固定的

整个复制集中只有一个主节点,其余为从节点或选举节点,但是因为MongoDB具有自动容灾的功能,所以当唯一的主节点发生宕机时会从从节点的Priority参数不为0当中选举一个为主节点,所以说主是唯一的,但不是固定的。

2、由大多数据原则保证数据的一致性

即MongoDB复制集内投票成员(参数Vote不为0的其他成员具有选举权,在2.6版本后不能设置Vote大于1,即只能投票一次)数量为N,则大多数为 N/2 + 1,当复制集内存活成员数量不足大多数时,整个复制集将无法选举出Primary,复制集将无法提供写服务,处于只读状态。通常建议将复制集成员数量设置为奇数。

3、从库无法写入

MongoDB复制集中只有主节点可以Writes,主节点和从节点可以Read。

4、相对于传统的主从结构,复制集可以自动容灾

即当某个主节点宕机后会自动从从节点(Priority大于0的从节点)中选举出一个作为新的主节点,而某个从节点宕机后能继续正常工作。

复制集节点介绍

MongoDB按功能可分为主节点、从节点(隐藏节点、延时节点、“投票”节点)和选举节点。

节点名 说明

主节点(Primary) 可以提供读Writes/Read的节点,整个复制集中只有一个主节点。

隐藏节点(Hidden) 提供Read并对程序不可见的节点。

延时节点(Delayed) 提供Read并能够延时复制的节点。

投票节点(Priority) 提供Read并具有投票权的节点。

选举节点(Arbiter) Arbiter节点,无数据,仅作选举和充当复制集成员。又成为投票节点。


Primary节点:

复制集通过replSetInitiate命令(或mongo shell的rs.initiate())进行初始化,初始化后各个成员间开始发送心跳消息,并发起Priamry选举操作,获得『大多数』成员投票支持的节点,会成为Primary,其余节点成为Secondary。

Secondary节点:

正常情况下,复制集的Seconary会参与Primary选举(自身也可能会被选为Primary),并从Primary同步最新写入的数据,以保证与Primary存储相同的数据。Secondary可以提供读服务,增加Secondary节点可以提供复制集的读服务能力,同时提升复制集的可用性。另外,Mongodb支持对复制集的Secondary节点进行灵活的配置,以适应多种场景的需求。

Arbiter节点:

Arbiter节点只参与投票,不能被选为Primary,并且不从Primary同步数据。比如你部署了一个2个节点的复制集,1个Primary,1个Secondary,任意节点宕机,复制集将不能提供服务了(无法选出Primary),这时可以给复制集添加一个Arbiter节点,即使有节点宕机,仍能选出Primary。Arbiter本身不存储数据,是非常轻量级的服务,当复制集成员为偶数时,最好加入一个Arbiter节点,以提升复制集可用性。

Priority节点:

默认为1,Priority参数设置范围在0-1000的整数值。Priority0节点的选举优先级为0,永远不会被选举为Primary。

Vote节点:

Vote默认为1,Vote参数的值在2.6版本后只能设置为0或1。Mongodb 3.0里,复制集成员最多50个,参与Primary选举投票的成员最多7个,其他成员的vote属性必须设置为0,即不参与投票。Vote设置为0时永远没有投票权。

Hidden节点:

Hidden节点不能被选为主(因为Priority为0),并且对Driver不可见。因Hidden节点不会接受Driver的请求,可使用Hidden节点做一些数据备份、离线计算的任务,不会影响复制集的服务。

Delayed节点:

delayed的配置受到opolg的影响。Delayed节点必须是Hidden节点,并且其数据落后与Primary一段时间(可配置,比如1个小时)。因Delayed节点的数据比Primary落后一段时间,当错误或者无效的数据写入Primary时,可通过Delayed节点的数据来恢复到之前的时间点。


更详细的技术不多说了,需要的自行去深入了解,下面以最常用的1主节点(Primary)、1从节点(Secondary)、1仲裁者(Arbiter)为例,详细说一下安装配置流程。


MongoDB 复制集 示意图


一、安装 MongoDB

到 官网下载最新版本,mongodb.com/download-ce

当前的最新版本是 4.2.3:

安装版:fastdl.mongodb.org/win3

压缩包:fastdl.mongodb.org/win3

建议下载压缩包,直接解压到目标路径即可,本文示例解压到

E:\Soft\MongoDB\mongodb-4.2.3

默认只有 bin 一个目录,新建一个 conf 目录 用于存放配置文件,一个 key 目录 用于存放 keyfile


把 bin 目录添加入系统变量 Path 里,以方便在任何地方执行操作

二、生成 keyfile

打开命令提示符窗口,进入 key目录,执行以下命令:

openssl rand -base64 756 > rs0.key

即在 key目录中生成了 rs0.key 文件,如果提示 openssl 不是内部命令或外部命令,请先自行下载 openssl

三、创建配置文件

在 conf 目录中新建 3个 conf 文件,分别命名为:primary.conf、secondary.conf、arbiter.conf

primary.conf 文件内容

# 数据库路径
dbpath = E:\Soft\Database\MongoDB\data\rs0\primary

# 日志输出文件路径
logpath = E:\Soft\Database\MongoDB\log\primary.log

# 错误日志采用追加模式 
logappend = on

# 启用日志文件,默认启用
journal = true

# 过滤无用日志信息,如需调试设置为false  
quiet = on

# 每个db放到不同的目录
directoryperdb = true

# 服务名称
serviceName = MongoDB_Primary
serviceDisplayName = MongoDB Primary
serviceDescription = MongoDB 主节点 端口:27771

#绑定ip地址
bind_ip = 127.0.0.1

# 端口号 默认为27017
port = 27771

# security
keyFile = E:\Soft\MongoDB\mongodb-4.2.3\key\rs0.key

#复制集名称
replSet = rs0

secondary.conf 文件内容

# 数据库路径
dbpath = E:\Soft\Database\MongoDB\data\rs0\secondary

# 日志输出文件路径
logpath = E:\Soft\Database\MongoDB\log\secondary.log

# 错误日志采用追加模式 
logappend = on

# 启用日志文件,默认启用
journal = true

# 过滤无用日志信息,如需调试设置为false  
quiet = on

# 每个db放到不同的目录
directoryperdb = true

# 服务名称
serviceName = MongoDB_Secondary
serviceDisplayName = MongoDB Secondary
serviceDescription = MongoDB 副节点 端口:27772

#绑定ip地址
bind_ip = 127.0.0.1

# 端口号 默认为27017
port = 27772

# security
keyFile = E:\Soft\MongoDB\mongodb-4.2.3\key\rs0.key

#复制集名称
replSet = rs0

arbiter.conf 文件内容

# 数据库路径
dbpath = E:\Soft\Database\MongoDB\data\rs0\arbiter

# 日志输出文件路径
logpath = E:\Soft\Database\MongoDB\log\arbiter.log

# 错误日志采用追加模式 
logappend = on

# 启用日志文件,默认启用
journal = true

# 过滤无用日志信息,如需调试设置为false  
quiet = on

# 每个db放到不同的目录
directoryperdb = true

# 服务名称
serviceName = MongoDB_Arbiter
serviceDisplayName = MongoDB Arbiter
serviceDescription = MongoDB 仲裁器 端口:27770

#绑定ip地址
bind_ip = 127.0.0.1

# 端口号 默认为27017
port = 27770

# security
keyFile = E:\Soft\MongoDB\mongodb-4.2.3\key\rs0.key

#复制集名称
replSet = rs0

要创建好,配置文件中指定的 数据目录 与 日志目录

E:\Soft\Database\MongoDB\data\rs0\primary
E:\Soft\Database\MongoDB\data\rs0\secondary
E:\Soft\Database\MongoDB\data\rs0\arbiter
E:\Soft\Database\MongoDB\log

四、安装服务

在命令行窗口分别执行以下三行命令,用于创建不同端口的三个MongoDB服务

mongod -f "E:\Soft\MongoDB\mongodb-4.2.3\conf\primary.conf" --install
mongod -f "E:\Soft\MongoDB\mongodb-4.2.3\conf\secondary.conf" --install
mongod -f "E:\Soft\MongoDB\mongodb-4.2.3\conf\arbiter.conf" --install

打开 系统 服务 可以查看到,已经添加了 以下三个服务

将以上三个服务全部启动,然后打开命令提示符,用以下命令进入 MongoDB 控制台

mongo --port 27771

在控制台,执行以下命令

config = {
	"_id" : "rs0",
	"members": [
		{ "_id" : 0, "host" : "127.0.0.1:27770", "arbiterOnly" : true },
		{ "_id" : 1, "host" : "127.0.0.1:27771" },
		{ "_id" : 2, "host" : "127.0.0.1:27772" }
	]
}
rs.initiate(config)

看到类似以下提示,说明创建成功

五、创建用户

首先要创建一个 root 权限的超级用户,用于全局管理,使用以下命令创建

use admin
db.createUser(
    { 
        user: 'root', 
        pwd: '123456', 
        roles:[ { role: 'root',  db: 'admin' } ]
    }
)

以后使用中,可以按数据库创建相应的用户,这里不再赘述

六、验证成果

建议重新启动一下电脑,以验证服务的自启动,电脑启动完成后,打开任务管理器查看服务

MongoDB三个服务正在运行

打开命令提示符,运行以下命令进入 MongoDB 控制台

mongo --port 27771

运行 rs.status() 查看分片集状态

提示要求权限

用之前创建的超级用户登录

提示 1 表示登录成功

再次运行 rs.status()


恭喜,你已经成功了!


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31537575/viewspace-3137188/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2018-05-16

  • 博文量
    4259
  • 访问量
    39985