mongodb 主从复制很简单 只需要在启动的时候指定主从即可
首先我们需要建立两个 dbpath dblogs 目录
主:
./bin/mongod --dbpath=/usr/local/mongodb/data --logpath=/usr/local/mongodb/dblogs --master --port 20001 --fork
[root@localhost mongodb]# forked process: 3398
all output going to: /usr/local/mongodb/dblogs
[root@localhost mongodb]# netstat -tpnl|grep 20001
tcp 0 0 0.0.0.0:20001 0.0.0.0:* LISTEN 3398/./bin/mongod
从:
./bin/mongod --slave --source 127.0.0.1:20001 --dbpath=/usr/local/mongodb/data1 --logpath=/usr/local/mongodb/dblogs1 --port 20002 &
[1] 3468
[root@localhost mongodb]# all output going to: /usr/local/mongodb/dblogs1
[root@localhost mongodb]# pstree | grep mongod
|-mongod---9*[{mongod}]
| |-mongod---7*[{mongod}]
可以在主服务器上 插入几条数据 再在从服务器上查看
另外 为了减轻压力 可以在从服务器上备份
[root@localhost mongodb]# ./bin/mongodump --port 20002 -d test
connected to: 127.0.0.1:20001
DATABASE: test to dump/test
test.c1 to dump/test/c1.bson
2 objects
test.system.indexes to dump/test/system.indexes.bson
5 objects
test.fs.files to dump/test/fs.files.bson
0 objects
test.fs.chunks to dump/test/fs.chunks.bson
0 objects
[root@localhost mongodb]# ll
总用量 104
drwxr-xr-x. 3 root root 4096 8月 7 01:46 bin
drwxr-xr-x. 3 root root 4096 8月 7 05:46 data
drwxr-xr-x. 2 root root 4096 8月 7 05:49 data1
-rw-r--r--. 1 root root 52343 8月 7 06:09 dblogs
-rw-r--r--. 1 root root 27160 8月 7 06:09 dblogs1
drwxr-xr-x. 3 root root 4096 8月 7 06:09 dump
缺点:主master挂了之后 不能自动切换到从slave 存在单点故障
副本集
mongodb 在1.6版本开发了replica set , 主要增加了故障自动切换和自动修复成员节点,各个db之间数据完全一致,最为显著的区别在于,副本集没有固定的主节点,它是整个集群选举出的一个主节点,当其不工作时变更其他节点
首先需要先建立文件 data/data1 data/data2 log/log1(文件) log/log2(文件) key/key1(文件) key/key2(文件) 密钥
echo '123456' > key1 导入密钥
echo '123456' > key1
chmod 600 * 两把密钥一定要给到600权限
[root@localhost mongodb]# ./bin/mongod --replSet rs1 --keyFile=/usr/local/mongodb/key/key1 --port 20001 --dbpath=/usr/local/mongodb/data/data1/
--logpath=/usr/local/mongodb/log/log1 &
[1] 3656
[root@localhost mongodb]# ./bin/mongod --replSet rs1 --keyFile=/usr/local/mongodb/key/key2 --port 20002 --dbpath=/usr/local/mongodb/data/data2/
--logpath=/usr/local/mongodb/log/log2 &
//登录一台服务器进行配置
//随便在一个终端进行,这个终端会被当成primary节点,因此连接的这个终端priority优先级要设置高,如果设置成 priority:0 ,primary节点会报错:(我一开始配置就出
现了这个问题
{
"errmsg" : "couldn't initiate : initiation and reconfiguration of a replica set must be sent to a node that can become primary",
"ok" : 0
}
)
//备注:Priority为0的节点永远不能成为主节点,所以设置Secondary-only节点只需要将其priority设置为0.
[root@localhost mongodb]# ./bin/mongo --port 20001
connecting to: 127.0.0.1:20001/test
> config_rs1={
... _id:"rs1",
... members:[
... {_id:0,host:"localhost:20002",priority:0},
... {_id:1,host:"localhost:20001",priority:1}
... ]}
> rs.initiate(config_rs1);//初始化
{
"info" : "Config now saved locally. Should come online in about a minute.",
"ok" : 1
}
> rs.stats();
Fri Aug 7 09:12:54 TypeError: rs.stats is not a function (shell):1
rs1:PRIMARY> rs.status();
{
"set" : "rs1",
"date" : ISODate("2015-08-07T01:13:14Z"),
"myState" : 1,
"members" : [
{
"_id" : 0,
"name" : "localhost:20002",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 26,
"optime" : {
"t" : 1438909949000,
"i" : 1
},
"optimeDate" : ISODate("2015-08-07T01:12:29Z"),
"lastHeartbeat" : ISODate("2015-08-07T01:13:13Z")
},
{
"_id" : 1,
"name" : "localhost:20001",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"optime" : {
"t" : 1438909949000,
"i" : 1
},
"optimeDate" : ISODate("2015-08-07T01:12:29Z"),
"self" : true
}
],
"ok" : 1
}
主服务器坏掉后 会从服务器中再次选举出一个主服务器