mongo分片集羣搭建

mongodb集羣搭建方式

1.master-slave 主從複製

目前官方已不推薦使用mongodb

2.Replica Sets 副本集

圖片描述
MongoDB 的副本集不一樣於以往的主從模式。
在集羣Master故障的時候,副本集能夠自動投票,選舉出新的Master,並引導其他的Slave服務器鏈接新的Master,而這個過程對於應用是透明的。能夠說MongoDB的副本集,是自帶故障轉移功能的主從複製。docker

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不能提供服務
相關文章
相關標籤/搜索