Windows 版MongoDB 复制集Replica Set 配置

Windows 版MongoDB 复制集Replica Set 配置

环境

  • MongoDB 版本:4.0
  • 操作系统:Windows 10 (因为只有一台机器,所以会采用多实例来记录)
  • 三个节点结构如下图:

   

要求

1 个 Primary 节点,2 个 Secondary 节点,其中 1 个 Secondary 节点作为 Arbiter(仲裁) 节点。

三个节点的配置文件

primary

replSet = rs0

# 端口
port = 27017

# 日志
logpath = D:\Program Files\MongoDB\Server\replset\Primary\log\mongodb.log

# 数据库
dbpath = D:\Program Files\MongoDB\Server\replset\Primary\data

secondary-1

replSet = rs0

# 端口
port = 27018

# 日志
logpath = D:\Program Files\MongoDB\Server\replset\Secondary1\log\mongodb.log

# 数据库
dbpath = D:\Program Files\MongoDB\Server\replset\Secondary1\data

secondary-2 —— 作为仲裁(Arbiter)节点

replSet = rs0

# 端口
port = 27019

# 日志
logpath = D:\Program Files\MongoDB\Server\replset\Secondary2\log\mongodb.log

# 数据库
dbpath = D:\Program Files\MongoDB\Server\replset\Secondary2\data

其实三个配置文件除了端口号其他都一样。这里我选择了 29031 作为 Primary 节点 。

启动三个节点

分别进入三个 MongoDB 主程序的 bin 目录 然后对应分别执行下面的三句命令:

F:\replSet\primary\bin> mongod -f ../primary.ini
F:\replSet\secondary-1\bin> mongod -f ../secondary-1.ini
F:\replSet\secondary-2\bin> mongod -f ../secondary-2.ini 

配置 Primary 节点

config_rs0 = {_id : "rs0",members : [ { _id:0, host:"localhost:27017", priority:1 },{ _id:1, host:"localhost:27018", priority:1 },{ _id:2, host:"localhost:27019", priority:1, "arbiterOnly": true } ]}
rs.initiate(config_rs1)

进入 primary 节点的 bin 目录打开控制台通过命令:mongo --port 27017 连接到 primary 节点。分别执行以上两行命令。看到如下图信息表示配置成功:

注意事项

默认只可以从 primary 节点读写数据,secondary 节点不支持读写,在 secondary 节点执行 rs.slaveOk() 命令可让 secondary 节点支持读写。 

其他

  • 生产环境中应该还有一个仲裁节点,它不接受复制的数据。当 primary 节点出现问题(如:宕机)之后,它会从新选出一个 secondary 节点作为 primary 节点,以保证生产线不会出问题。原来的 primary 节点修复后将做为 secondary 节点存在。
  • 单机配置复制集时,MongoDB 添加仲裁节点时 host 不能用 localhost 这个主机名 ,否则会提示重复的主机名(Duplicate host names)错误。解决办法就是文章开头说的在 hosts 做个映射。

环境

  • MongoDB 版本:4.0
  • 操作系统:Windows 10 (因为只有一台机器,所以会采用多实例来记录)
  • 三个节点结构如下图:

   

要求

1 个 Primary 节点,2 个 Secondary 节点,其中 1 个 Secondary 节点作为 Arbiter(仲裁) 节点。

三个节点的配置文件

primary

replSet = rs0

# 端口
port = 27017

# 日志
logpath = D:\Program Files\MongoDB\Server\replset\Primary\log\mongodb.log

# 数据库
dbpath = D:\Program Files\MongoDB\Server\replset\Primary\data

secondary-1

replSet = rs0

# 端口
port = 27018

# 日志
logpath = D:\Program Files\MongoDB\Server\replset\Secondary1\log\mongodb.log

# 数据库
dbpath = D:\Program Files\MongoDB\Server\replset\Secondary1\data

secondary-2 —— 作为仲裁(Arbiter)节点

replSet = rs0

# 端口
port = 27019

# 日志
logpath = D:\Program Files\MongoDB\Server\replset\Secondary2\log\mongodb.log

# 数据库
dbpath = D:\Program Files\MongoDB\Server\replset\Secondary2\data

其实三个配置文件除了端口号其他都一样。这里我选择了 29031 作为 Primary 节点 。

启动三个节点

分别进入三个 MongoDB 主程序的 bin 目录 然后对应分别执行下面的三句命令:

F:\replSet\primary\bin> mongod -f ../primary.ini
F:\replSet\secondary-1\bin> mongod -f ../secondary-1.ini
F:\replSet\secondary-2\bin> mongod -f ../secondary-2.ini 

配置 Primary 节点

config_rs0 = {_id : "rs0",members : [ { _id:0, host:"localhost:27017", priority:1 },{ _id:1, host:"localhost:27018", priority:1 },{ _id:2, host:"localhost:27019", priority:1, "arbiterOnly": true } ]}
rs.initiate(config_rs1)

进入 primary 节点的 bin 目录打开控制台通过命令:mongo --port 27017 连接到 primary 节点。分别执行以上两行命令。看到如下图信息表示配置成功:

注意事项

默认只可以从 primary 节点读写数据,secondary 节点不支持读写,在 secondary 节点执行 rs.slaveOk() 命令可让 secondary 节点支持读写。 

其他

  • 生产环境中应该还有一个仲裁节点,它不接受复制的数据。当 primary 节点出现问题(如:宕机)之后,它会从新选出一个 secondary 节点作为 primary 节点,以保证生产线不会出问题。原来的 primary 节点修复后将做为 secondary 节点存在。
  • 单机配置复制集时,MongoDB 添加仲裁节点时 host 不能用 localhost 这个主机名 ,否则会提示重复的主机名(Duplicate host names)错误。解决办法就是文章开头说的在 hosts 做个映射。

猜你喜欢

转载自www.cnblogs.com/chuizilong/p/10317874.html