1

mongodb集群搭建方式

1.master-slave 主从复制

目前官方已不推荐使用

2.Replica Sets 副本集

图片描述
MongoDB 的副本集不同于以往的主从模式。
在集群Master故障的时候,副本集可以自动投票,选举出新的Master,并引导其余的Slave服务器连接新的Master,而这个过程对于应用是透明的。可以说MongoDB的副本集,是自带故障转移功能的主从复制。

3.sharding 分片

图片描述
Sharding cluster是一种可以水平扩展的模式,在数据量很大时特给力,实际大规模应用一般会采用这种架构去构建。sharding分片很好的解决了单台服务器磁盘空间、内存、cpu等硬件资源的限制问题,把数据水平拆分出去,降低单节点的访问压力。每个分片都是一个独立的数据库,所有的分片组合起来构成一个逻辑上的完整的数据库。因此,分片机制降低了每个分片的数据操作量及需要存储的数据量,达到多台服务器来应对不断增加的负载和数据的效果

docker-compose搭建mongodb分片集群

1.config server集群搭建

  • docker-compose代码
csrs1:
    image: mongo
    volumes:
      - /home/work/dbdata/mongo/cs/rs1:/data/db
    command: mongod --noauth --bind_ip_all --configsvr --replSet csrs --dbpath /data/db
  csrs2:
    image: mongo
    volumes:
      - /home/work/dbdata/mongo/cs/rs2:/data/db
    command: mongod --noauth --bind_ip_all --configsvr --replSet csrs --dbpath /data/db
  csrs3:
    image: mongo
    volumes:
      - /home/work/dbdata/mongo/cs/rs3:/data/db
    command: mongod --noauth --bind_ip_all --configsvr --replSet csrs --dbpath /data/db
  • 集群节点互联
// 进入primary节点容器(注意一定要是primary节点), config server 默认端口是27019
docker-compose exec csrs1 mongo --port 27019
// 初始化副本集
rs.initiate()
// 将另外两个节点加入到当前的副本集
rs.add('csrs2:27019')
rs.add('csrs3:27019')
// 查看副本集状态
rs.status()

2.shard server集群搭建

  • docker-compose代码
shrs1:
    image: mongo
    volumes:
      - /home/work/dbdata/mongo/sh/rs1:/data/db
    command: mongod --noauth --bind_ip_all --dbpath /data/db --shardsvr --replSet shrs
  shrs2:
    image: mongo
    volumes:
      - /home/work/dbdata/mongo/sh/rs2:/data/db
    command: mongod --noauth --bind_ip_all --dbpath /data/db --shardsvr --replSet shrs
  shrs3:
    image: mongo
    volumes:
      - /home/work/dbdata/mongo/sh/rs3:/data/db
    command: mongod --noauth --bind_ip_all --dbpath /data/db --shardsvr --replSet shrs
  • 集群节点互联
// 进入primary节点容器(注意一定要是primary节点), shard server 默认端口是27018
docker-compose exec shrs1 mongo --port 27018
// 初始化副本集
rs.initiate()
// 将另外两个节点加入到当前的副本集
rs.add('shrs2:27018')
rs.add('shrs3:27018')
// 查看副本集状态
rs.status()

3.router mongos 集群搭建

  • docker-compose代码
mongo:
    image: mongo
    command: mongos --noauth --bind_ip_all --configdb csrs/csrs1:27019,csrs2:27019,csrs3:27019
  • 将mongos连接到shard set
// 进入primary节点容器(注意一定要是primary节点), mongos 默认端口是27017
docker-compose exec mongo mongo --port 27017
// 将另外两个节点加入到当前的副本集
sh.addShard('shrs1:27018')
// 查看副本集状态
sh.status()

3.mongo-express 图形化界面安装

  1. docker-compose代码
  mongo-express:
    image: mongo-express
    restart: always
    ports:
      - 10081:8081
  1. 浏览器连接GUI客户端
localhost:10081

遇到的一些问题

  1. mongo-express连接不上mongos, 启动mongos要加上--bind_ip_all, 否则就只能容器里面才能访问mongos服务
  2. 添加其他节点添加不上, 注意一定要在primary节点添加其他节点, 只有primary节点有权对集群状态做出改变
  3. 当shrad节点只剩下一个活着时, 无法选出新的primary, 这是shard set不能提供服务

宾客斯的美酒
67 声望3 粉丝

每一天都要问问自己, 现在对自己最重要的事是什么? 如果没有去做那件事, 又究竟是为什么?


« 上一篇
golang库收集
下一篇 »
php资源收集