暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Docker-compose方式部署MongoDB副本集

IT那活儿 2023-08-18
1016
点击上方“IT那活儿”公众号,关注后了解更多内容,不管IT什么活儿,干就完了!!!

MongoDB副本集概念

1.1 MongoDB复制结构图

1.2 mongodb概念

mongodb是一个nosql数据库,它有高性能、无模式、文档型的特点。他是nosql数据库中功能最丰富,最像关系数据库的,数据结构和JSON基本一样。

副本集具有自动故障恢复的功能。

副本集和主从集群最大的区别就是副本集没有固定的“主节点”;整个集群会选出一个“主节点”,当其挂掉后,又在剩下的从节点中选中其他节点为“主节点”,副本集总有一个活跃节点(primary)和一个或多个备份节点(secondary)。

mongodb副本集至少需要两个节点。其中一个是主节点,负责处理客户端请求,其余的都是副本节点,负责复制主节点上的数据。

副本集包括三种节点:主节点、副本节点、仲裁节点

  • 主节点负责处理客户端请求,读、写数据,记录在其上所有操作的 oplog。

  • 从节点通过获取主节点oplog记录的操作内容以维护相同的数据集,即备份数据,不可写操作,但可以读操作(需要配置),是默认的从节点类型。

  • 仲裁节点不复制数据,仅参与投票。

MongoDB副本集部署

2.1 这里准备三台虚拟机进行副本集搭建

  • xxx.xxx.3.101    primary

  • xxx.xxx.3.102    secondary

  • xxx.xxx.3.103    secondary

2.2 在对应服务器上新增mongodb compose文件

注意:请根据实际服务器规划,拷贝docker-compose文件到对应的服务器上。

# xxx.xxx.3.101

$ vi docker-compose-mongodb-101.yml

version: ‘3.6
services:
  mongo-1:
   container_name: mongodb4.2.9-1
   image: xxx.xxx.0.134:9122/voiceprint_library/mongo-replset:v4.2.9
   restart: always
   ports:
      - 27017:27017  
   volumes:
      - data/mongodb4.2.9-1/data/:/data/
      - /etc/localtime:/etc/localtime
   environment:
      TZ: Asia/Shanghai
   command: --port "27017" --replSet rs

# xxx.xxx.3.102

$ vi docker-compose-mongodb-102.yml

version: ‘3.6
services:
  mongo-2:
   container_name: mongodb4.2.9-2
   image: mongo:4.2.9
   restart: always
   ports:
      - 27017:27017  
   volumes:
      - /data/mongodb4.2.9-2/data/:/data/
      - /etc/localtime:/etc/localtime
   environment:
      TZ: Asia/Shanghai
   command: --port "27017" --replSet rs

# xxx.xxx.3.103

$ vi docker-compose-mongodb-103.yml

version: ‘3.6
services:
  mongo-3:
   container_name: mongodb4.2.9-3
   image: mongo:4.2.9
   restart: always
   ports:
      - 27017:27017  
   volumes:
      - /data/mongodb4.2.9-3/data/:/data/
      - /etc/localtime:/etc/localtime
   environment:
      TZ: Asia/Shanghai
   command: --port "27017" --replSet rs

2.3 在三台虚拟机上分别执行docker-compose命令后台运行mongodb容器

$ docker-compose -f docker-compose-mongodb-101/102/103.yml up -d

2.4 登录mongodb主库配置副本集信息

1)登录xxx.xxx.3.101服务器执行命令进入主节点容器的shell

$ docker exec -it mongodb4.2.9-1 /bin/bash

2)ip及端口根据实际项目地址修改

$ mongo
$ use admin
$ var config={
     _id:"rs",
     members:[
         {_id:0,host:"xxx.xxx.1.101:27017"},
         {_id:1,host:"xxx.xxx.1.102:27017"},
         {_id:2,host:"xxx.xxx.1.103:27017"}
 ]};

3)初始化副本集配置

$ rs.initiate(config)

4)开启权限验证,新建账号密码为admin的账户

$ db.createUser({user:"admin",pwd:"mongodb",roles:[{role:"root",db:"admin"}]})

5)验证用户

$ db.auth("admin","mongodb")

6)查看副本集状态

$ rs.status()

7)mongodb数据库修改内存大小限制,修改方法(具体大小设置根据服务器内存大小确定,临时修改重启失效)

  • 临时修改

$ db.adminCommand({setParameter: 1, wiredTigerEngineRuntimeConfig: "cache_size=10G"})
  • 永久修改(compose文件command列加上 --wiredTigerCacheSizeGB 10),例:

command: --port "27017" --replSet rs --wiredTigerCacheSizeGB 10

2.5 新增成员到副本集

1)启动新节点(新节点的版本、配置建议与原集群一致

例如,原节点的版本是4.2.9,新节点版本一致,然后启动新节点!

# xxx.xxx.3.104

$ vi docker-compose-mongodb-104.yml

version: ‘3.6
services:
  mongo-3:
   container_name: mongodb4.2.9-4
   image: mongo:4.2.9
   restart: always
   ports:
      - 27017:27017  
   volumes:
      - /data/mongodb4.2.9-4/data/:/data/
      - /etc/localtime:/etc/localtime
   environment:
      TZ: Asia/Shanghai
   command: --port "27017" --replSet rs

$ docker-compose -f docker-compose-mongodb-104.yml up -d

2)将新节点添加至集群

在主库上执行rs.add()将新节点添加进集群中。

生产环境添加节点时,建议将priority及votes设为0,即不会选为主(priority默认1),也没有投票特性(votes默认1,有投票权)。

$ rs.add( { host: "xxx.xxx.1.104:27017", priority: 0, votes: 1 } )

3)查看副本集状态

$ rs.status() # 查看状态信息,发现新节点已经加入集群。


END


本文作者:事业二部(上海新炬中北团队)

本文来源:“IT那活儿”公众号

文章转载自IT那活儿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论