文章目录

  • 1.下载MongoDB
  • 2.集群描述
  • 3.构建集群文件目录
  • 4.新建配置文件
  • 5.启动MongoDB服务
  • 6.配置集群
  • 7.集群测试
  • 8.设置密码和开启认证

1.下载MongoDB

去MongoDB官网下载解压版免安装的压缩包,https://www.mongodb.com/try/download/community:

2.集群描述

在同一台Windows机上安装三个MongoDB实例,1主(27018),1从(27019),1裁决(27020)。MongoDB版本为4.4.6,4.x支持事务,要求是在集群模式下。

3.构建集群文件目录

在自己喜欢的地方创建三个目录:masterslaverarbiter,每个目录下再分别创建data目录和log目录,目录结构如下:

D:\MongoDB\Cluster.
├─arbiter
│  ├─data
│  └─log
├─master
│  ├─data
│  └─log
└─slaver├─data└─log

4.新建配置文件

分别在上述的三个目录中(即与data和log同级目录下)创建mongod.config配置文件,配置内容分别为:

master下的mongod.config

# 设置数据文件的存放目录
dbpath = D:\MongoDB\Cluster\master\data
# 设置日志文件的存放目录
logpath = D:\MongoDB\Cluster\master\log\mongod.log
# 设置端口号
port = 27018
# 绑定IP,使其可以外网访问
#bind_ip = 0.0.0.0
# 权限启用验证
#auth = true
# keyFile
#keyFile = D:\MongoDB\Cluster\keyFile.file
# 集群名称
replSet = winrs
#是否以追加的方式记录日志
logappend=true

slaver下的mongod.config

# 设置数据文件的存放目录
dbpath = D:\MongoDB\Cluster\slaver\data
# 设置日志文件的存放目录
logpath = D:\MongoDB\Cluster\slaver\log\mongod.log
# 设置端口号
port = 27019
# 绑定IP,使其可以外网访问
#bind_ip = 0.0.0.0
# 权限启用验证
#auth = true
# keyFile
#keyFile = D:\MongoDB\Cluster\keyFile.file
# 集群名称
replSet = winrs
#是否以追加的方式记录日志
logappend=true

arbiter下的mongod.config

# 设置数据文件的存放目录
dbpath = D:\MongoDB\Cluster\arbiter\data
# 设置日志文件的存放目录
logpath = D:\MongoDB\Cluster\arbiter\log\mongod.log
# 设置端口号
port = 27020
# 绑定IP,使其可以外网访问
#bind_ip = 0.0.0.0
# 权限启用验证
#auth = true
# keyFile
#keyFile = D:\MongoDB\Cluster\keyFile.file
# 集群名称
replSet = winrs
#是否以追加的方式记录日志
logappend=true

5.启动MongoDB服务

进入上述第一步下载的MongoDB解压包下的bin目录,分别开三个cmd命令行窗口,依次开启三个服务:

mongod --config D:\MongoDB\Cluster\master\mongod.config
mongod --config D:\MongoDB\Cluster\slaver\mongod.config
mongod --config D:\MongoDB\Cluster\arbiter\mongod.config

6.配置集群

mongod命令是服务端的程序,mongo是客户端程序,继续在bin目录下开一个cmd,连接上上述启动的任意一台实例MongoDB服务器:

mongo --host 127.0.0.1 --port 27018

初始化集群:

rs.initiate({_id:"winrs", members:[{_id:0,host:'127.0.0.1:27018',priority:1}, {_id:1,host:'127.0.0.1:27019',priority:1},{_id:2,host:'127.0.0.1:27020',arbiterOnly:true}]});


至此,集群配置成功。可以查看下集群的状态:

rs.status()

输出结果如下,可以从members中的stateStr字段看到三台实例的角色:

winrs:PRIMARY> rs.status()
{"set" : "winrs","date" : ISODate("2021-07-13T15:57:56.533Z"),"myState" : 1,"term" : NumberLong(1),"syncSourceHost" : "","syncSourceId" : -1,"heartbeatIntervalMillis" : NumberLong(2000),"majorityVoteCount" : 2,"writeMajorityCount" : 2,"votingMembersCount" : 3,"writableVotingMembersCount" : 2,"optimes" : {"lastCommittedOpTime" : {"ts" : Timestamp(1626191872, 1),"t" : NumberLong(1)},"lastCommittedWallTime" : ISODate("2021-07-13T15:57:52.012Z"),"readConcernMajorityOpTime" : {"ts" : Timestamp(1626191872, 1),"t" : NumberLong(1)},"readConcernMajorityWallTime" : ISODate("2021-07-13T15:57:52.012Z"),"appliedOpTime" : {"ts" : Timestamp(1626191872, 1),"t" : NumberLong(1)},"durableOpTime" : {"ts" : Timestamp(1626191872, 1),"t" : NumberLong(1)},"lastAppliedWallTime" : ISODate("2021-07-13T15:57:52.012Z"),"lastDurableWallTime" : ISODate("2021-07-13T15:57:52.012Z")},"lastStableRecoveryTimestamp" : Timestamp(1626191821, 1),"electionCandidateMetrics" : {"lastElectionReason" : "electionTimeout","lastElectionDate" : ISODate("2021-07-13T15:22:01.636Z"),"electionTerm" : NumberLong(1),"lastCommittedOpTimeAtElection" : {"ts" : Timestamp(0, 0),"t" : NumberLong(-1)},"lastSeenOpTimeAtElection" : {"ts" : Timestamp(1626189710, 1),"t" : NumberLong(-1)},"numVotesNeeded" : 2,"priorityAtElection" : 1,"electionTimeoutMillis" : NumberLong(10000),"numCatchUpOps" : NumberLong(0),"newTermStartDate" : ISODate("2021-07-13T15:22:01.678Z"),"wMajorityWriteAvailabilityDate" : ISODate("2021-07-13T15:22:02.617Z")},"members" : [{"_id" : 0,"name" : "127.0.0.1:27018","health" : 1,"state" : 1,"stateStr" : "PRIMARY","uptime" : 2235,"optime" : {"ts" : Timestamp(1626191872, 1),"t" : NumberLong(1)},"optimeDate" : ISODate("2021-07-13T15:57:52Z"),"syncSourceHost" : "","syncSourceId" : -1,"infoMessage" : "","electionTime" : Timestamp(1626189721, 1),"electionDate" : ISODate("2021-07-13T15:22:01Z"),"configVersion" : 1,"configTerm" : 1,"self" : true,"lastHeartbeatMessage" : ""},{"_id" : 1,"name" : "127.0.0.1:27019","health" : 1,"state" : 2,"stateStr" : "SECONDARY","uptime" : 2165,"optime" : {"ts" : Timestamp(1626191872, 1),"t" : NumberLong(1)},"optimeDurable" : {"ts" : Timestamp(1626191872, 1),"t" : NumberLong(1)},"optimeDate" : ISODate("2021-07-13T15:57:52Z"),"optimeDurableDate" : ISODate("2021-07-13T15:57:52Z"),"lastHeartbeat" : ISODate("2021-07-13T15:57:55.381Z"),"lastHeartbeatRecv" : ISODate("2021-07-13T15:57:56.460Z"),"pingMs" : NumberLong(0),"lastHeartbeatMessage" : "","syncSourceHost" : "127.0.0.1:27018","syncSourceId" : 0,"infoMessage" : "","configVersion" : 1,"configTerm" : 1},{"_id" : 2,"name" : "127.0.0.1:27020","health" : 1,"state" : 7,"stateStr" : "ARBITER","uptime" : 2165,"lastHeartbeat" : ISODate("2021-07-13T15:57:55.355Z"),"lastHeartbeatRecv" : ISODate("2021-07-13T15:57:55.178Z"),"pingMs" : NumberLong(0),"lastHeartbeatMessage" : "","syncSourceHost" : "","syncSourceId" : -1,"infoMessage" : "","configVersion" : 1,"configTerm" : 1}],"ok" : 1,"$clusterTime" : {"clusterTime" : Timestamp(1626191872, 1),"signature" : {"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),"keyId" : NumberLong(0)}},"operationTime" : Timestamp(1626191872, 1)
}

7.集群测试

集群搭建成功后,你可以用Robo 3T或者其他可视化管理工具连接上刚才配置的服务器,当然主要是master和slaver,在master主服务中创建库和添加数据后,会发现从服务slaver数据会对master的数据进行同步;当关闭主服务器时,会重新推举出之前的slaver作为主服务器,改变数据后,重启master,数据仍然会同步到master,此时master作为从服务。

8.设置密码和开启认证

MongoDB默认是没有开启用户认证的,也就是说游客也拥有超级管理员的权限。除非你在默认的admin数据库中使用db.createUser()命令添加了管理员帐号,且使用--auth参数启动mongod,否则在数据库中任何人都可以无需认证执行所有命令。这将带来安全隐患!

更多关于角色和权限等描述请参考我的另一篇博文:Windwos下MongoDB4.x安装配置及密码设置

添加一个超级管理员, 然后使用db.auth认证:

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


设置好管理员账号后,会同步到从服务,最后需要以开启auth的形式重启三个服务。并且上述的三个主、从、裁决三个服务都是通过命令行窗口启动的,命令行关了服务也就关了,所以我们还可以添加--install参数将服务注册安装到Wndows服务中,开机启动。

将上述三个配置文件中的authkeyFile配置注解打开(删掉#auth = true前面的#keyFile同理),这里需要注意的是需要下载OpenSSL,生成一下keyFile文件。

OpenSSL请直接前往官方下载:https://slproweb.com/products/Win32OpenSSL.html:

然后进入OpenSSL的bin目录下,执行生成keyFile的命令:

openssl rand -base64 666 > D:\MongoDB\Cluster\keyFile.file

然后分别携带--install参数再执行一遍,启动和注册服务:

mongod --config D:\MongoDB\Cluster\master\mongod.config --serviceName "MongoDB Master" --serviceDisplayName "MongoDB Master" --installmongod --config D:\MongoDB\Cluster\slaver\mongod.config --serviceName "MongoDB Slaver" --serviceDisplayName "MongoDB Slaver" --installmongod --config D:\MongoDB\Cluster\arbiter\mongod.config --serviceName "MongoDB Arbiter" --serviceDisplayName "MongoDB Arbiter" --install

最后再启动服务:

net start "MongoDB Master"
net start "MongoDB Slaver"
net start "MongoDB Arbiter"


Windwos下搭建MongoDB集群相关推荐

  1. 【超详细】手把手教你搭建MongoDB集群搭建

    MongoDB集群搭建 MongoDB集群简介 mongodb 集群搭建的方式有三种: 主从备份(Master - Slave)模式,或者叫主从复制模式. 副本集(Replica Set)模式 分片( ...

  2. 在windows环境下配置mongoDB集群

    在windows环境下配置mongoDB集群 mongodb官网 官网分片文档 首先感谢这次参考的文章: mongodb搭建高可用分片集群示例-天才卧龙 MongoDB高可用集群搭建示例-lizh 配 ...

  3. 在Linux上如何快速搭建MongoDB集群

    搭建MongoDB集群的一个小妙招,教你快速搭建MonggoDB集群. 一.首先确认你的集群信息 三台机器的配置服务(27018)形成复制集,分片1.2.3也在各机器都部署一个实例,它们之间形成复制集 ...

  4. 搭建mongodb集群(副本集+分片)

    完整的搭建mongodb集群(副本集+分片)的样例... 准备四台机器,各自是bluejoe1,bluejoe2,bluejoe3,以及bluejoe0 副本集及分片策略确定例如以下: 将创建3个副本 ...

  5. Redis集群搭建(转自一菲聪天的“Windows下搭建Redis集群”)

    配置Redis参考:http://blog.csdn.net/zsg88/article/details/73715947 使用Ruby配置集群参考:https://www.cnblogs.com/t ...

  6. ubuntu下搭建redis集群

    前言 ubuntu下搭建redis集群步骤 步骤 准备工作 redis的集群管理工具依赖于ruby,先安装 sudo apt-get install ruby 上传redis和ruby的接口配置文件 ...

  7. Windows下搭建Tomcat集群的配置详解

    < Windows下搭建Tomcat集群基础入门详解 > 前言 在搭建 < Apache + Tomcat 实现Web服务器集群 > 前我们还需要实现 Tomcat集群实现Se ...

  8. linux下搭建zookeeper集群

    linux下搭建zookeeper集群 1.准备 1.下载zookeeper压缩包 (注:下载3.4.14版本,3.5以上运行时会少jar包) 2.系统:centOS7 安装好java环境 3.将压缩 ...

  9. windows下搭建mysql集群_Windows下搭建MySQL集群

    本文将讨论在Windows下搭建MySQL集群的步骤和搭建过程中应当注意的问题. 由于机器数量和性能有限,搭建环境为一台宿主机(IP:10.200.178.191),一台虚拟机(IP:10.200.1 ...

最新文章

  1. html 甘特图_甘特图怎么画?甘特图基础教程,小白快速入门简单易懂
  2. expdp oracle 并行_oracle 11g逻辑备份介绍-expdp/impdp
  3. 谁是李党生?带领中国本土期刊登上国际C位,施一公说他眼光很毒辣
  4. android cmd adb命令安装和删除apk应用
  5. poj3671Dining Cows(DP)
  6. kubernetes学习笔记 (二):k8s初体验
  7. CodeForces - 1287B Hyperset(暴力水题)
  8. 三包围结构的字是什么样的_拼音带kun的字大全_50个拼音含kun的字组词
  9. 微内核和宏内核的区别(短小、精悍)
  10. 产品经理学SQL(二)
  11. 我们想赚钱,首先要帮助我们的团队,让他们提升能力让他们赚到钱
  12. Vue:开发者友好性和易用性
  13. 对象列表Python概述:C++程序员眼中的Python
  14. docker 关闭所有容器_软件安全 : Docker逃逸详解
  15. 批量裁剪或延伸的lisp程序_10 行 Python 代码,批量压缩图片 500 张,简直太强大了...
  16. 火狐浏览器_全球知名度非常高的火狐浏览器,它好在哪呢?
  17. 蓝牙Android_Lightblue调试工具存在的bug
  18. 桌面上计算机图标老是自动删除,win10系统总是自动删除桌面快捷方式的处理方案...
  19. rust键位失灵_用Rust写操作系统(四)——竞争条件与死锁
  20. 用计算机的声音编辑工具录制一段语音信号,语音信号的频谱分析实验指导

热门文章

  1. 友元函数和友元类的应用
  2. 为什么一定要亲身经历了之后才能明白?
  3. Redis分布式锁解析源码分析
  4. Button按钮提交form表单
  5. oracle 导视图,指路牌也可以这么惊艳?6000张导视系统意向图,让你抓住所有人的眼球!(附高清意向图+200个SU模型)...
  6. c语言将数组初始化为1_c语言之数组初始化
  7. 体验家推出CEM报告 | 从入门到精通——文本分析应用指南
  8. 无论 iPhone 还是 Android 手机,散热已成为「最大瓶颈」
  9. 2.1符号使用的不同场景2
  10. js放飞气球动画js特效