Mongodb的副本、分片搭建方式

本文介绍副本和分片的两种搭建方式
由于主从模式很简单,而且官网不推荐这种方式所以不再写这个模式的搭建过程了 。
**
0、环境
**
本人机器资源有限,Linux环境由虚拟机搭建完成,而这两种模式完全可以在一台机器上来模拟,所以不启动多台机器了 。
机器环境:.6+
:2.6.9
IP:192.168.1.168
**
一、副本模式
**
我在一台机器上来模拟副本模式的搭建,所以将Mongo来复制为多个目录,通过启动不同的端口号来区分 。
[20:24:53 fifi@CentOS6 test]$ lsconf.bakmongodb1mongodb2mongodb3
可以清理下data目录下的数据和log下的文件
整体架构如下:

Mongodb的副本、分片搭建方式

文章插图
1. 配置文件
目录中的配置如下:
#mongodb1.confport=30001dbpath=/home/fifi/test/mongodb1/datalogpath=/home/fifi/test/mongodb1/log/mongo.loglogappend=truefork=truereplSet=myreplnoprealloc=true
、对应的conf需要分别修改port、、 。
2.启动服务
我在每把/bin/目录下的改为了
[23:49:39 fifi@CentOS6 test]$ ll mongodb*/bin/mongod*-rwxr-xr-x. 1 fifi fifi 23908720 Jun 17 23:28 mongodb1/bin/mongod1-rwxr-xr-x. 1 fifi fifi 23908720 Jun 16 16:56 mongodb2/bin/mongod2-rwxr-xr-x. 1 fifi fifi 23908720 Jun 16 16:57 mongodb3/bin/mongod3
其实没必要,只要自己清楚就行 。
启动服务:
./mongodb1/bin/mongod1 -f mongodb1/mongodb.conf./mongodb2/bin/mongod2 -f mongodb2/mongodb.conf ./mongodb3/bin/mongod3 -f mongodb3/mongodb.conf
3.客户端连接并配置
任意连接一个副本数据库即可,30001/30002/30003的一个就行
下文为具体操作工程,有些步骤的解析附在了注释中:
Mongodb的副本、分片搭建方式

文章插图
./mongodb1/bin/mongo --port 30001#初始化配置> cfg = { _id:"myrepl", members:[... {_id:1, host:"192.168.1.168:30001", priority:2},... {_id:2, host:"192.168.1.168:30002", priority:1},... {_id:3, host:"192.168.1.168:30003", priority:2, arbiterOnly:true}... ] };#回车后显示如下,其中第一个_id必须与mongodb.conf配置中的replSet=myrepl对应上{"_id" : "myrepl","members" : [{"_id" : 1,"host" : "192.168.1.168:30001","priority" : 2},{"_id" : 2,"host" : "192.168.1.168:30002","priority" : 1},{"_id" : 3,"host" : "192.168.1.168:30003","priority" : 2,"arbiterOnly" : true}]}#使配置生效> rs.initiate(cfg){"info" : "Config now saved locally.Should come online in about a minute.","ok" : 1}> myrepl:SECONDARY> myrepl:PRIMARY> myrepl:PRIMARY> #这里可以看到,30001这个数据库先是变为SECONDARY,然后变为PRIMARY,至此正好符合我们的预期 。#输入rs.status()来看一下副本状态,可以看到PRIMARY、SECONDARY、ARBITER都已就位(忽略部分信息) 。myrepl:PRIMARY> rs.status(){"set" : "myrepl","myState" : 1,"members" : [{"_id" : 1,"name" : "192.168.1.168:30001","health" : 1,"state" : 1,"stateStr" : "PRIMARY","self" : true},{"_id" : 2,"name" : "192.168.1.168:30002","health" : 1,"state" : 2,"stateStr" : "SECONDARY","syncingTo" : "192.168.1.168:30001"},{"_id" : 3,"name" : "192.168.1.168:30003","health" : 1,"state" : 7,"stateStr" : "ARBITER",}],"ok" : 1}
4.验证
客户端在连接的时候只需要注意端口号即可 。
副本搭建好了,我们在主节点中插入和数据来验证下效果 。
./mongodb1/bin/mongo --port 30001myrepl:PRIMARY> db.tab.insert({idx:0})WriteResult({ "nInserted" : 1 })myrepl:PRIMARY> db.tab.find(){ "_id" : ObjectId("55818d5d81f0b27bdfe0d373"), "idx" : 0 }