集群环境准备
首先确保Windows下安装了Mongodb,具体下载地址载网址是:https://www.mongodb.com/download-center#community。 直接下载msi安装版:mongodb-win32-x86_64-2008plus-ssl-3.4.3-signed.msi。下载后进行安装(可以自定义安装目录)。
复制集搭建
- 在某盘创建存放Mongodb复制集的文件夹,并将之前Mondb(单机)的安装文件复制3份到该复制集文件夹下,并分别命名为Mongodb1、Mongodb2、Mongodb3。
- 在复制集文件夹下创建data文件夹,主要用于存放复制集的相关数据。进入data文件夹下,分别创建data、key、log文件夹。Data存放数据,key存放相同的密钥,log存储节点日志。
- 进入data文件夹下,分别创建3个文件夹,用于存放各个节点的数据,这里起名分别为r1、r2、r3,分别存放节点数据。
- 进入存放复制集的秘钥文件夹,创建一个txt文件,在文件中写入一些数据,然后复制2份,一定要保证各个节点的秘钥文件内容一致,否则复制集创建失败。
- 复制集的中的秘钥文件内容可以由用户自己设置,只要保持三个节点的内容是一致即可。
- 在日志文件夹下分别创建3个日志文件,用于存放各个节点的日志信息。
- 在mongodb1/bin 目录下,按shift+右键,选择在此处打开命令提示行,执行初始化mongodb操作,同样在mongodb2/bin, mongodb3/bin执行相应的操作。
- 构建复制集,执行命令:mongod.exe --replSet (复制集名称) --port (端口号) --dbpath (数据存储位置) --logpath=(日志具体文件,包含后缀名) –logappend,需要说明的是:三个节点的复制集名称必须保持一致,由于我们是在同一台机器上开启三个节点,故每个节点的端口号不能重复。-–logappend表示日志信息是追加的模式。实现如下:
- 节点1:mongod.exe --replSet mongodbcluster --port 28010 --keyFile d:\mongodbcluster\data\key\key1.txt --dbpath d:\mongodbcluster\data\data\r1 --logpath=d:\mongodbcluster\data\log\log1.log --logappend
- 节点2:mongod.exe --replSet mongodbcluster --port 28011 --keyFile d:\mongodbcluster\data\key\key2.txt --dbpath d:\mongodbcluster\data\data\r2 --logpath=d:\mongodbcluster\data\log\log2.log --logappend
- 节点3:mongod.exe --replSet mongodbcluster --port 28012 --keyFile d:\mongodbcluster\data\key\key3.txt --dbpath d:\mongodbcluster\data\data\r3 --logpath=d:\mongodbcluster\data\log\log3.log --logappend
执行命令后,会进入等待状态:查看日志文件后,会有等待连接相应的端口的提示:
- 在任意一个节点的bin目录下开启一个命令提示行,然后用mongo连接。连接命令:mongo.exe –port (主节点端口号)
- 进一步配置节点信息,并初始化Replica Sets环境,执行下面的js代码
var conf = {
_id : "mongodbcluster",
members : [
{ _id : 2, host : "localhost:28011"},
{ _id : 1, host : "localhost:28010"},
{ _id : 3, host : "localhost:28012"}
]
}
rs.initiate(conf);
//强制重新初始化操作: rs.reconfig(conf,{ "force":true});
- priority:用于配置优先级的,当priority=0时,说明这个实例永远不可能被设置成primary,只能作为一个slave存在。当所有节点都不设置优先级时,则由系统选举出primary。复制集启动后,可以在日志文件中查看。
- 可以运行 rs.status()来查看复制集的状态。说明如下:
- _id 表名节点id,health:实例正常与否的标记,1代表正常,0代表异常
- state:该节点在复制集中充当的角色,1代表primary,0代表slave
- 除了用rs.status()查看复制集中各成员节点的状态之外,还可以用rs.isMaster命令查看Replica Sets状态,至此,mongodb的复制集安装完毕。如下图所示: