ITPub博客

首页 > 数据库 > > docker-compose 一键部署MongoDB

docker-compose 一键部署MongoDB

作者:浪花小雨滴 时间:2020-05-12 11:48:40 0 删除 编辑

首先安装docker和docker-compose,如果不会,请先学习docker把。不然无法一键配置好的东西。

1、创建密文【以后需要增加MongoDB密码访问需要的】
openssl rand -base64 756 > $PWD/mongodbkeyfile
chmod 400 $PWD/mongodbkeyfile

配置说明
分片rs1 别名就是 rs11 rs12 rs13 【内部端口默认是27018】
分片rs2 别名就是 rs21 rs22 rs23 【内部端口默认是27018】
配置cs 别名就是 cs1 cs2 cs3 【内部端口默认是27019】
mongos 别名就是 ms1 【外部访问段端口默认是27017】
结构图
mongos1(27017) shard1(rs1:27018)
---- config services 1 ----
mongos2(27017) shard2(rs2:27018)
---- config services 1 ----
mongosN(27017) shardN(rsN:27018)
---- config services 1(27019 最少3台)

2、废话不说,马上给你docker-compose.yml

version: "3.3"

networks:
  mynetword:
    driver: bridge
    ipam:
     config:
       - subnet: 172.22.0.0/16
        # gateway: 172.19.0.1
       
services:

  rs11:
    image: mongo
    # ports:
    #   - "27018:27018"
    restart: always
    #让容器拥有root权
    privileged: true
    volumes:
      - "$PWD/mongodb/rs11:/data/db"
      - "$PWD/mongodbkeyfile:/mongodbkeyfile"
    command:  /bin/sh -c 'mongod  --shardsvr --replSet "rs1" --bind_ip_all --maxConns 20000'
    # command:  /bin/sh -c 'mongod  --shardsvr --replSet "rs1" --bind_ip_all --maxConns 20000 --auth --keyFile /mongodbkeyfile'
    networks:
      mynetword:
        ipv4_address: 172.22.101.111

  rs12:
    image: mongo
    # ports:
    #   - "27018:27018"
    restart: always
    #让容器拥有root权
    privileged: true
    volumes:
      - "$PWD/mongodb/rs12:/data/db"
      - "$PWD/mongodbkeyfile:/mongodbkeyfile"
    command:  /bin/sh -c 'mongod  --shardsvr --replSet "rs1" --bind_ip_all --maxConns 20000'
    # command:  /bin/sh -c 'mongod  --shardsvr --replSet "rs1" --bind_ip_all --maxConns 20000 --auth --keyFile /mongodbkeyfile'
    networks:
      mynetword:
        ipv4_address: 172.22.101.112

  rs13:
    image: mongo
    # ports:
    #   - "27018:27018"
    restart: always
    #让容器拥有root权
    privileged: true
    volumes:
      - "$PWD/mongodb/rs13:/data/db"
      - "$PWD/mongodbkeyfile:/mongodbkeyfile"
    command:  /bin/sh -c 'mongod  --shardsvr --replSet "rs1" --bind_ip_all --maxConns 20000'
    # command:  /bin/sh -c 'mongod  --shardsvr --replSet "rs1" --bind_ip_all --maxConns 20000 --auth --keyFile /mongodbkeyfile'
    networks:
      mynetword:
        ipv4_address: 172.22.101.113

        
  rs21:
    image: mongo
    # ports:
    #   - "27018:27018"
    restart: always
    #让容器拥有root权
    privileged: true
    volumes:
      - "$PWD/mongodb/rs21:/data/db"
      - "$PWD/mongodbkeyfile:/mongodbkeyfile"
    command:  /bin/sh -c 'mongod  --shardsvr --replSet "rs2" --bind_ip_all --maxConns 20000'
    # command:  /bin/sh -c 'mongod  --shardsvr --replSet "rs2" --bind_ip_all --maxConns 20000 --auth --keyFile /mongodbkeyfile'
    networks:
      mynetword:
        ipv4_address: 172.22.101.121

  rs22:
    image: mongo
    # ports:
    #   - "27018:27018"
    restart: always
    #让容器拥有root权
    privileged: true
    volumes:
      - "$PWD/mongodb/rs22:/data/db"
      - "$PWD/mongodbkeyfile:/mongodbkeyfile"
    command:  /bin/sh -c 'mongod  --shardsvr --replSet "rs2" --bind_ip_all --maxConns 20000'
    # command:  /bin/sh -c 'mongod  --shardsvr --replSet "rs2" --bind_ip_all --maxConns 20000 --auth --keyFile /mongodbkeyfile'
    networks:
      mynetword:
        ipv4_address: 172.22.101.122

  rs23:
    image: mongo
    # ports:
    #   - "27018:27018"
    restart: always
    #让容器拥有root权
    privileged: true
    volumes:
      - "$PWD/mongodb/rs23:/data/db"
      - "$PWD/mongodbkeyfile:/mongodbkeyfile"
    command:  /bin/sh -c 'mongod  --shardsvr --replSet "rs2" --bind_ip_all --maxConns 20000'
    # command:  /bin/sh -c 'mongod  --shardsvr --replSet "rs2" --bind_ip_all --maxConns 20000 --auth --keyFile /mongodbkeyfile'
    networks:
      mynetword:
        ipv4_address: 172.22.101.123

      


  cs1:
    image: mongo
    # ports:
    #   - "27019:27019"
    restart: always
    #让容器拥有root权
    privileged: true
    volumes:
      - "$PWD/mongodb/cs1:/data/configdb"
      - "$PWD/mongodbkeyfile:/mongodbkeyfile"
    command:  /bin/sh -c 'mongod  --configsvr --replSet "cs" --bind_ip_all --maxConns 20000'
    # command:  /bin/sh -c 'mongod  --configsvr --replSet "cs" --bind_ip_all --maxConns 20000 --auth --keyFile /mongodbkeyfile'
    networks:
      mynetword:
        ipv4_address: 172.22.101.51

  cs2:
    image: mongo
    # ports:
    #   - "27019:27019"
    restart: always
    #让容器拥有root权
    privileged: true
    volumes:
      - "$PWD/mongodb/cs2:/data/configdb"
      - "$PWD/mongodbkeyfile:/mongodbkeyfile"
    command:  /bin/sh -c 'mongod  --configsvr --replSet "cs" --bind_ip_all --maxConns 20000'
    # command:  /bin/sh -c 'mongod  --configsvr --replSet "cs" --bind_ip_all --maxConns 20000 --auth --keyFile /mongodbkeyfile'
    networks:
      mynetword:
        ipv4_address: 172.22.101.52

  cs3:
    image: mongo
    # ports:
    #   - "27019:27019"
    restart: always
    #让容器拥有root权
    privileged: true
    volumes:
      - "$PWD/mongodb/cs3:/data/configdb"
      - "$PWD/mongodbkeyfile:/mongodbkeyfile"
    command:  /bin/sh -c 'mongod  --configsvr --replSet "cs" --bind_ip_all --maxConns 20000'
    # command:  /bin/sh -c 'mongod  --configsvr --replSet "cs" --bind_ip_all --maxConns 20000 --auth --keyFile /mongodbkeyfile'
    networks:
      mynetword:
        ipv4_address: 172.22.101.53

  ms1:
    image: mongo
    ports:
      - "27017:27017"
    restart: always
    #让容器拥有root权
    privileged: true
    volumes:
      - "$PWD/mongodbkeyfile:/mongodbkeyfile"
    command:  /bin/sh -c 'mongos  --configdb cs/cs1:27019,cs2:27019,cs3:27019 --bind_ip_all --maxConns 20000'
    # command:  /bin/sh -c 'mongos  --configdb cs/cs1:27019,cs2:27019,cs3:27019 --bind_ip_all --maxConns 20000 --keyFile /mongodbkeyfile'
    networks:
      mynetword:
        ipv4_address: 172.22.101.1

然后运行docker-compose up -d
恭喜你,已经准备好rs1,rs2,cs ,与mongod 不过还没配置,需要一一配置才可以


1、配置分片 rs1 rs2

  docker-compose exec rs11 bash
  mongo --host rs11 --port 27018
  rs.initiate(
    {
      _id : "rs1",
      members: [
        { _id : 0, host : "rs11:27018" },
        { _id : 1, host : "rs12:27018" },
        { _id : 2, host : "rs13:27018" }
      ]
    }
  );
  exit
  mongo --host rs21 --port 27018
  rs.initiate(
    {
      _id : "rs2",
      members: [
        { _id : 0, host : "rs21:27018" },
        { _id : 1, host : "rs22:27018" },
        { _id : 2, host : "rs23:27018" }
      ]
    }
  ); 
  exit

2、配置config services

  docker-compose exec cs1 bash
  mongo --host cs1  --port 27019
      rs.initiate(
        {
          _id: "cs",
          configsvr: true,
          members: [
            { _id : 0, host : "cs1:27019" },
            { _id : 1, host : "cs2:27019" },
            { _id : 2, host : "cs3:27019" }
          ]
        }
      );
  exit

3、配置mongos

  docker-compose exec ms1 bash
  mongo --host ms1
  # 增加分片 已添加以后不用配置了,直接增加mongos就可以
  sh.addShard("rs1/rs11:27018,rs12:27018,rs13:27018") 
  sh.addShard("rs2/rs21:27018,rs22:27018,rs23:27018") 
  # 此库启用分片 已添加以后不用配置了,直接增加mongos就可以
  sh.enableSharding("test")
  #mytable 表 哈希分片设置 已添加以后不用配置了,直接增加mongos就可以
  sh.shardCollection("test.mytable", {"_id": "hashed" })
  use test
  for (i = 1; i <= 10; i=i+1){db.mytable.insert({'price': 1})}
  db.mytable.find().count()
  exit

恭喜你,已经配置好rs1,rs2,cs ,与mongod 不过还没配置,需要一一配置才可以
无密码者,到这里结束了。恭喜恭喜


需要增加密码者。这里继续折腾
配置密码
还记得第一步的 创建密文?这步是必须创建的。创建完毕就配置如下

  docker-compose exec ms1 bash
  mongo --host ms1
  use admin
  db.createUser({user:"root",pwd:"pass",roles:[{role:"root", db:"admin"}]});
  exit
  # rs1:PRIMARY> 修改 分片 密码
  mongo -host rs11 -port 27018
  use admin
  db.createUser({user:"root",pwd:"123",roles:[{role:"root", db:"admin"}]});
  exit
  # rs2:PRIMARY> 修改 分片 密码
  mongo -host rs21 -port 27018
  use admin
  db.createUser({user:"root",pwd:"123",roles:[{role:"root", db:"admin"}]});
  exit

  配置 docker-compose.yml
    分片与配置   bin/sh -c 增加  --auth --keyFile /mongodbkeyfile
    mongos      bin/sh -c 增加  --keyFile /mongodbkeyfile

  重启即可
  docker-compose restart

如果配置不成功,第一时间看下是否进入分片里面的主区PRIMARY 分片。如果是分区SECONDARY 是不能创建密码的。


到这里完成了,肯定会有坑,爬一下吧。应该能爬出来

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31537575/viewspace-3140097/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 18个R语言教程
请登录后发表评论 登录
全部评论

注册时间:2018-05-16

  • 博文量
    4259
  • 访问量
    40092