1.副本集
高可用是绝大多数数据库管理系统的核心目标之一. 如果要想生产数据在发生故障后依然可用, 就需要确保为生产数据库多部署一台服务器. MongoDB 副本集提供了数据的保护, 高可用和灾难恢复的机制.
在 MongoDB 中, 有两种数据冗余方式, 一种是 Master-Slave 模式 (主从复制), 一种是 Replica Sets 模式 (副本集). 主从复制和副本集使用了相同的复制机制, 但是副本集额外增加了自动化灾备机制: 如果主节点宕机, 其中一个从节点会自动提升为从节点. 除此之外, 副本集还提供了其他改进, 比如更易于恢复和更复杂地部署拓扑网络.
集群中没有特定的主库, 主库是选举产生, 如果主库 down 了, 会再选举出一台主库.
可复制集推荐使用的最小配置包含 3 个节点, 因为在可复制集里如果只有 2 个节点, 那么一旦主节点垮掉, 就无法进行多数投票表决. 在 3 个成员的可复制集里可部署包含 3 个存储数据的节点服务器, 其节点示意图如下:
也可以是 2 个数据存储服务器加上一个裁判服务器, 其节点示意图如下:
(一主一副一仲裁)
目前, 作者所在公司建立的集群大多采用后者架构.
2.MongoDB.Driver
下图是 C# 的 MongoDB.Driver 驱动版本与 MongoDB 版本支持关系, 目前安装的 MongoDB 版本都是 3.4.4 及以上版本. 所以 MongoDB.Driver 版本应该选用 2.4 及以上.
3. 连接字符串格式
副本集连接字符串格式
MongoDB://username:password@host1:port1,host2:port2[,...,hostN:portN]/database?options
options 是连接配置中的可选项, replicaSet 是其中的一个子项.
下面我们举一个例子来说明字符串是怎么配置的, 测试环境的副本集信息如下:
副本集名称 | 节点角色 | 节点 IP | 端口 |
repsms | 主服务器 | 172.177.177.XX1 | 27017 |
副本节点 | 172.177.177.XX2 | 27017 | |
仲裁节点 | 172.177.177.XX3 | 27017 |
账号信息如下:
Username | Password | DBName |
mongousertest | testuserpwd | mongotestdb |
此时 C# 程序中 connectionStr 的字符串可以设置如下:
stringconnectionStr = "mongodb://mongousertest:testuserpwd@172.177.177.xx1:27017,172.177.177.xx2:27017/mongotestdb?replicaSet=reptest";
注意: 因为仲裁节点没有数据副本, 仲裁节点也不可能会被选举为主节点, 所以连接字符串信息中不要包含仲裁节点的信息.
[说明: 本文副本集相关图片来自网络, 在此感谢原创作者.]
来源: https://www.cnblogs.com/xuliuzai/p/9819905.html