mongoDB 的复制集 replication的搭建

来源:互联网 发布:cn域名好不好 编辑:程序博客网 时间:2024/06/05 00:35

一.作用

mongodb replication(复制集) 的主要功能是把一个数据库上的数据同步的备份到其它几个数据库上,当其中primary服务器挂机的时候,可以自动选举其它的secondry服务器做为primary,不影响数据的正常工作,保证了程序的高可用性 

二.拓补规化

1.三台服务器,分别是(127.0.0.1:27017,127.0.0.1:27018 , 127.0.0.1:27019)

三.实现步骤

1.启动三台服务器,并把这三台服务器指定到同一个复制集(名称自定义,这里就叫rep0)

>mongod --dbpath   '/home/mongo/m17'   --logpath   '/home/mongo/mlog/m17.log'  --fork  --port 27017  --replSet  rep0 

>mongod --dbpath  '/home/mongo/m18'   --logpath   '/home/mongo/mlog/m18.log'  --fork  --port 27018--replSet  rep0

>mongod --dbpath   '/home/mongo/m19'    --logpath  '/home/mongo/mlog/m19.log'   --fork  --port 27019--replSet  rep0

   命令中相应的目录要提前手动创建,从上面的命令可以看到 这三台服务器都有相同的复制集群名称(rep0)

2.任选一台服务器,登录客户端,创建一个replconfig变量

>mongo 127.0.0.1:27018

>var replconfig ={"_id" : "rep0",
                                    "members" : [

{"_id" : 0,"host" : "127.0.0.1:27017"},
{"_id" : 1,"host" : "127.0.0.1:27018"},
{"_id" : 2,"host" : "127.0.0.1:27019"}

]
}

把上面的json变量 replconfig 作为rs集(replSet)的配置文件进行初始化

>rs.initiate(replconfig)//如果命令不清楚可以使用 rs.help()

等30秒左右,让服务器部署,然后使用命令

>rs.status()               //查看一个服务部署状态如下

rep0:PRIMARY> rs.status()

{

"set" : "rep0",

"date" : ISODate("2017-05-10T08:04:13Z"),

"myState" : 1,

"members" : [

{

"_id" : 0,

"name" : "127.0.0.1:27017",

"health" : 1,

"state" : 2,

"stateStr" : "SECONDARY",

"uptime" : 28,

"optime" : Timestamp(1494403415, 1),

"optimeDate" : ISODate("2017-05-10T08:03:35Z"),

"lastHeartbeat" : ISODate("2017-05-10T08:04:13Z"),

"lastHeartbeatRecv" : ISODate("2017-05-10T08:04:13Z"),

"pingMs" : 0,

"syncingTo" : "127.0.0.1:27018"

},

{

"_id" : 1,

"name" : "127.0.0.1:27018",

"health" : 1,

"state" : 1,

"stateStr" : "PRIMARY",

"uptime" : 418,

"optime" : Timestamp(1494403415, 1),

"optimeDate" : ISODate("2017-05-10T08:03:35Z"),

"self" : true

},

{

"_id" : 2,

"name" : "127.0.0.1:27019",

"health" : 1,

"state" : 2,

"stateStr" : "SECONDARY",

"uptime" : 28,

"optime" : Timestamp(1494403415, 1),

"optimeDate" : ISODate("2017-05-10T08:03:35Z"),

"lastHeartbeat" : ISODate("2017-05-10T08:04:13Z"),

"lastHeartbeatRecv" : ISODate("2017-05-10T08:04:11Z"),

"pingMs" : 0,

"syncingTo" : "127.0.0.1:27018"

}

],

"ok" : 1

}

这样子一个rep0的复制集群就建好了,从上面的信息可以看到 127.0.0.1:27018是primary ,其它两个是secondry

在primary上面是可读可写的,写入的数据会自动同步到 两个secondary服务器上

连接其中一个secondary服务器,用show dbs可以看到数据库 show tables时会出现错误,这是因为在secondary

服务器上默认的是只和primary交互的,如果要查看的话可以使用命令

rep0:SECONDARY> rs.slaveOk()

从服务是不能写入的,只可读

当primary服务器挂机时,两个从服务器会自动选出一个来充当primary,此时被选出的那个服务器就可读可写了


(完)



0 0