`

转:MongoDB Replica搭建和测试

阅读更多

环境:

目录结构

/data

|--conf

    |--config.js

    |--node1.cnf

    |--node1.cnf

    |--node1.cnf

|--db

    |--node1

    |--node2

    |--node2

|--key

    |--node1

    |--node2

    |--node3

|--log

    |--node1.log

    |--node2.log

    |--node3.log

|--run

    |--runconfig.sh

   |--runnode1.sh

   |--runnode2.sh

   |--runnode3.sh

 

举几个文件,其他类似:

node1.cnf:

replSet=shard1
#keyFile=/home/madding/output/mongodb/replica_set/key/r0
dbpath=/home/madding/output/mongodb/replica_set/data/r0
logpath=/home/madding/output/mongodb/replica_set/log/r0.log
port=10240

config.js:

var config_rs1={
    _id:'shard1',
    members:[
        {_id:1, host:'192.168.1.100:27011', priority:1},
        {_id:2, host:'192.168.1.100:27012'},
        {_id:3, host:'192.168.1.100:27013'}]
}

rs.initiate(config_rs1);

rs.slaveOk();

printjson('status info:');
printjson(rs.status());

printjson('result info: ');
printjson(rs.isMaster());

 

key/node1
ANKDIUOJHKJDLKFJHDOUDOJFKLDJ

随便复杂,保证node1,node2,node3一致即可

 

runconfig.sh:

#!/bin/bash
MONGODB_HOME=~/mongodb
$MONGODB_HOME/bin/mongo ../conf/config.js --port 27011 --quiet
exit

runnode1:

#!/bin/bash
MONGODB_HOME=~/mongodb
$MONGODB_HOME/bin/mongod -f ../conf/node1.cnf --logappend --fork
exit

运行顺序:

1.分别启动runnode1,runnode2,runnode3 ps看下进程是否都启动成功

2.运行runconfig 如果信息显示正常,说明已经建立成功。

 

 

 

测试场景:

1.kill node1进程:

    mongo客户端:

        自动切换primary; 

        node1客户端可查询,不可插入;

    java驱动:

        采用集群连接,发现可正常查询,插入,业务不受影响  

说明:如果是kill -9方式,可能会导致mongo对应实例下的lock文件还在,删除掉后才能重启,要不然会重启失败

2.恢复node1进程:

   node1 mongod数据同步

  node1没有切换为primary ,主从维持在kill时的水平

3.当两个mongod实例(包括SECONDARY和PRIMARY组合)挂掉,是否可对外提供服务:

    mongo客户端:指定端口的可以连接,但是由于两个挂了导致没办法把SECONDARY切换到PRIMARY,只能查询不能修改

    java驱动:根据现象提示

Exception in thread "main" com.mongodb.MongoException: can't find a master
	at com.mongodb.DBTCPConnector.checkMaster(DBTCPConnector.java:436)
	at com.mongodb.DBTCPConnector.call(DBTCPConnector.java:211)
	at com.mongodb.DBApiLayer$MyCollection.__find(DBApiLayer.java:305)
	at com.mongodb.DBCursor._check(DBCursor.java:369)
	at com.mongodb.DBCursor._hasNext(DBCursor.java:504)
	at com.mongodb.DBCursor.hasNext(DBCursor.java:529)
	at ReplicaSets.main(ReplicaSets.java:57)

也就是此时没办法对外提供服务,虽然还有一个SECONDARY存活

注:如果最后一个保留下来的是PRIMARY,虽然短暂提供服务,但是一会儿后就自动切换为SECONDARY。

4.当两个实例挂掉,重启一个实例,是否可对外提供服务:

    mongo客户端:此时自动切换一台为PRIMARY,查询操作正常

   java驱动:只要设置自动重连,等待几秒即可恢复正常

注:发现在一台机器中操作,过程中出现一个实例把两一个socket端口占用现象,主要是因为web监控的端口,1000间隔。

       建议启动是先启动初始的PRIMARY最后启动

5.两个mongo实例是否可构建replica sets:

基于以上分析,虽然两个能构建复制集,但是由于一个挂掉,另一个自动切换为SECONDARY,做不到热备,因此没有价值。

6.三台同时挂掉,重启是否正常:

三台挂掉,重启后,会出现其中一台recovering,但是之后三台状态就能恢复正常,一个primary,两个secondary

转载原文地址不详,见者请告知。

分享到:
评论

相关推荐

    mongodb Replica Sets +Sharding高可用集群搭建

    在大型分布式系统中,为了实现高可用性和水平扩展,MongoDB提供了两种关键特性:副本集(Replica Sets)和分片(Sharding)。这篇博客将探讨如何搭建MongoDB的副本集和分片集群。 首先,我们来理解一下MongoDB的...

    mongodb高可用完全分布集群搭建

    mongodb集群搭建完成后,需要进行数据库测试和使用,以便验证mongodb的高可用性和高性能。 读和写的分离 mongodb的读和写操作需要分离,以便提高mongodb的高性能和高可用性。 mongodb高可用完全分布集群的搭建...

    MongoDB伪分布集群搭建

    在本文中,我们将深入探讨如何搭建MongoDB的伪分布集群,这对于测试和学习分布式数据库操作非常有帮助。 首先,理解“伪分布集群”意味着在单个机器上模拟多节点的MongoDB集群。这通常是为了在没有多台物理或虚拟...

    mongoDB sharding复制模式搭建官网文档

    - **分片(Shards)**:每个分片都包含数据的一个子集,分片可以是单一的MongoDB实例也可以是一组副本集(Replica Set),后者提供了更高的可用性和数据冗余。 - **配置服务器(Config Servers)**:配置服务器用于...

    单台windows搭建mongoDb主从集群

    在Windows环境中,搭建MongoDB的主从复制集群是一项常见的任务,以实现数据冗余和高可用性。以下是关于"单台windows搭建mongoDb主从集群"的知识点详细说明: 1. **主从复制(Replication)**: MongoDB的主从复制是...

    monggodb集群搭建文档

    本文档将详细介绍如何搭建一个基本的MongoDB集群——即副本集(replica set)。 #### 二、准备工作 **1. 环境准备** 假设您有三台机器,其IP地址分别为: - 192.168.20.195 - 192.168.20.196 - 192.168.20.197 ...

    MongoDB分布式集群搭建

    ### MongoDB分布式集群搭建详解 #### 一、集群与分布式概念 **集群(Cluster)**与**分布式(Distributed)**是两种常见的架构设计模式,用于提高系统的可用性、可伸缩性和性能。 1. **集群(Cluster)** - **定义**:...

    小米电商Mongodb集群文档

    ### 小米电商Mongodb集群文档关键知识点解析 #### 标题与描述解析 - **标题**:“小米科技 电商部门 Mongodb sharding Cluster with Replica ...这对于理解如何高效地搭建和管理大型MongoDB集群具有重要的参考价值。

    centos7+mongodb 3.4 集群搭建:分片+副本集

    在本文档中,我们将详细介绍如何在CentOS 7.0系统上搭建基于MongoDB 3.4.3版本的集群环境,包括分片(sharding)和副本集(replica sets)的配置。本文档将介绍相关概念、环境准备、机器规划及端口分配、集群搭建的...

    C#开发的Mongodb集群自动部署工具

    对于需要快速搭建和维护MongoDB复制集的团队来说,这是一个非常实用的工具。不过,使用时需要注意,虽然自动化可以节省时间,但在生产环境中部署之前,应该先在测试环境中进行充分的验证,确保所有配置和流程都符合...

    mongoDB Replication 复制模式搭建官网文档

    - **复制集(Replica Set)**:这是MongoDB的复制模式,它比传统的主从模式更高级,提供了自动故障转移和更高级的数据一致性保障。 #### 部署模式 - **副本集成员(Replica Set Members)**:这是构成复制集的...

    搭建Nosql MongoDB高可用集群

    为了实现MongoDB的高可用性,MongoDB 3.0及以上版本引入了副本集(Replica Sets)的概念,副本集提供了自动故障转移和数据冗余的功能,是推荐的高可用性解决方案。副本集由一组mongod进程组成,其中一个为primary...

    详解mongoDB主从复制搭建详细过程

    MongoDB的主从复制是一种数据冗余和故障转移机制,它允许数据在多个服务器之间进行复制,确保数据的安全性和可用性。在这个过程中,一个MongoDB实例作为主节点,负责接收所有写操作,而其他实例作为从节点,同步主...

    vagrant-mongodb-cluster::package:使用带有副本集的MongoDB 3节点集群的流浪汉设置

    在本文中,我们将深入探讨如何使用Vagrant工具搭建一个包含三个节点的MongoDB集群,该集群配置为使用副本集进行数据持久化和高可用性。Vagrant是一种流行的开发环境自动化工具,它允许开发者在本地模拟多种操作系统...

    5.2 MongoDB的三种集群模式1

    在测试环境中搭建MongoDB主从集群,需要规划好硬件资源、操作系统、MongoDB版本、数据目录、日志文件、端口等。例如,在本例中,选择了CentOS 6.6 x64作为操作系统,MongoDB 3.6.7作为数据库版本,主节点的IP为10.1....

    深入浅出MongoDB应用实战集群及系统架构

    MongoDB支持多种部署方式,包括单节点部署、副本集(Replica Set)、分片集群(Sharded Cluster)等。其中,副本集和分片集群是构建高可用和高性能MongoDB系统的关键。 ##### 副本集 副本集是MongoDB的一个关键...

    nodejs+ mongoDb全套视频

    《Node.js + MongoDB 全套视频教程》是一套全面、深度解析Node.js和MongoDB的教育资源,旨在帮助开发者从新手成长为全栈工程师的必备宝典。这套教程包含了基础、进阶和高级三个阶段,以及丰富的项目实战环节,覆盖了...

    小米电商Mongodb集群文档v1.0.1

    ### 小米电商Mongodb集群文档v1.0.1 #### 重要知识点解析 **一、MongoDB 分片群集(Sharding Cluster)** **1.... MongoDB 的分片(Sharding...通过遵循这份文档,可以有效地搭建和管理一个高性能的 MongoDB 分片集群。

    NoSQL-MongoDB大型部署详细方案

    在搭建好sharding集群后,需要对集群进行测试,确保读写操作能正确地自动路由到相应的shards。同时,也需要对集群进行维护和扩展,比如添加新的shards、config servers或route servers,以及进行数据备份和灾难恢复...

Global site tag (gtag.js) - Google Analytics