一、获取mongodb安装包
本示例mongo版本:mongodb-win32-x86_64-3.4.17.zip
下载链接:http://downloads.mongodb.org/win32/mongodb-win32-x86_64-3.4.17.zip
二 、安装mongo
(1)解压 mongodb-win32-x86_64-3.4.17.zip,解压之后文件名可自定义。Mongodb8881是我自定义的文件名。
(2)在解压文件的 bin 的同级目录创建 data和log 目录 , 在data目录下创建db目录。
(3)本次示例以配置文件启动,创建启动文件, mongo.config ,该文件和 bin 目录同级。
(4)编辑配置文件mongo.config,文件内容示例:
dbpath=C:\DEV\Mongodb8881\data\db 数据存储目录
logpath=C:\DEV\Mongodb8881\log\mongo.log 日志存储目录
port=8881 mongodb 启动端口
logappend=true 以追加的方式记录日志。不同方式可自行搜索。
【说明*】C:\DEV\Mongodb8881 为mongodb安装包解压后所对应的磁盘目录【*】
(5)启动Mongo ,
进入命令行: win+R
进入到Mongo 安装包目录 : cd C:\DEV\Mongodb8881
执行命令: .\bin\mongod -config mongo.config
(6)重新打开一个命令行窗口
进入到mongodb 安装包的 bin 目录下,执行命令:mongo
由于 mongo 默认连接的是本地的 27017 端口,所以为了连接到指定IP下的端口,需要补充IP地址和端口号
mongo 127.0.0.1:8881
至此,mongo 单实例安装完毕。
三、基于单实例的复制集安装
上边已经介绍了mongodb 的单实例安装,下边开始安装 mongo 复制集。
先将 mongodb 解压出来的安装包复制多份。
为了方便观察,此处我均以 启动端口号作为 mongo安装包的目录后缀
【注意点】
mongo 复制集初始化的时候,需要将从节点的数据库全部删除(包括默认的 local 和 admin)。主节点admin 库不可删除.
主节点的选用规则,一般已经有数据的一般都作为主节点。
为了下边的叙述方便,均以端口号对应各个实例。
3-1)分别按照单实例的方式安装四个实例,
8881 数据库已经包含有数据,我们就在8881 上设置复制集信息。
(3-2)连接 8882、8883、8884,删除他们下边的所有数据库。
连接 8882
命令:mongo 127.0.0.1:8882
要删除据库A,则切换到库A ,
命令:db.dropDatabase();
根据上述规则删除所有数据库。8883、8884 删库操作同8882一样。
(3-3)关闭8881、8882、8883、8884
修改 8881、8882、8883、8884 的配置文件,增加复制集配置,完整配置示例:
dbpath=C:\DEV\Mongodb8881\data\db
logpath=C:\DEV\Mongodb8881\log\mongo.log
port=8881
logappend=true
# oplog的大小(MB)
oplogSize=1024
# 副本集名称(要确保同一个复制集名称要一致)
replSet=groupone
# 启用日志选项,MongoDB的数据操作将会写入到journal文件夹的文件里,该目录位于 data\db 下
journal=true
(3-4)四个实例的配置文件修改完成之后,启动四个实例(必须四个示例都以复制集的方式启动成功)
(3-4-1)连接 8881 实例,
(3-4-2)切换到 admin,命令行创建初始化对象 config
config={_id:"groupone",members:[{_id:0,host:"127.0.0.1:8881"},{_id:1,host:"127.0.0.1:8882"}, {_id:2,host:"127.0.0.1:8883"},{_id:3,host:"127.0.0.1:8884"}]}
(3-4-3)执行初始化命令: rs.initiate(config)
设置成功之后,分别连接到各个实例查看:如下图所示
(3-5)复制集设置成功之后,从节点如果需要在命令行执行命令,需要执行命令:
rs.slaveOk()
(3-6)复制集主节点 8882 宕机之后,重启8882,此时旧的主节点8882 已经成为了从节点,而剩下的从节点之中会产生一个主节点。具体实际操作大家可以多尝试几次,这里不再做演示。
四、 异常处理:
(4-1)复制级实例均需添加相关配置,否则报错如下:
(4-2)如果在设置复制机的时候报错,部分节点已经包含有数据,就需要停止该实例,修改该实例的配置文件,恢复到单实例状态,再执行删除数据库操作。错误提示如下:
解决方法:
(1)先停止 8882,直接在8882上操作,不会删除成功,原因是8882此时启动模式是复制集模式,不是主节点是无法操作数据库的,删除失败的提示如下:
(2)删除8882 对应的mongo.config 中复制集相关配置,恢复单实例模式,以单实例模式启动
连接8882实例,执行(3-2)操作。
(3)8882数据全部删除成功之后,停止8882实例 ,再把 8882 复制集相关配置加上,启动 8882。