首页 > 数据库 > > MongoDB复制集安装配置图文教程-Windows篇
Mongodb复制集由一组Mongod实例(进程)组成,包含一个Primary节点和多个Secondary节点,Mongodb Driver(客户端)的所有数据都写入Primary,Secondary从Primary同步写入的数据,以保持复制集内所有成员存储相同的数据集,提供数据的高可用。
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)为例,详细说一下安装配置流程。

到 官网下载最新版本,https://www.mongodb.com/download-center/community
当前的最新版本是 4.2.3:
安装版:https://fastdl.mongodb.org/win32/mongodb-win32-x86_64-2012plus-4.2.3-signed.msi
压缩包:https://fastdl.mongodb.org/win32/mongodb-win32-x86_64-2012plus-4.2.3.zip
建议下载压缩包,直接解压到目标路径即可,本文示例解压到
E:\Soft\MongoDB\mongodb-4.2.3


打开命令提示符窗口,进入 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 = rs0secondary.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 = rs0arbiter.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 控制台
mongo --port 27771运行 rs.status() 查看分片集状态

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

再次运行 rs.status()

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