通过docker-compose快速搭建mongodb副本集

本文介绍了如何通过docker-compose快速搭建mongodb副本集,包括构建镜像、编写docker-compose配置,以及如何添加和管理副本集节点。同时,还提到了使用python进行mongodb的读写分离配置和测试数据同步延迟的方法。
摘要由CSDN通过智能技术生成

转  https://monkeywie.github.io/2020/03/10/mongodb-replica-set/?utm_source=tuicool&utm_medium=referral

前言

mongoDB 提供的副本集是将数据同步至多个节点,提供了数据冗余备份和节点故障的情况下可以自动转移的高可用特性,架构图如下:

有时候需要要在本地搭建一套 mongoDB 副本集环境来做测试,如果用虚拟机的话还是比较麻烦的,这里记录下如何用 docker-compose 快速搭建 mongoDB 副本集。

构建镜像

  1. 准备秘钥用于节点之间的认证
1
openssl rand -base64 756 > auth.key
  1. 编写 Dockerfile

调整 mongo 官方提供的镜像,像里面添加秘钥文件

1
2
3
4
5
6
FROM mongo:3.4.10
#将秘钥文件复制到镜像中
COPY auth.key /app/auth.key
RUN chown -R mongodb:mongodb /app/auth.key
#设置秘钥文件权限,这一步非常关键
RUN chmod 600 /app/auth.key
  1. 构建镜像
1
docker build -t mongo-replset .
  1. 编写 docker-compose

开启三个容器,组成一主两从的副本集集群,另外再开启一个容器监听和初始化副本集,这里我的实现方式并不优雅,就是一直重试直到前面三个 mongod 进程启动完成(官方有个解决方案来检测依赖服务的启动,不过有点麻烦这里就略过了),启动完成之后执行副本集初始化命令:mongo mongodb://root:123@mongo-1:27011/admin --eval 'rs.initiate({ _id: "rs", members: [{_id:1,host:"mongo-1:27011"},{_id:2,host:"mongo-2:27012"},{_id:3,host:"mongo-3:27013"}]})'

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
version: "3.1"
services:
  mongo-1:
    image: mongo-replset
    hostname: mongo-1
    restart: always
    ports:
      - 27011:27011
    environment:
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: 123
    command:
      - --port
      - "27011"
      - --replSet
      - rs
      - --keyFile
      - /app/auth.key
  mongo-2:
    image: mongo-replset
    hostname: mongo-2
    restart: always
    ports:
      - 27012:27012
    command:
      - --port
      - "27012"
      - --replSet
      - rs
      - --keyFile
      - /app/auth.key
  mongo-3:
    image: mongo-replset
    hostname: mongo-3
    restart: always
    ports:
      - 27013:27
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值