1.配置副本集
首先在不同的机器上启动mongod,并编写相应的配置文件mongod.conf
dbpath=localhost/home/mongodb/shard1/data
logpath=localhost/home/mongodb/shard1/log/shard1.log
journal=true
port=22001
replSet=shard1
fork=true
这里副本集名称为shard1 端口号为22001 指明具体的数据及日志存放位置,并启动
server-1>mongod -f mongod.conf
相应的配置好其他的两个示例
dbpath=localhost/home/mongodb/shard1/data
logpath=localhost/home/mongodb/shard1/log/shard1.log
journal=true
port=22002
replSet=shard1
fork=trueserver-2>mongod -f mongod.conf
server-3>dbpath=localhost/home/mongodb/shard1/data
logpath=localhost/home/mongodb/shard1/log/shard1.log
journal=true
port=22003
replSet=shard1
fork=trueserver-3>mongod -f mongod.conf
这时基本操作已做完,下一步配置相应数据,让mongod知道有其他节点存在并属于同一个副本集
随便连接某一个节点:
mongo localhost:22001
mongo>config={
“_id”:”shard1” //副本集的名字
“members”:[
{“_id”:0,”host”:”server-1:22001”}.
{“_id”:1,”host”:”server-2:22002”}.
{“_id”:2,”host”:”server-3:22003”,”arbiterOnly”:true}
]
}
mongo>rs.initiate(config) //初始化副本集
通过重新编写config 然后通过
mongo>rs.reconfig(config)
然后合法更改配置
2.设计副本集
这里必须满足大多数要求 才能选举主节点
注意:当主节点发现已经得不到大多数的支持(集群中一半以上的节点挂掉或者不可达),则主节点会自动降级成备份节点,导致副本集不能使用
怎样才算大多数:
副本集中的成员总数 | 副本集中的大多数 |
---|---|
1 | 1 |
2 | 2 |
3 | 2 |
4 | 3 |
5 | 3 |
6 | 4 |
7 | 4 |
下面推荐两种配置:
(1)将“大多数”成员放置在同一个数据中心
(2)在两个数据中心葛方智数量相等的成员,在第三个地方放置一个用于决定胜负的副本集成员
3.选举机制
遵守大多数规则:
当属于大多数成员中的某个成员投否决票 就相当于-10000张赞成票
希望成为主节点的成员必须复制将自己的数据更新为最新 复制操作是严格按照时间排序的 成员只能“自荐”,不能“推荐”,简单起见。
4.成员配置选项
仲裁者 指的是没有数据读写服务的实例节点 整个复制集只能使用一个仲裁者
可以运行在服务器配置比较差的地方。 可以没有,但只能有一个
如果可能 尽可能在副本集中使用技术哥数据成员,而不要使用仲裁者。
5.优先级
指的是数据成员渴望成为主节点的程度,0~100之间,默认为1
将优先级设为0 :优先级为0的成员永远不能够成为主节点 被称为被动节点
mongo>rs.add({“_id”:4,”host”:”server-4:27017”,”priority”:1.5})
注意:修改副本集配置时,新的配置必须发送给在新配置下可能成为主节点的成员。
因此无法再一次reconfig操作中将当前主节点的优先级设置为0,也不能对所有成员优先级为0的副本集执行reconfig。
6.隐藏成员
只有由优先级为0的数据成员可以被隐藏(不能将主节点隐藏)
mongo>rs.add({“_id”:5,”host”:”server-5:27017”,”priority”:0,”hidden”:true})
也可以通过reconfig设置
7.延迟备份节点
使用slaveDelay选项 要求用户成员优先级为0 并设置隐藏hidden 避免将读请求路由到延迟备份节点 单位s
8.创建索引
指定buildIndex选项为false 要求用户成员优先级为0 针对用途仅仅是处理数据备份或者是离线的批量任务
注意:此操作不可恢复