MongoDB实操-副本集 分片 索引
MongoDB实操-副本集 分片 索引
副本集
一主一从(3.4版本)
搭建
docker pull mongo:3.4
#创建yml文件
vi /home/test/monodbtest1/docker-compose.yml
#======================yml文件配置======================
version: '2'
services:
  master:
    image: mongo:3.4
    volumes:
      - /data/mongodbml/master:/data/db
    command: mongod --dbpath /data/db --master
  slaver:
    image: mongo:3.4
    volumes:
      - /data/mongodbml/slaver:/data/db
    command: mongod --dbpath /data/db --slave --source master:27017
    links:
      - master
#======================yml文件配置结束======================
#执行yml文件
docker-compose up -d
进入主节点查看信息
docker-compose exec master mongo
#查看配置
rs.conf() 
#查看副本集状态
rs.status() 
进入从挂载主节点
docker-compose exec slaver mongo
rs.slaveOk()
故障测试
docker-compose stop master
经测试,主节点宕机,从节点无法写入。
一主两从(3.4版本)
搭建
version: '2'
services:
  rs1:
    image: mongo:3.4
    volumes:
      - /data/mongodbtest/replset/master:/data/db
    command: mongod --dbpath /data/db --replSet myset
  rs2:
    image: mongo:3.4
    volumes:
      - /data/mongodbtest/replset/slaver1:/data/db
    command: mongod --dbpath /data/db --replSet myset
  rs3:
    image: mongo:3.4
    volumes:
      - /data/mongodbtest/replset/slaver2:/data/db
    command: mongod --dbpath /data/db --replSet myset
各节点配置
进入主节点
rs.initiate()
rs.add('slaver1:27017')
rs.add('slaver2:27017')
进入从节点配置
rs.slaveOk()
经测试,主节点宕机,从节点重新被选举为主节点,主节点再次启动,成为从节点。
一主一从一仲裁(3.4版本)
搭建
version: '2'
services:
  master:
    image: mongo:3.4
    volumes:
      - /data/mongodb3node/replset/rs1:/data/db
    command: mongod --dbpath /data/db --replSet newset --oplogSize 128
  slave:
    image: mongo:3.4
    volumes:
      - /data/mongodb3node/replset/rs2:/data/db
    command: mongod --dbpath /data/db --replSet newset --oplogSize 128
  myarbiter:
    image: mongo:3.4
    command: mongod --dbpath /data/db --replSet newset --smallfiles --oplogSize 128
配置节点
主节点
docker-compose exec master mongo
rs.initiate()
rs.add('slave:27017')
rs.add('myarbiter:27017',true)//设置为仲裁节点
从节点、仲裁节点配置
rs.slaveOk()
多节点(lastest)
创建容器
docker run --name mongo0 -p 27010:27017  -d mongo:lastest mongod --replSet "rs"
docker run --name mongo1 -p 27011:27017  -d mongo:lastest mongod --replSet "rs"
docker run --name mongo2 -p 27012:27017  -d mongo:lastest mongod --replSet "rs"
进入主节点配置
#进入mongo1容器
docker exec -ti mongo1 /bin/bash
#连接mondb
mongo 
#初始化副本集
rs.initiate({"_id": "rs", "members": [{"_id":0, "host":"10.168.1.130:27010"}, {"_id":1, "host":"10.168.1.130:27011"}, {"_id":2, "host":"10.168.1.130:27012","arbiterOnly":true}]})
exit
mongo
rs.conf()
"arbiterOnly":true 为仲裁配置
分片
yml创建
version: '2'
services:
  shard1:
    image: mongo:4.0.5
    container_name: mongo_shard1
    command: mongod --shardsvr --directoryperdb --replSet shard1
    volumes:
      - /etc/localtime:/etc/localtime
      - /data/base/fates/mongo/shard1:/data/db
    privileged: true 
    networks:
      - mongo   
  shard2:
    image: mongo:4.0.5
    container_name: mongo_shard2
    command: mongod --shardsvr --directoryperdb --replSet shard2
    volumes:
      - /etc/localtime:/etc/localtime
      - /data/base/fates/mongo/shard2:/data/db
    privileged: true 
    networks:
      - mongo
  shard3:
    image: mongo:4.0.5
    container_name: mongo_shard3
    command: mongod --shardsvr --directoryperdb --replSet shard3
    volumes:
      - /etc/localtime:/etc/localtime
      - /data/base/fates/mongo/shard3:/data/db
    privileged: true 
    networks:
      - mongo
  config1:
    image: mongo:4.0.5
    container_name: mongo_config1
    command: mongod --configsvr --directoryperdb --replSet fates-mongo-config --smallfiles
    volumes:
      - /etc/localtime:/etc/localtime
      - /data/base/fates/mongo/config1:/data/configdb
    networks:
      - mongo
  config2:
    image: mongo:4.0.5
    container_name: mongo_config2
    command: mongod --configsvr --directoryperdb --replSet fates-mongo-config --smallfiles
    volumes:
      - /etc/localtime:/etc/localtime
      - /data/base/fates/mongo/config2:/data/configdb
    networks:
      - mongo
  config3:
    image: mongo:4.0.5
    container_name: mongo_config3
    command: mongod --configsvr --directoryperdb --replSet fates-mongo-config --smallfiles
    volumes:
      - /etc/localtime:/etc/localtime
      - /data/base/fates/mongo/config3:/data/configdb
    networks:
      - mongo
  mongos:
    image: mongo:4.0.5
    container_name: mongo_mongos
    command: mongos --configdb fates-mongo-config/config1:27019,config2:27019,config3:27019 --bind_ip 0.0.0.0 --port 27017
    ports:
     - 27017:27017
    volumes:
      - /etc/localtime:/etc/localtime
    depends_on:
      - config1
      - config2
      - config3
    networks:
      - mongo    
networks:
  mongo:
    driver: bridge
执行
docker network create mongo
编写运行脚本
docker-compose  up -d
sleep 30s
docker-compose  exec config1 bash -c "echo 'rs.initiate({_id: \"fates-mongo-config\",configsvr: true, members: [{ _id : 0, host : \"config1:27019\" },{ _id : 1, host : \"config2:27019\" }, { _id : 2, host : \"config3:27019\" }]})' | mongo --port 27019"
docker-compose  exec shard1 bash -c "echo 'rs.initiate({_id: \"shard1\",members: [{ _id : 0, host : \"shard1:27018\" }]})' | mongo --port 27018"
docker-compose  exec shard2 bash -c "echo 'rs.initiate({_id: \"shard2\",members: [{ _id : 0, host : \"shard2:27018\" }]})' | mongo --port 27018"
docker-compose  exec shard3 bash -c "echo 'rs.initiate({_id: \"shard3\",members: [{ _id : 0, host : \"shard3:27018\" }]})' | mongo --port 27018"
docker-compose  exec mongos bash -c "echo 'sh.addShard(\"shard1/shard1:27018\")' | mongo"
docker-compose  exec mongos bash -c "echo 'sh.addShard(\"shard2/shard2:27018\")' | mongo"
docker-compose  exec mongos bash -c "echo 'sh.addShard(\"shard3/shard3:27018\")' | mongo"
替换文本的换行等字符串
sed -i 's/\r$//'  deploy-and-start.sh
运行脚本
sh deploy-and-start.sh
进入容器&进入mongo
docker exec -it mongo_mongos bash
mongo --host 10.168.1.130 --port 27017
使用分片创建数据库
sh.enableSharding("mongodbDemo")
对_id 进行哈希分片:
sh.shardCollection("mongodbDemo.order", {"_id": "hashed" }) 
刷新路由
db.adminCommand("flushRouterConfig")
让当前分片支持平衡
sh.enableBalancing("mongodbDemo.order")
开启平衡
sh.startBalancer() 
查看详细分片信息
sh.status({"verbose":1})
插入数据
use mongodbDemo
for (i = 1;i <= 100;i=i+1){
db.order.insert({'price': 1})
}
查看该表分片数据信息
db.order.getShardDistribution()
索引
创建索引
db.collection.createIndex({stuNo:20210101}{background:true,expireAfterSeconds:200,name:"ix_sno",unique:true});
执行计划分析
db.collection.find({stuNo:20210602}).explain('executionStats');
查看索引
db.collection.getIndexes()
mongo-express
web版本的mongo图形界面工具
docker run -it --rm \
    --name mongo-express \
    -p 8081:8081 \
    -e ME_CONFIG_OPTIONS_EDITORTHEME="ambiance" \
    -e ME_CONFIG_MONGODB_SERVER="10.168.1.130" \
  -e ME_CONFIG_MONGODB_PORT="27017"          \
    -e ME_CONFIG_BASICAUTH_USERNAME="admin" \
    -e ME_CONFIG_BASICAUTH_PASSWORD="admin" \
    mongo-express

 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号