本文介绍副本和分片的两种搭建方式
由于主从模式很简单,而且Mongodb官网不推荐这种方式所以不再写这个模式的搭建过程了。
**
0、环境
**
本人机器资源有限,Linux环境由虚拟机搭建完成,而这两种模式完全可以在一台机器上来模拟,所以不启动多台机器了。
机器环境:CentOS6.6+VMware
Mongodb:2.6.9
IP:192.168.1.168
**
一、副本模式
**
我在一台机器上来模拟副本模式的搭建,所以将Mongo来复制为多个目录,通过启动不同的端口号来区分。
[20:24:53 fifi@CentOS6 test]$ ls
conf.bak mongodb1 mongodb2 mongodb3
可以清理下data目录下的数据和log下的文件
整体架构如下:
1. 配置文件
mongodb1目录中的配置如下:
#mongodb1.conf
port=30001
dbpath=/home/fifi/test/mongodb1/data
logpath=/home/fifi/test/mongodb1/log/mongo.log
logappend=true
fork=true
replSet=myrepl
noprealloc=true
mongodb2、mongodb3对应的conf需要分别修改port、dbpath、logpath。
2.启动服务
我在每把mongodbN/bin/目录下的mongod改为了mongodN
[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的一个就行
下文为具体操作工程,有些步骤的解析附在了注释中:
./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