MongoDB:The Definitive Guide 2nd笔记(三)

Setting Up a Replica Set

Configuring a Replica Set

$ mongod --replSet spock -f mongod.conf --fork

登陆其他服务器

$ ssh server-2
server-2$ mongod --replSet spock -f mongod.conf --fork
server-2$ exit

$ ssh server-3
server-3$ mongod --replSet spock -f mongod.conf --fork
server-3$ exit

config为一个配置结构,格式如下:

> config = {
"_id" : "spock",
"members" : [
        {"_id" : 0, "host" : "server-1:27017"},
        {"_id" : 1, "host" : "server-2:27017"},
        {"_id" : 2, "host" : "server-3:27017"}
    ]
}

members表示集合中的成员。

rs.initiate(config)等价于

> db.adminCommand({"replSetInitiate" : config})

Changing Your Replica Set Configuration

添加成员

rs.add("server-4:27017")

删除成员

> rs.remove("server-1:27017")
Fri Sep 28 16:44:46 DBClientCursor::init call() failed
Fri Sep 28 16:44:46 query failed : admin.$cmd { replSetReconfig: {
_id: "testReplSet", version: 2, members: [ { _id: 0, host: "ubuntu:31000" },
{ _id: 2, host: "ubuntu:31002" } ] } } to: localhost:31000
Fri Sep 28 16:44:46 Error: error doing query:
failed src/mongo/shell/collection.js:155
Fri Sep 28 16:44:46 trying reconnect to localhost:31000
Fri Sep 28 16:44:46 reconnect localhost:31000 ok

修改某一个成员的配置

> var config = rs.config()
> config.members[1].host = "server-2:27017"
> rs.reconfig(config)

Majority

majority指在set中,超过全部成员一半的成员集合。

假设有5个成员,majority就是3,如果3个成员挂掉了,那么剩下的2个成员不能够选举primary。为什么剩下的2个不能够选举呢,因为有一种可能性,这3个成员在一个网络中,剩下的2个成员在一个网络中,两个网络之间的连接断掉了,3个成员可以选一个primary,如果剩下的2个成员也选一个primary的话,就会有连个primary,就会出现冲突问题。

How Elections Work

当一个Secondary (名为A)无法到达primary时,它会联系所有的其它成员,让它们选自己成为primary,其它成员会进行以下检查:它们自己是否能够到达A到达不了的primary?A是否up to date with replication?是否有比A更高优先级的成员可以选为primary.

当A从大部分成员收到”ayes”,A就成为primary。但是如果有一个成员vetoes这个选举,这个选取就被取消。

一个vetoes含有1000的选举数。

寻求选举的成员必须up to date with replication,什么意思呢?举例来说:
假如成员A复制(replicated)的最新操作为123op,它联系其它成员,但是里面有个成员B复制的最新操作胃124op,那么成员B就会vetoes这个选取。成员A就会继续同步直到同步到124op,就会再次发起投票。

Member Configuration Options

Arbites

Arbiter是一种特殊的MongoDB成员,存在的目的就是为了参与投票,并不会存数据。

最多使用一个arbiter

添加Arbiter的命令

> rs.addArb("server-5:27017")

Priority

优先级从0到100,默认为1,优先级为0的成员永远不会被选举为primary
优先级最高的成员在它能够联系大部分的成员并且数据是most up to date的情况下,会优先被选举为primary
设置优先级

> rs.add({"_id" : 4, "host" : "server-4:27017", "priority" : 1.5})

Hidden

用户不会把请求routehidden成员,hidden成员并不会作为replication sources(复制源)。

> rs.isMaster()
{
...
"hosts" : [
        "server-1:27107",
        "server-2:27017",
        "server-3:27017"
    ],
...
}

设置Hidden属性

> var config = rs.config()
> config.members[2].hidden = 0
> config.members[2].priority = 0
> rs.reconfig(config)

重新查看

> rs.isMaster()
{
...
"hosts" : [
        "server-1:27107",
        "server-2:27017",
        "server-3:27017"
    ],
...
}

rs.status()and rs.config() will still show the member; it only disappears from isMaster() .

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值