Docker 布署 Mongodb 分片集群

释放双眼,带上耳机,听听看~!

DOCKER 布署 MONGODB 分片集群

服务器IP分配情况

本人在一台服务器上进行的布署

user
root
password
root
URL
mongodb://root:rootpwd@宿主机IP:28017
路径
/data/datastation/mongodb
路由服务
宿主机IP:28017
配置服务
宿主机IP:28101
配置服务
宿主机IP:28102
配置服务
宿主机IP:28103
分片服务1
宿主机IP:28201
分片服务1
宿主机IP:28202
分片服务1
宿主机IP:28203
分片服务2
宿主机IP:28221
分片服务2
宿主机IP:28222
分片服务2
宿主机IP:28223
分片服务3
宿主机IP:28231
分片服务3
宿主机IP:28232
分片服务3
宿主机IP:28233

创建DOCKER-MONGODB网络


1
2
3
1docker network create --subnet 172.100.100.0/24 mongodb
2
3

下载DOCKER镜像


1
2
3
1docker pull docker:4.0
2
3

CONFIGSVR创建

配置文件生成


1
2
3
4
1mkdir configsvr
2vi configsvr/config.conf
3
4

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
1storage:
2  dbPath: /data/db
3  journal:
4    enabled: true
5systemLog:
6  destination: file
7  path: /var/log/mongodb/mongod.log
8net:
9  bindIp: 0.0.0.0
10replication:
11  replSetName: config1
12sharding:
13  clusterRole: configsvr
14#security:
15#  authorization: enabled
16#  keyFile: /mongodb/security/mongodbkeyfile
17
18

###创建CONFIGSVR容器


1
2
3
1vi configsvr-create.sh
2
3

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
1#!/bin/sh
2port=28101;
3ip=20;
4#docker pull mongo:4.0
5for num in seq `1 3`; do
6docker run -p ${28101}:27019 \
7--name mongoconfig_${num} \
8--net=mongodb --ip=172.100.100.${ip} \
9-v $PWD/configsvr:/etc/mongo \
10-v $PWD/mongokeyfile:/mongodb/security \
11-d mongo:4.0 --config /etc/mongo/config.conf;
12let ip +=1;
13let port +=1;
14done
15
16

初始化复制集


1
2
3
4
1docker exec -it mongoconfig_1 /bin/bash
2mongo ip:port
3
4
  • ip: 宿主机地址

  • port: 映射在宿主机上的端口


1
2
3
4
5
6
7
8
9
10
11
12
1rs.initiate(
2  {
3    _id: "config1",
4    members: [
5      { _id : 1, host : "宿主机IP:28101"},
6      { _id : 2, host : "宿主机IP:28102"},
7      { _id : 3, host : "宿主机IP:28103"}
8    ]
9  }
10)
11
12

SHARD 创建

Shard-1配置文件


1
2
3
4
1mkdir shardsvr
2vi shardsvr/shard.conf
3
4

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
1storage:
2  dbPath: /data/db
3  journal:
4    enabled: true
5systemLog:
6  destination: file
7  path: /var/log/mongodb/mongod.log
8net:
9  bindIp: 0.0.0.0
10replication:
11  replSetName: shard1
12sharding:
13  clusterRole: shardsvr
14#security:
15#  authorization: enabled
16#  keyFile: /mongodb/security/mongodbkeyfile
17
18

Shard-1容器创建


1
2
3
1vi shardsvr-create-1.sh
2
3

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
1#!/bin/sh
2port=28201;
3ip=31;
4for num in `seq 1 3`; do
5docker run -p ${port}:27018 \
6--name mongoshard_${num} \
7--net=mongodb --ip=172.100.100.${ip} \
8-v $PWD/shardsvr:/etc/mongo \
9-v $PWD/mongokeyfile:/mongodb/security \
10-d mongo:4.0 --config /etc/mongo/shard.conf;
11let ip+=1;
12let port+=1;
13done
14
15

Shard-1初始化


1
2
3
4
1docker exec -it mongoshard_1_1 /bin/bash
2mongo --port 27018
3
4

1
2
3
4
5
6
7
8
9
10
11
12
13
1rs.initiate(
2  {
3    _id: "shard1",
4    members: [
5      { _id : 1, host : "宿主机IP:28201"},
6      { _id : 2, host : "宿主机IP:28202"}
7    ]
8  }
9)
10rs.addArb("宿主机IP:28203")
11rs.status()
12
13

重复操作生成 Shard-2,Shard-3容器

shard-2

  • ports:28221,28222,28223
  • _id: shard2
  • names: mongoshard_2_1,mongoshard_2_2,mongoshard_2_3
  • conf: shard2.conf

shard-3

  • ports:28231,28232,28233
  • _id: shard2
  • names: mongoshard_3_1,mongoshard_3_2,mongoshard_3_3
  • conf: shard3.conf

Shard-2初始化


1
2
3
4
1docker exec -it mongoshard_2_1 /bin/bash
2mongo --port 27018
3
4

1
2
3
4
5
6
7
8
9
10
11
12
13
1rs.initiate(
2  {
3    _id: "shard2",
4    members: [
5      { _id : 1, host : "宿主机IP:28221"},
6      { _id : 2, host : "宿主机IP:28222"}
7    ]
8  }
9)
10rs.addArb("宿主机IP:28223")
11rs.status()
12
13

Shard-3初始化


1
2
3
4
1docker exec -it mongoshard_3_1 /bin/bash
2mongo --port 27018
3
4

1
2
3
4
5
6
7
8
9
10
11
12
13
1rs.initiate(
2  {
3    _id: "shard3",
4    members: [
5      { _id : 1, host : "宿主机IP:28231"},
6      { _id : 2, host : "宿主机IP:28232"}
7    ]
8  }
9)
10rs.addArb("宿主机IP:28233")
11rs.status()
12
13

MONGOS 创建

Mongos 配置文件


1
2
3
4
1mkdir mongos
2vi mongos/mongos.conf
3
4

1
2
3
4
5
6
7
8
9
10
11
1systemLog:
2  destination: file
3  path: /var/log/mongodb/mongos.log
4net:
5  bindIp: 0.0.0.0
6sharding:
7  configDB: config1/宿主机IP:28101,宿主机IP:28102,宿主机IP:28103
8#security:
9#  keyFile: /mongodb/security/mongodbkeyfile
10
11

Mongos 创建容器


1
2
3
1vi mongos-create.sh
2
3

1
2
3
4
5
6
7
8
9
10
11
1#/bin/sh
2docker run -p 28017:27017 \
3--name mongos1 \
4--net=mongodb --ip=172.100.100.50 \
5-v $PWD/mongos:/etc/mongo  \
6-v $PWD/mongokeyfile:/mongodb/security \
7-d mongo:4.0  mongos \
8--config /etc/mongo/mongos.conf \
9--bind_ip 0.0.0.0
10
11

Mongos 添加分片关系


1
2
3
4
1docker exec -it mongos1 /bin/bash
2mongo --port 27017
3
4

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
1//添加分片复制集1
2sh.addShard("shard1/宿主机IP:28201,宿主机IP:28202")
3
4//添加分片复制集2
5sh.addShard("shard2/宿主机IP:28221,宿主机IP:28222")
6
7//添加分片复制集3
8sh.addShard("shard3/宿主机IP:28231,宿主机IP:28232")
9
10//对test_db数据库进行分片
11sh.enableSharding("dbName")  
12
13// 启用hash分片
14sh.shardCollection("dbName.collectionName", {"tag": "hashed"})  
15
16sh.status()
17
18

keyfile验证

Mongos 添加用户


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
1docker exec -it mongos1 /bin/bash
2mongo --port 27017
3use admin
4db.createUser(
5  {
6    user: "root",
7    pwd: "rootpwd",
8    roles: [
9       { role: "root", db: "admin" }
10    ]
11  }
12)
13
14
15

创建密钥文件


1
2
3
4
1mkdir mongokeyfile && cd mongokeyfile
2openssl rand -base64 756 > ./mongokeyfile
3
4

1
2
3
4
1chmod 400 keyfile
2sudo chown 999 keyfile
3
4

配置文件中打开 security 并重启所有容器

给TA打赏
共{{data.count}}人
人已打赏
安全运维

OpenSSH-8.7p1离线升级修复安全漏洞

2021-10-23 10:13:25

安全运维

设计模式的设计原则

2021-12-12 17:36:11

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索