docker-compose搭建mongoDB副本集(1主+1副+1仲裁)

一、基本概念

1、副本集:一个副本集就是一组MongoDB实例组成的集群,由一个主(Primary)服务器和多个备份(Secondary)服务器构成

2、主节点(master):主节点接收所有写入操作。主节点将对其数据集所做的所有更改记录到其 oplog。

3、副节点(secondary):复制主节点的 oplog 并将操作应用到其数据集,如果主节点不可用,一个合格的副节点将被选为新的主节点。

4、仲裁节点(arbiter):负载选举,当主节点不可用,它将从副节点中选一个作为主节点。

二、部署副本集

1、下载monodb镜像,我这里版本为:3.2.11

2、创建三个mongodb的数据目录:

mkdir -p /home/mongodb-cluster/data/master
mkdir -p /home/mongodb-cluster/data/secondary
mkdir -p /home/mongodb-cluster/data/arbiter

3、编写docker-compose.yml

version: ‘2.1‘
services:
  master:
    image: mongodb:3.2.11
    container_name: master
    restart: always
    ports:
      - 27017:27017
    volumes:
      - ./data/master:/data/db
    command: mongod --dbpath /data/db --replSet testSet --oplogSize 128
    environment:
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: 12345678
  secondary:
    image: mongodb:3.2.11
    container_name: secondary
    restart: always
    ports:
      - 27018:27017
    volumes:
      - ./data/secondary:/data/db
    command: mongod --dbpath /data/db --replSet testSet --oplogSize 128
    environment:
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: 12345678
  arbiter:
    image: mongodb:3.2.11
    container_name: arbiter
    restart: always
    volumes:
      - ./data/arbiter:/data/db
    command: mongod --replSet testSet --smallfiles --oplogSize 128

4、启动

docker-compse up -d

5、配置副本集

1)进入容器内部:

docker exec -it master mongo

2)在mongo shell里面执行:rs.initiate()

3)继续执行:rs.add(‘secondary:27017‘)  表示将secondary添加进副本集

4)继续执行:rs.add(‘arbiter:27017‘,true)   其中true表示这个节点是仲裁节点

5)查看配置

testSet:PRIMARY> rs.conf()
{
    "_id" : "testSet",
    "version" : 3,
    "protocolVersion" : NumberLong(1),
    "members" : [
        {
            "_id" : 0,
            "host" : "9c3bf874c72c:27017",
            "arbiterOnly" : false,
            "buildIndexes" : true,
            "hidden" : false,
            "priority" : 1,
            "tags" : {

            },
            "slaveDelay" : NumberLong(0),
            "votes" : 1
        },
        {
            "_id" : 1,
            "host" : "secondary:27017",
            "arbiterOnly" : false,
            "buildIndexes" : true,
            "hidden" : false,
            "priority" : 1,
            "tags" : {

            },
            "slaveDelay" : NumberLong(0),
            "votes" : 1
        },
        {
            "_id" : 2,
            "host" : "arbiter:27017",
            "arbiterOnly" : true,
            "buildIndexes" : true,
            "hidden" : false,
            "priority" : 1,
            "tags" : {

            },
            "slaveDelay" : NumberLong(0),
            "votes" : 1
        }
    ],
    "settings" : {
        "chainingAllowed" : true,
        "heartbeatIntervalMillis" : 2000,
        "heartbeatTimeoutSecs" : 10,
        "electionTimeoutMillis" : 10000,
        "getLastErrorModes" : {

        },
        "getLastErrorDefaults" : {
            "w" : 1,
            "wtimeout" : 0
        },
        "replicaSetId" : ObjectId("5c6fb85fb21aeac107319862")
    }
}

6)查看状态

testSet:PRIMARY> rs.status()
{
    "set" : "testSet",
    "date" : ISODate("2019-02-22T08:58:02.662Z"),
    "myState" : 1,
    "term" : NumberLong(1),
    "heartbeatIntervalMillis" : NumberLong(2000),
    "members" : [
        {
            "_id" : 0,
            "name" : "9c3bf874c72c:27017",
            "health" : 1,
            "state" : 1,
            "stateStr" : "PRIMARY",
            "uptime" : 511,
            "optime" : {
                "ts" : Timestamp(1550825820, 1),
                "t" : NumberLong(1)
            },
            "optimeDate" : ISODate("2019-02-22T08:57:00Z"),
            "electionTime" : Timestamp(1550825567, 2),
            "electionDate" : ISODate("2019-02-22T08:52:47Z"),
            "configVersion" : 3,
            "self" : true
        },
        {
            "_id" : 1,
            "name" : "secondary:27017",
            "health" : 1,
            "state" : 2,
            "stateStr" : "SECONDARY",
            "uptime" : 117,
            "optime" : {
                "ts" : Timestamp(1550825820, 1),
                "t" : NumberLong(1)
            },
            "optimeDate" : ISODate("2019-02-22T08:57:00Z"),
            "lastHeartbeat" : ISODate("2019-02-22T08:58:02.542Z"),
            "lastHeartbeatRecv" : ISODate("2019-02-22T08:58:01.545Z"),
            "pingMs" : NumberLong(0),
            "syncingTo" : "9c3bf874c72c:27017",
            "configVersion" : 3
        },
        {
            "_id" : 2,
            "name" : "arbiter:27017",
            "health" : 1,
            "state" : 7,
            "stateStr" : "ARBITER",
            "uptime" : 62,
            "lastHeartbeat" : ISODate("2019-02-22T08:58:02.542Z"),
            "lastHeartbeatRecv" : ISODate("2019-02-22T08:58:00.599Z"),
            "pingMs" : NumberLong(0),
            "configVersion" : 3
        }
    ],
    "ok" : 1
}

三、验证mongdb可用性:

由上测试可知:副节点只能读,不能写

原文地址:https://www.cnblogs.com/boshen-hzb/p/10419760.html

时间: 2024-10-25 15:52:32

docker-compose搭建mongoDB副本集(1主+1副+1仲裁)的相关文章

MongoDB副本集(一主两从)读写分离、故障转移功能环境部署记录

Mongodb是一种非关系数据库(NoSQL),非关系型数据库的产生就是为了解决大数据量.高扩展性.高性能.灵活数据模型.高可用性.MongoDB官方已经不建议使用主从模式了,替代方案是采用副本集的模式.主从模式其实就是一个单副本的应用,没有很好的扩展性和容错性,而Mongodb副本集具有多个副本保证了容错性,就算一个副本挂掉了还有很多副本存在,主节点挂掉后,整个集群内会实现自动切换. Mongodb副本集的工作原理客户端连接到整个Mongodb副本集,不关心具体哪一台节点机是否挂掉.主节点机负

docker中部署mongodb副本集

1.基本信息如下 服务器地址 192.168.73.129 副本集名称 rs 容器节点及端口映射 m0 37017:27017 m1 47017:27017 m2 57017:27017 注:机器环境安装docker 2.部署步骤 2.1下载mongo镜像 docker pull mongo 2.2 启动三个节点 docker run --name m0 -p 37017:27017 -d mongo --replSet "rs" docker run --name m1 -p 470

linux下搭建mongodb副本集

1.搭建三台mongodb服务器 cd /usr/local mkdir mongodb tar -zxvf mongodb-linux-x86_64-2.6.7.tgz cd mongodb-linux-x86_64-2.6.7 mv * /usr/local/mongodb cd /usr/local/mongodb mkdir data touch logs cd bin ./mongod -dbpath=/usr/local/mongodb/data -logpath=/usr/loca

MongoDB副本集搭建及备份恢复

一.MongoDB副本集(repl set)介绍 早起版本使用master-slave,一主一从和MySQL类似,但slave在此架构中为只读,当主库宕机后,从库不能自动切换为主: 目前已经淘汰了master-slave模式,改为副本集,这种模式下有一个主(primary),和多个从(secondary),只读,支持给他们设置权重,当主宕掉后,权重最高的从切换为主: 在此架构中还可以建立一个仲裁(arbiter)的角色,它只负责裁决,而不存储数据 在此架构中读写数据都是在主上,要想实现负载均衡的

mongodb副本集搭建过程中的问题和解决技巧

在我以往的认知中,一个系统一旦正式上线,多半不会轻易的迁移服务器,尤其是那种涉及到多个关联应用,涉及到多台硬件服务器的系统,因为这种迁移将是牵一发而动全身的. 但是,却仍然有这种情况存在,就如我这几天主要负责的事,就是一个系统的全部服务器迁移中的部分机器迁移,还有一部分由别人负责. 这个系统涉及到flume数据采集,storm数据分析,rabbitmq消息分发,ehcache缓存提升系统性能,mongodb副本集存储数据,tomcat管理系统应用等,架构基本如下: 而这里我主要负责的是rabbi

Mongodb 副本集+分片集群搭建

环境需求: 在三台机器上搭建副本集,在副本集上做分片 服务器IP: 192.168.1.232/192.168.1.238/192.168.1.241 安装Mongodb all nodes: tar zxvf mongodb-linux-x86_64-rhel62-3.4.4.tgz cp -rvf  mongodb-linux-x86_64-rhel62-3.4.4  /opt/mongodb_3.4.4 cd /opt/mongodb_3.4.4/ mkdir -pv conf logs

MongoDB 副本集+分片 认证方式搭建

MongoDB 副本集+分片 认证方式搭建 参考资料: https://www.cnblogs.com/ityouknow/p/7344005.htmlhttps://jorwen-fang.iteye.com/blog/2031756https://www.cnblogs.com/bjx2020/p/9350232.htmlhttps://www.jb51.net/article/161315.htmhttps://blog.51cto.com/beigai/1751381 环境规划: 服务器

[ MongoDB ] 副本集的搭建及测试

Replica Sets  复制 (副本集) node1: 10.0.0.10node2: 10.0.0.11node3: 10.0.0.12 副本集结构图: MongoDB程序,配置文件,启动脚本地址:链接:http://pan.baidu.com/s/1hslX7Ju 密码:jlei node1 部署: # 拷贝到其他两个节点上. [[email protected] ~]# scp mongodb-linux-x86_64-rhel62-3.2.8.tgz 10.0.0.11:/root/

Mongodb副本集实现

MongoDB副本集概述 以下图片摘自MongoDB官方文档:http://docs.mongodb.org/manual/core/replication-introduction/ Primary节点接收客户端所有的写操作,整个副本集只会有一个primary节点.MongoDB副本集提供严格的一致性.主节点将所有的操作写入一个叫oplog的capped collection(这个collection的大小一般为磁盘剩余空间的5%,不同的系统可能不一样,详见http://docs.mongod