注意
从4.2版开始,MongoDB不再支持MMAPv1存储引擎。如果从使用MMAPv1的MongoDB 4.0部署服务升级到MongoDB 4.2,则必须先将存储引擎升级到WiredTiger。
本教程讲解如何将副本集的存储引擎更新为WiredTiger。为了更新过程中避免停机,该过程以滚动方式更新副本集。
一 、注意事项(事前准备)
副本集可以具有使用了不同存储引擎的节点。这样,可以以滚动方式更新节点存储引擎为WiredTiger。
1. PSA 3成员体系结构(PSA 3-member Architecture)
从MongoDB 3.6开始,默认情况下启用WiredTiger的"majority(多数)"读关注。但是,对于MongoDB 4.0.3+,如果你使用具有primary主-secondary副-arbiter仲裁器(PSA)体系结构的三成员副本集,则可以禁用"majority(多数)"读关注。禁用三成员PSA体系结构的"majority(多数)"可避免可能的缓存压力增加。
以下步骤 使用—enableMajorityReadConcern false来禁用MongoDB 4.0.3 PSA体系结构的"majority(多数)"读关注。如果使用的是MongoDB 4.0.1或4.0.2 PSA体系结构,请首先升级到最新的4.0版本,以禁用该读关注。
注意
禁用"majority(多数)"读关注的同时也禁用了对MongoDB 4.0及更早版本的(Change Streams)变更流的支持。对于MongoDB 4.2+,禁用读关注"majority(多数)"对更改流可用性没有影响。
有关PSA体系结构和读关注“majority”的更多信息,请参见Disable Read Concern Majority /禁用majorrity读关注 。
2. MongoDB 3.0或更高版本
只有MongoDB 3.0版或更高版本才能使用WiredTiger存储引擎。如果使用的是MongoDB的早期版本,则必须先升级MongoDB的版本,然后才能更改存储引擎。要升级您的MongoDB版本,请参考相应的版本的升级手册。
3. 默认绑定到本地主机
从MongoDB 3.6开始,默认情况下,MongoDB二进制文件(binaries)、mongod和mongos绑定到localhost。从MongoDB版本2.6到3.4,默认情况下,只有正式的MongoDB RPM(Red Hat,CentOS,Fedora Linux和衍生产品)和DEB(Debian,Ubuntu和衍生产品)的二进制文件才会绑定到localhost。要了解有关此更改的更多信息,请参阅Localhost Binding Compatibility Changes/Localhost绑定兼容性更改。
4. XFS和WiredTiger
对于WiredTiger存储引擎,建议在Linux上将XFS用于数据承载节点。有关更多信息,请参见Kernel and File Systems/内核和文件系统。
5. MMAPv1的局限性
升级到WiredTiger后,WiredTiger部署将不受以下限制:
MMAPv1局限 | 说明 |
命名空间的数量
| 对于MMAPv1,命名空间的数量限制为命名空间文件的大小除以628。 |
命名空间文件的大小 | 对于MMAPv1,命名空间文件不能大于2047兆字节。 |
数据库大小 | MMAPv1存储引擎将每个数据库限制为不超过16000个数据文件。 |
数据大小 | 对于MMAPv1,单个mongod实例无法管理超出基础操作系统提供的最大虚拟内存地址空间的数据集。 |
数据库中的集合数 | 对于MMAPv1存储引擎,数据库中的最大集合数取决于名称空间文件的大小和数据库中集合索引的数量。 |
二、升级过程
以下步骤以滚动方式更新副本集。
首先更新secondary(辅助节点),然后降级primary(主节点),并更新已降级的主节点。
更新WiredTiger存储引擎的过程将删除节点的数据,以WiredTiger启动mongod,然后执行initial sync/初始同步节点数据。
A.更新辅助节点的存储引擎为WiredTiger。
注意
一次只更新一个辅助节点。
1.关闭辅助节点(Shut down the secondary member)。
通过mongo shell,关闭辅助服务器。
use admin
db.shutdownServer()
2.为使用WiredTiger的新mongod创建一个数据目录。
为将要使用WiredTiger存储引擎的新mongod实例创建一个数据目录。 mongod必须具有此目录的读写权限。可以删除已停止的辅助节点的当前数据目录内容,也可以创建一个新目录。
使用WiredTiger的mongod在其他存储引擎创建的数据文件上无法启动。
3.更新WiredTiger的配置。
从mongod实例配置中删除所有MMAPv1特定配置选项。
4.从WiredTiger启动mongod。
启动mongod,将--storageEnginer指定为wiredTige,并将--dbpath指定为新创建的WiredTiger数据目录。
根据需要指定其他选项,例如--bind_ip。
警告
在绑定到非本地主机(例如可公开访问)的IP地址之前,请确保已保护群集免受未经授权的访问。有关安全建议的完整列表,请参阅安全检查表。至少应考虑启用身份验证并加强网络基础结构。
此处分两种情况,一般情况和使用了PSA体系结构的情况,PSA架构时候启动多了一个命令:--enableMajorityReadConcern false。具体内容如下所示:
- 一般情况(对于大多数体系结构)
mongod --storageEngine wiredTiger --dbpath <newWiredTigerDBPath> --replSet <replSetName> --bind_ip localhost,<hostname(s)|ip address(es)>
- PSA架构
重要
如果您运行的是三成员PSA体系结构和MongoDB 4.0.3+版本,请包括--enableMajorityReadConcern false以禁用majority读关注。 请参阅PSA 3成员体系结构。
mongod --storageEngine wiredTiger --dbpath <newWiredTigerDBPath> --replSet <replSetName> --bind_ip localhost,<hostname(s)|ip address(es)> --enableMajorityReadConcern false
由于--dbpath中没有数据,因此mongod将执行initial sync/初始同步节点数据。初始同步过程的长度取决于数据库的大小以及副本集成员之间的网络连接。
您还可以在configuration file/配置文件中指定选项。要指定存储引擎,请使用storage.engine设置。
对其余的secondary/辅助节点重复上述步骤,一次更新一个节点。
B.降级主节点(Step down the primary)。
重要提示:
如果将副本集的所有节点更新为使用WiredTiger,请确保在更新主节点之前先更新了所有辅助节点。
一旦所有辅助节点都升级到WiredTiger,用mongo shell连接到主节点并使用rs.stepDown()降级主节点并强制选择新的主节点。
rs.stepDown()
C.更新降级的主节点(Update the stepped down primary)。
当主节点降级并成为辅助节点后,请像上述A步骤一样更新辅助节点以使用WiredTiger。
上篇: 更改单机服务的存储引擎为WiredTiger(Change Standalone to WiredTiger)
参考原文:https://docs.mongodb.com/manual/tutorial/change-replica-set-wiredtiger/