您的位置:首页 > 数据库 > Mongodb

mongodb副本集搭建

2014-02-10 11:52 357 查看
副本集没有固定的“主节点”,整个集群结构会动态选举出一个“主节点”,当其不能工作了,则会动态变更到其他节点。副本集对其节点又特殊的称呼:活跃节点(“主节点”)和 备份节点(“从节点”)。

1.资源有限两台电脑(172.16.0.249,,12.16.0.250),一个主primary,一个secondary(可以称副节点)

2、使用选项--replSet来启动副本集的第一个服务:

(1)采用配置文件的方法

在mongodb目录下新建conf文件夹 并新建文件xx.conf,内容如下

port=10001 -------------------》端口号

fork=true --------------------》以守护进程的方式运行,创建服务器进程

logpath=/home/llp/log.log --------------------》日志文件输出目录

dbpath=/home/llp/db -------------------- 》数据库路径

logappend=true ---------------------》日志输出方式

replSet=blort/172.16.0.250:10002 ----------------------》设置副本集 名字/ip:端口

启动服务

[root@slave1 bin]# ./mongod -config ../conf/llpmongo.conf

all output going to: /home/llp/log.log

forked process: 22703

查看进程

[root@slave1 bin]# ps -ef|grep mongo

root 20063 1 0 Jan03 ? 00:00:03 /usr/local/mongodb/bin/mongod -f /usr/local/mongodb/conf/mongod.conf

root 22703 1 0 10:29 ? 00:00:00 ./mongod -config ../conf/llpmongo.conf ------------------------》启动的进程

root 22742 20283 0 10:30 pts/2 00:00:00 ./mongo localhost:10001/admin

root 22761 19670 0 10:31 pts/1 00:00:00 grep mongo

[root@slave1 bin]# kill -2 22703

[root@slave1 bin]# ps -ef|grep mongo

root 20063 1 0 Jan03 ? 00:00:03 /usr/local/mongodb/bin/mongod -f /usr/local/mongodb/conf/mongod.conf

root 23035 20283 0 10:39 pts/2 00:00:00 ./mongo localhost:10001/admin

root 23088 19670 0 10:42 pts/1 00:00:00 grep mongo

(2)命令模式

[root@slave1 bin]# ./mongod -dbpath /home/llp/db -port 10001 -replSet blort/172.16.0.250:10002 -logpath /home/llp/log.log

all output going to: /home/llp/log.log

3、启动第二个服务

配置文件同上

[root@lvjian3 bin]# ./mongod -dbpath /home/llp/db -port 10002 -replSet blort/172.16.0.249:10001 -logpath /home/llp/log.log -logappend

all output going to: /home/llp/log.log

4、.初始化节点:只初始化一次,随便登陆任何一个节点,但是必须进入admin数据库

[root@slave1 bin]# ./mongo localhost:10001

MongoDB shell version: 2.0.0

connecting to: localhost:10001/test

> use admin

switched to db admin

> conf={

... "_id":"blort",

... "members":

... [

... {

... "_id":0,

... "host":"172.16.0.249:10001"

... },

... {

... "_id":1,

... "host":"172.16.0.250:10002"

... }

... ]}

{

"_id" : "blort",

"members" : [

{

"_id" : 0,

"host" : "172.16.0.249:10001"

},

{

"_id" : 1,

"host" : "172.16.0.250:10002"

}

]

}

> rs.initiate(conf)

{

"info" : "Config now saved locally. Should come online in about a minute.",

"ok" : 1

}

[root@slave1 bin]# ./mongo localhost:10001/admin

MongoDB shell version: 2.0.0

connecting to: localhost:10001/admin

PRIMARY> rs.status()

{

"set" : "blort",

"date" : ISODate("2014-02-10T01:41:26Z"),

"myState" : 1,

"members" : [

{

"_id" : 0,

"name" : "172.16.0.249:10001",

"health" : 1,

"state" : 1,

"stateStr" : "PRIMARY",

"optime" : {

"t" : 1391853169000,

"i" : 1

},

"optimeDate" : ISODate("2014-02-08T09:52:49Z"),

"self" : true

},

{

"_id" : 1,

"name" : "172.16.0.250:10002",

"health" : 1,

"state" : 2,

"stateStr" : "SECONDARY",

"uptime" : 195,

"optime" : {

"t" : 1391853169000,

"i" : 1

},

"optimeDate" : ISODate("2014-02-08T09:52:49Z"),

"lastHeartbeat" : ISODate("2014-02-10T01:41:25Z"),

"pingMs" : 0

}

],

"ok" : 1

}

5、创建完成可看出172.16.0.249为主节点,172.16.0.250为副节点

6、副本集同步原理:如何保持主从节点数据一致性

主节点插入数据

[root@slave1 bin]# ./mongo localhost:10001/admin

MongoDB shell version: 2.0.0

connecting to: localhost:10001/admin

PRIMARY> use testdata

switched to db testdata

PRIMARY> show tables

PRIMARY> db.tt.insert({"x":1})

PRIMARY> db.tt.find()

{ "_id" : ObjectId("52f82edfaeb169a6245d9b4b"), "x" : 1 }

(2)查看副节点172.16.0.250

[root@lvjian3 bin]# ./mongo localhost:10002

MongoDB shell version: 2.0.0

connecting to: localhost:10002/test

SECONDARY> use testdata

switched to db testdata

SECONDARY> db.tt.find()

error: { "$err" : "not master and slaveok=false", "code" : 13435 }

副节点没有权限查看

(3)down掉主节点(172.16.0.249)

[root@slave1 bin]# [root@slave1 bin]# kill -2 22703

查看副节点的状态(172.16.0.250)

[root@lvjian3 bin]# ./mongo localhost:10002

MongoDB shell version: 2.0.0

connecting to: localhost:10002/test

SECONDARY> 还是副节点 只有两个节点的时候一个down掉后无法选举主节点了

重新启动172.16.0.249 查看250的状态

[root@slave1 bin]# ./mongo localhost:10001/admin

MongoDB shell version: 2.0.0

connecting to: localhost:10001/admin

PRIMARY> use testdata

switched to db testdata

PRIMARY> db.tt.find()

{ "_id" : ObjectId("52f82edfaeb169a6245d9b4b"), "x" : 1 }

可看出数据发生同步
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: