配置副本集的基本步骤
- 规划节点:确定副本集成员节点(通常一个主节点,多个从节点,还可能有仲裁节点),并确保各节点间网络可达。
- 安装与配置MongoDB:在每个节点上安装MongoDB,并编辑配置文件(
mongod.conf
)。配置文件需指定不同的端口(默认27017)、数据存储路径等。例如:
storage:
dbPath: /var/lib/mongodb
systemLog:
destination: file
path: /var/log/mongodb/mongod.log
logAppend: true
net:
port: 27017
bindIp: 0.0.0.0
- 启动MongoDB实例:在每个节点上使用配置好的配置文件启动MongoDB实例。例如:
mongod -f /etc/mongod.conf
。
- 初始化副本集:
- 连接到其中一个节点的MongoDB shell,例如:
mongo --host <node1_ip>:27017
。
- 在MongoDB shell中,使用
rs.initiate()
命令初始化副本集。初始化时需要提供一个包含副本集成员信息的配置文档,基本格式如下:
rs.initiate({
_id: "<replica_set_name>",
members: [
{ _id: 0, host: "<node1_ip>:27017" },
{ _id: 1, host: "<node2_ip>:27017" },
{ _id: 2, host: "<node3_ip>:27017", arbiterOnly: true } // 可选仲裁节点
]
})
选举机制要点
- 心跳检测:副本集成员通过心跳机制互相监控。主节点定期向从节点发送心跳消息,从节点回复确认消息。如果主节点在一定时间内未收到某个从节点的心跳回复,会认为该从节点不可用。
- 选举触发:当主节点不可用时(例如网络故障、进程崩溃),副本集将触发选举流程来选出新的主节点。
- 选举条件:
- 具有最新的oplog(操作日志)的节点更有优势。
- 节点的优先级(通过配置文档中的
priority
字段设置,默认值为1)也会影响选举。优先级高的节点更有可能被选为新主节点。
- 节点需满足一定的状态条件,如自身状态为
SECONDARY
且与大多数成员保持连接。
- 选举流程:
- 从节点发起选举请求,向其他节点发送投票请求。
- 其他节点收到投票请求后,根据选举条件进行判断。如果满足条件,会投赞成票;否则投反对票。
- 当某个节点获得大多数成员(超过副本集成员总数一半)的赞成票时,该节点将被选为新的主节点。新主节点开始接收客户端的写操作,并将操作记录到oplog中,从节点则通过复制oplog来保持数据同步。