在 Docker 中搭建 mongodb 副本集

在Docker中搭建mongodb副本集

拉取 Mongodb 镜像

docker pull mongo

创建要挂载的文件夹

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

创建 docker-compose.yaml 文件

vim docker-compose.yaml

# ----------------------- 内容开始 -------------------------

version: '2.1'
services:
  master:
    image: mongo
    container_name: master
    restart: always
    ports:
      - 27017:27017
    volumes:
      - ./data/master:/data/db
    command: mongod --dbpath /data/db --replSet testSet --oplogSize 128
  secondary:
    image: mongo
    container_name: secondary
    restart: always
    ports:
      - 27018:27017
    volumes:
      - ./data/secondary:/data/db
    command: mongod --dbpath /data/db --replSet testSet --oplogSize 128
  arbiter:
    image: mongo
    container_name: arbiter
    restart: always
    ports:
      - 27019:27017
    volumes:
      - ./data/arbiter:/data/db
    command: mongod --replSet testSet --oplogSize 128
    
# ----------------------- 内容结束 -------------------------

# 运行 docker-compose.yaml 文件
docker-compose up -d
# 停止并删除由 docker-compose 创建出来的容器
# docker-compose down

配置副本集

# 进入 docker 容器内部
docker exec -it master mongo

# 初始化副本集
rs.initiate()

# 表示将secondary添加进副本集
rs.add('192.168.20.255:27018')
# 其中true表示这个节点是仲裁节点
rs.add('192.168.20.255:27019',true)

# 查看配置
rs.conf()

# 查看状态
rs.status()

# 如果想要修改副本集的配置,可以采用以下方法:下方该语句表示修改副本集配置中第一个成员的host。
conf=rs.conf()
conf.members[0].host="192.168.20.255:27017"
# 然后调用 reconfig() 函数,将修改好的副本集配置设置进去。
rs.reconfig(conf,{"force":true})

测试

  • 在 secondary 节点输入命令 show databases,发现无法查看,查看报错信息发现:

    "errmsg" : "not master and slaveOk=false"
    
  • 当前从节点只是一个备份,不是奴隶节点,无法读取数据,写当然更不行。因为默认情况下,从节点是没有读写权限的,可以增加读的权限,但需要进行设置:

    # 设置为奴隶节点,允许在从成员上运行读的操作	
    # rs.slaveOk(true) 按回车后发现警告 
    
    # WARNING: slaveOk() is deprecated and may be removed in the next major release. Please use secondaryOk() instead.
    
    # 翻译:警告:slaveOk()已被弃用,并可能在下一个主要版本中删除。 请改用secondaryOk()。所以这里用:
    rs.secondaryOk() 
    
    # 再重新执行 show databases 发现从节点可以执行命令了。
    
    # 取消该节点作为奴隶节点的读权限: rs.secondaryOk(false) 
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值