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 并重启所有容器