基于docker-compose的mongo分片集群——Composing a Sharded MongoDB Cluster on Docker Containers

编排mongodb的分片集群
mongodb版本:3.6.17 4.4.0

规划:
配置服务器3台
分片服务器2个—每个副本集包含3个实例
Mongos连接服务器2个—高可用
github地址案例
最新git
http://gitlab.allonone.top:33332/root/mongodb-sharded-cluster-docker-compose.git
先启动所有节点
vim docker-compose.yml

version: '3.7'
services:
  mongors1n1:
    container_name: mongors1n1
    image: mongo:3
    command: mongod --shardsvr --replSet mongors1 --dbpath /data/db --port 27017
    ports:
      - 27027:27017
    expose:
      - "27017"
    environment:
      TERM: xterm
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /mongo3_cluster/data1:/data/db
  mongors1n2:
    container_name: mongors1n2
    image: mongo:3
    command: mongod --shardsvr --replSet mongors1 --dbpath /data/db --port 27017
    ports:
      - 27037:27017
    expose:
      - "27017"
    environment:
      TERM: xterm
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /mongo3_cluster/data2:/data/db
  mongors1n3:
    container_name: mongors1n3
    image: mongo:3
    command: mongod --shardsvr --replSet mongors1 --dbpath /data/db --port 27017
    ports:
      - 27047:27017
    expose:
      - "27017"
    environment:
      TERM: xterm
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /mongo3_cluster/data3:/data/db
  mongors1n4:
    container_name: mongors1n4
    image: mongo:3
    command: mongod --shardsvr --replSet mongors2 --dbpath /data/db --port 27017
    ports:
      - 27057:27017
    expose:
      - "27017"
    environment:
      TERM: xterm
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /mongo3_cluster/data4:/data/db
  mongors1n5:
    container_name: mongors1n5
    image: mongo:3
    command: mongod --shardsvr --replSet mongors2 --dbpath /data/db --port 27017
    ports:
      - 27067:27017
    expose:
      - "27017"
    environment:
      TERM: xterm
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /mongo3_cluster/data5:/data/db
  mongors1n6:
    container_name: mongors1n6
    image: mongo:3
    command: mongod --shardsvr --replSet mongors2 --dbpath /data/db --port 27017
    ports:
      - 27077:27017
    expose:
      - "27017"
    environment:
      TERM: xterm
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /mongo3_cluster/data6:/data/db







  mongocfg1:
    container_name: mongocfg1
    image: mongo:3
    command: mongod --configsvr --replSet mongors1conf --dbpath /data/db --port 27017
    environment:
      TERM: xterm
    expose:
      - "27017"
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /mongo3_cluster/config1:/data/db
  mongocfg2:
    container_name: mongocfg2
    image: mongo:3
    command: mongod --configsvr --replSet mongors1conf --dbpath /data/db --port 27017
    environment:
      TERM: xterm
    expose:
      - "27017"
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /mongo3_cluster/config2:/data/db
  mongocfg3:
    container_name: mongocfg3
    image: mongo:3
    command: mongod --configsvr --replSet mongors1conf --dbpath /data/db --port 27017
    environment:
      TERM: xterm
    expose:
      - "27017"
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /mongo3_cluster/config3:/data/db






  mongos1:
    container_name: mongos1
    image: mongo:3
    depends_on:
      - mongocfg1
      - mongocfg2
      - mongocfg3
    command: mongos --configdb mongors1conf/mongocfg1:27017,mongocfg2:27017,mongocfg3:27017 --port 27017 --bind_ip_all
    ports:
      - 27019:27017
    expose:
      - "27017"
    volumes:
      - /etc/localtime:/etc/localtime:ro
  mongos2:
    container_name: mongos2
    image: mongo:3
    depends_on:
      - mongocfg1
      - mongocfg2
      - mongocfg3
    command: mongos --configdb mongors1conf/mongocfg1:27017,mongocfg2:27017,mongocfg3:27017 --port 27017 --bind_ip_all
    ports:
      - 27020:27017
    expose:
      - "27017"
    volumes:
      - /etc/localtime:/etc/localtime:ro
docker-compose up -d 
docker-compose ps
进行集群初始化

1_Starting_script_for_mongo_shard_in_docker.sh

#!/bin/bash
PATH=`pwd`
cd $PATH
/usr/bin/docker-compose down -v
/usr/bin/docker-compose up -d
/usr/bin/docker-compose ps
/usr/bin/sleep  15

2_script_mongo-docker-shard-init.sh

#!/bin/bash
sleep 15
docker_HOME=`which docker`
export PATH=${PATH}
echo  -e "\033[32m--------------------------------------------------------------------------\033[0m"
echo  -e "\033[31mconf sever\033[0m"

docker exec -it mongocfg1 bash -c "echo 'rs.initiate({_id: \"mongors1conf\",configsvr: true, members: [{ _id : 0, host : \"mongocfg1\" },{ _id : 1, host : \"mongocfg2\" }, { _id : 2, host : \"mongocfg3\" }]})' | mongo"

#------------------------------------------------------------------
echo  -e "\033[32m--------------------------------------------------------------------------\033[0m"
echo  -e "\033[31m查看conf sever是否成功添加\033[0m"

docker exec -it mongocfg1 bash -c "echo 'rs.status()' | mongo"

#------------------------------------------------------------------
echo  -e "\033[32m--------------------------------------------------------------------------\033[0m"
echo  -e "\033[31m串联副本集为分片1 2\033[0m"

docker exec -it mongors1n1 bash -c "echo 'rs.initiate({_id : \"mongors1\", members: [{ _id : 0, host : \"mongors1n1\" },{ _id : 1, host : \"mongors1n2\" },{ _id : 2, host : \"mongors1n3\" }]})' | mongo"


docker exec -it mongors1n4 bash -c "echo 'rs.initiate({_id : \"mongors2\", members: [{ _id : 0, host : \"mongors1n4\" },{ _id : 1, host : \"mongors1n5\" },{ _id : 2, host : \"mongors1n6\" }]})' | mongo"

#---------------------------------------------------------------
echo  -e "\033[32m--------------------------------------------------------------------------\033[0m"
echo  -e "\033[31m查看shard1、2是否成功串联\033[0m"
docker exec -it mongors1n1 bash -c "echo 'rs.status()' | mongo"
docker exec -it mongors1n4 bash -c "echo 'rs.status()' | mongo"

#---------------------------------------------------------------------
echo  -e "\033[32m--------------------------------------------------------------------------\033[0m"
echo  -e "\033[31m添加分片到conf server\033[0m"

docker exec -it mongos1 bash -c "echo 'sh.addShard(\"mongors1/mongors1n1\")' | mongo "

docker exec -it mongos1 bash -c "echo 'sh.addShard(\"mongors2/mongors1n4\")' | mongo "

#-----------------------------------------------------------------------
echo  -e "\033[32m--------------------------------------------------------------------------\033[0m"
echo  -e "\033[31m查看分片shard1、2是否成功添加\033[0m"

docker exec -it mongos1 bash -c "echo 'sh.status()' | mongo "

docker exec -it mongos2 bash -c "echo 'sh.status()' | mongo "

#####测试test数据库
mongo --port 27019 < sharding_for_mongos.sql  #27019mongos端口

sharding_for_mongos.sql
插入1001个数据,查看分片状况

sh.enableSharding("test")
sh.shardCollection("test.order", {"_id": "hashed" })
use test
for (i = 1; i <= 1001; i=i+1){   db.order.insert({'price': 1}) }
db.order.find().count()

3_check.sh

#!/bin/bash
count_all=`docker exec -it mongos1 bash -c 'echo "db.order.find().count()"   | mongo' | awk ' NR==5 { print }'`
count_shard1=`docker exec -it mongors1n1  bash -c 'echo "db.order.find().count()"   | mongo' | awk ' NR==5 { print }'`
count_shard2=`docker exec -it mongors1n4  bash -c 'echo "db.order.find().count()"   | mongo' | awk ' NR==5 { print }'`
echo -e "总数据量:\033[31m$count_all\033[0m"
echo -e "shard1:\033[32m$count_shard1\033[0m"
echo -e "shard2:\033[32m$count_shard2\033[0m"

参考:https://dzone.com/articles/composing-a-sharded-mongodb-on-docker

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值