安装 MongoDB 分片集群(配置服务器 + 分片 + mongos)
MongoDB难度: 高级耗时: 2–3 小时当数据量或写入负载超出单个副本集的承受能力时搭建的分片集群:三成员的配置服务器副本集、两个或三个分片副本集和两个 mongos 路由器;使用 keyfile 的内部身份验证、授权、sh.addShard、片键选择、对集合分片、均衡器以及数据分布验证。最终得到一个可水平扩展的集群,应用只通过 mongos 访问。如果数据能放在单台服务器上,安装副本集更简单,也足够。
架构: 3 台配置服务器 + 2×3 个分片成员 + 2 个 mongos(至少 11 台服务器;测试时可更少)
开始之前
- 所有服务器运行相同且已更新的操作系统;时间通过 NTP(chrony)同步。成员之间的时钟偏差会导致会话和 oplog 问题。
- 内存和 CPU 与表单中的值一致(WiredTiger 缓存据此计算)。已配置 swap,但容量较小。
- 数据目录(…)位于单独的磁盘/LV 上,格式化为 XFS,以 noatime 挂载,并已写入 fstab。WiredTiger 配合 ext4 可能导致性能问题。
- 所有服务器和应用服务器都能解析每个服务器名(DNS 或 /etc/hosts)。副本集配置中使用名称,而不是 IP。
- 服务器之间已开放 …、…、… 端口;应用网络可以访问这些端口。这些端口未被其他服务占用。
- 服务器能通过 HTTPS 访问 repo.mongodb.org 和 pgp.mongodb.com,或已配置内部镜像。
- 没有操作系统自带的 mongodb 软件包,也没有旧的 MongoDB 安装。
- 可以从第一台服务器以 root(或有 sudo 权限的用户)向其他服务器执行 scp(用于复制 keyfile)。否则请以安全方式手动传送该文件。
- 已以 root 或 sudo 权限登录;维护窗口和服务器快照(回退)计划已就绪。
- 片键已与应用团队共同确定:最常用查询中的过滤字段,基数高,取值分布均匀。片键以后可以用 reshardCollection 更改,但代价很高。
指南阶段
- 操作系统准备(所有服务器) — 主机名:… · 主机名:… · 主机名:… · 主机名:… · 主机名:… · 系统更新和所需工具 …
- 安装 MongoDB 软件 — 添加 MongoDB … 仓库 · 添加 MongoDB … 仓库 · 安装 MongoDB 服务器软件(配置服务器和分片) · 安装 mongos 和 mongosh(路由器) · 准备数据目录 · SELinux 策略、标签和端口 …
- Keyfile(集群内部身份验证) — 创建 keyfile · 将 keyfile 复制到所有服务器 · Keyfile 权限
- 配置服务器副本集 — mongod.conf(配置服务器):… · 启动 mongod · rs.initiate(配置服务器)
- 分片 A(副本集 shardA) — mongod.conf(分片 A):… · 启动 mongod · rs.initiate(分片 A) · 分片本地管理员用户(分片 A)
- 分片 B(副本集 shardB) — mongod.conf(分片 B):… · 启动 mongod · rs.initiate(分片 B) · 分片本地管理员用户(分片 B)
- 分片 C(副本集 shardC) — mongod.conf(分片 C):… · 启动 mongod · rs.initiate(分片 C) · 分片本地管理员用户(分片 C)
- mongos(路由器) — mongos.conf:… · mongos systemd 服务 · 启动 mongos · 创建集群管理员 · 添加分片(sh.addShard) · 创建应用用户
- 片键和集合分片 — 选择片键(决策步骤) · 对集合分片 · 均衡器状态 · 均衡器时间窗口
- 验证 — 集群状态 · 分布测试 · 配置服务器副本集状态 · 应用连接字符串
- 安装后操作 — 日志轮转 · 备份策略 · 监控