【双机配置】
服务端:
两台 Dell R730 双路E5 服务器
使用一个内网环境,网段20, ping 测试互通
主服ip: 192.168.20.176: 27017
从服ip: 192.168.20.178: 27015
客户端: ThinkPad T460P
【系统环境】
服务端: windows Server 2012 R2
客户端: Win10
MongoDB版本 3.2.10
【文件夹建立】
双机主从配置建议将双机的文件夹配置保持一致,但是对mongoDB的配置来讲这个可以不那么重视。
花了5分钟学习,发现其实就是给定一个时间从机向主机请求同步而已。同步的内部机制等空一点研究源码。
这里我的文件夹建立是 D:Mongos 作为整个MongoDB的根目录,数据目录暂时也放在这下。
数据目录: .DB 主服的数据放在这文件夹下 .Master , 从服的数据对应为 .Slave
日志在 .Log下
【脚本和运行效果】
mongoDB的配置脚本非常简单,这里给出命令即可
先来主服的, 务必使用 --master进行标记。
.Mongod.exe --dbpath [your path] --master -- port 27017
从服:
.mongod.exe --slave --dbpath [your Path] --source 192.168.20.176 --port 27015 --slavedelay 5
其中 slavedelay指定从服每多少秒执行一次同步。
运行效果如图:
主服:
启动成功
需要说明一下,最下面一条信息是从服启动后建立了到主服的连接,所以有一个Connection accepted。
接下来是从服:
可以看到最下面一组红框的信息是每5s出现一次,代表在同步主服的信息。
【启动主备服务】
主服上运行 mongo.exe, 自动连接到 test, 这个和单机是一样的。
等了很久,没有看到mongo shell出现,说明启动没成功。
据说第一次启动很慢,不知道是有多慢
等了挺久,突然好了。
之前几个客户端都没法访问到,下次测试一下什么原因。
从服上同样启动mongo.exe,不过要指定一下从服的端口,即27015
这里是为了测试同步是否成功,所以访问本地的test。
【同步测试】
写数据的一方从客户端(ThinkPad上)操作,然后分别在两个服务器客户端上读一次看是否同步。
为了便于区分,在一次写操作后先读一次从服,5s后再读一次。
客户端的写操作对主服进行。
插入操作很简单,我们在test下操作即可 【该命令由客户端发送】
可以看到查询结果是正确的。
我们在从服上执行find()命令:
可以看到之前是报错了的。
实际上主从模式下,从服仅仅作为备份,是不允许直接访问和操作的。但是我们可以给从服配置一个读权限,即 rs.slaveOk()
之后就能查询了。 两条记录是因为我在主服下开的客户端也执行了一个查询。
到此可证明主从部署建立成功。
【待解决】
最后遇到一些问题:
按官方说法,我应该是能从客户端(另一台pc)通过指定ip和端口的形式访问从服的,因为从服自己也是这么访问的。
然而我的连接请求却被从服拒绝了,有点奇怪。