当前位置:Gxlcms > 数据库问题 > docker-compose 配置 mongodb 副本集/复制集

docker-compose 配置 mongodb 副本集/复制集

时间:2021-07-01 10:21:17 帮助过:6人阅读

-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可用性:

技术图片

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

 

 四.验证主从切换

1.停止PRIMARY

docker stop master

 

 

2.进入SECONDARY查看

docker exec -it secondary bash 
mongo

 

 可以看到SECONDARY已经变成PRIMARY了

 

3.进入PRIMARY查看

再将PRIMARY启动,PRIMARY已经变成SECONDARY了

docker start master

docker exec -it master bash
mongo

 

docker-compose 配置 mongodb 副本集/复制集

标签:ima   members   comm   master   inter   停止   nod   ini   部署   

人气教程排行