面试题答案
一键面试MongoDB复制集配置基本步骤
- 规划节点:确定要包含在复制集中的服务器节点,一般至少需要3个节点,分别承担不同角色。
- 配置文件设置:为每个节点创建或修改MongoDB配置文件(通常为
mongod.conf
),在配置文件中指定replSet
参数,例如:replSet = <replicaSetName>
,<replicaSetName>
为自定义的复制集名称。同时,配置好其他必要参数,如数据存储路径dbPath
、日志文件路径logPath
等。 - 启动节点:按照配置文件启动各个MongoDB节点。例如,在Linux系统下可以使用命令
mongod -f /path/to/mongod.conf
启动。 - 初始化复制集:连接到其中一个节点的MongoDB shell,运行初始化命令。例如:
rs.initiate({
_id: "<replicaSetName>",
members: [
{ _id: 0, host: "primaryNodeHost:port" },
{ _id: 1, host: "secondaryNodeHost:port" },
{ _id: 2, host: "arbiterNodeHost:port", arbiterOnly: true }
]
})
其中_id
为复制集名称,members
数组中定义了各个节点的信息,arbiterOnly: true
表示该节点为仲裁节点。
节点角色作用及配置方式
- 主节点(Primary)
- 作用:主节点负责处理所有的写操作,并将这些操作记录在oplog(操作日志)中。从节点通过复制oplog来保持与主节点的数据同步。读操作也可以在主节点进行,但一般为了负载均衡,读操作更多地分发到从节点。
- 配置方式:在初始化复制集时,将某个节点定义为成员,且不设置特殊标识即为潜在主节点。例如
{ _id: 0, host: "primaryNodeHost:port" }
。主节点会在复制集初始化或选举过程中产生。
- 从节点(Secondary)
- 作用:从节点复制主节点的oplog,以保持与主节点数据的同步。从节点可用于分担读操作的负载,提高系统的读取性能。当主节点发生故障时,从节点可以参与选举成为新的主节点。
- 配置方式:在初始化复制集时定义,如
{ _id: 1, host: "secondaryNodeHost:port" }
。从节点会自动从主节点拉取oplog并应用。
- 仲裁节点(Arbiter)
- 作用:仲裁节点不存储数据,只参与主节点的选举过程。它的作用是帮助打破选举时的平局,确保复制集能够快速选出新的主节点,维持系统的高可用性。
- 配置方式:在初始化复制集时,通过设置
arbiterOnly: true
来定义仲裁节点,例如{ _id: 2, host: "arbiterNodeHost:port", arbiterOnly: true }
。仲裁节点只需运行MongoDB服务,无需配置复杂的数据存储等参数,因为它不保存数据。