游戏人生
首页
(current)
GameDevTools
登陆
|
注册
个人中心
注销
MongoDB 教程
MongoDB 教程
MongoDB Linux安装教程
MongoDB 外网连接
MongoDB 修改端口
MongoDB 复制集(主从)
MongoDB 备份与恢复
MongoDB 密码认证
MongoDB 配置文件
<< MongoDB 修改端口
MongoDB 备份与恢复 >>
MongoDB 复制集(副本集/主从/备份)
mongodb复制集(副本集) 类似于Mysql的主从关系。要组成复制集,至少需要2个mongodb实例: 1. Primary(主) 2. Secondary(从) 客户端的读写操作,都在Primary实例中进行处理。 Primary实例中的写数据操作,通过Oplog 同步到Secodary实例。  相比Mysql主从关系,mongodb复制集可以做到故障转移。 mongodb复制集主节点只有一个,当主节点故障时,从节点会投票选举出新的主节点。 旧的主节点恢复后,身份变为从节点。 要实现故障转移,那么至少需要 1个主节点、2个从节点。因为一个从节点是没办法投票的,仅剩下一个从节点,就不再是复制集,此时陷入宕机。 ------------ ####1.创建mongodb复制集 我这里创建由 3个节点组成的mongodb复制集,这样可以测试故障转移。 1. 127.0.0.1:27017 Primary 2. 127.0.0.1:27018 Secondary 3. 127.0.0.1:27018 Secondary 启动Primary节点(127.0.0.1:27017): ./mongod --port 27017 --dbpath "./data/db_27017" --replSet testrs 启动 Secondary节点(127.0.0.1:27018): ./mongod --port 27018 --dbpath "./data/db_27018/" --replSet testrs 启动 Secondary节点(127.0.0.1:27019): ./mongod --port 27019 --dbpath "./data/db_27019/" --replSet testrs 启动mongo客户端,连接到 Primary节点(127.0.0.1:27017): ./mongo --port 27017  当前节点还是单独的mongodb实例,还不属于复制集成员。 创建复制集: rs.initiate()  创建复制集后当前节点是Secondary从节点身份。 添加 Secondary 节点: rs.add("127.0.0.1:27018")  添加一个节点后当前节点变为Primary节点。 继续添加 Secondary 节点: rs.add("127.0.0.1:27019")  这样,mongodb复制集就创建好了。 ------------ ####2.测试插入数据、查询数据 仍然在 Primary节点(127.0.0.1:27017) 进行操作。 切换到数据库 `thisisgame`: use thisisgame 创建集合: db.createCollection("tutorials")  插入数据: db.tutorials.insert({title:"title1"})  查询数据:  ------------ ####3.测试故障转移 mongodb复制集主节点只有一个,当主节点故障时,从节点会投票选举出新的主节点。 旧的主节点恢复后,身份变为从节点。 <font color=red> 注意: 1. 主节点故障后,要过一段时间才会选出新的主节点,并不是实时的。 2. 主节点唯一但不固定,所以客户端一定要连接复制集而不是连接到主节点。 </font> 首先使用mongo 客户端连接到 从节点 (127.0.0.1:27018 Secondary): ./mongo --port 27018  关闭主节点 (127.0.0.1:27017),其余2个从节点开始死循环连接主节点。  开启mongo客户端连接到其他节点,输入命令`rs.status() `查询当前复制集的主节点是谁。  查询到 当前主节点是 (127.0.0.1:27018 Secondary)。 到 节点 (127.0.0.1:27018 Secondary)的客户端随便输入一个命令,发现已经升级为主节点:  MongoDB完成了故障转移。 ####4.高可用 上面测试证实了MongoDB复制集在主节点怠机时,会自动选举一个从节点,提升为主节点。 那么这个MongoDB复制集就是高可用状态了,下面以连接复制集的形式来测试高可用。 使用mongo客户端,连接复制集: ./mongo "mongodb://127.0.0.1:27017,127.0.0.1:27018,127.0.0.1:27019/myDB?replicaSet=testrs"  然后查看当前复制集状态,看看谁是主节点。 rs.status()  可以看到,localhost:27017 是主节点。 关掉这个节点,然后再次查询复制集状态。 这时提示当前主节点怠机了,网络连接失败,命令无法执行。 <font color=red>注意:此时,MongoDB复制集处于不可用状态</font>  再一次查询复制集状态,此时复制集选举出了新的主节点,MongoDB复制集处于正常工作状态。  > MongoDB复制集在主节点怠机状态下,从节点选举出新的主节点。这中间这段时间,我这里测试大概在1s左右,官网文档介绍是,与主节点心跳包超时10s就会重新选举新的主节点。 >官网文档地址:https://docs.mongodb.com/manual/core/replica-set-elections/
<< MongoDB 修改端口
MongoDB 备份与恢复 >>
提交
5e7b29055583ae256cb1c18d