diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5855742 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +/docker_compose.env +/var/lib/mongo diff --git a/README.md b/README.md index 2659b3b..17f0d88 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,20 @@ # mongo-cluster-docker-compose mongo-clluster-docker-compose + +## Docker-compose + +You can do the following to start with docker-compose: + +* copy `docker_compose.env.template` to `docker_compose.env` and modify the settings. +* `docker-compose --env-file docker_compose.env -f docker-compose.yaml up -d` +* `scripts/0-init_mongod.sh` +* `scripts/1-init_mongocfg.sh` +* `scripts/2-add-shard0.sh` + +您可以使用以下方式來使用 docker-compose: + +* 將 `./docker_compose.env.template` copy 到 `./docker_compose.env` 並且更改相對應的設定. +* `docker-compose --env-file docker_compose.env -f docker-compose.yaml up -d` +* `scripts/0-init_mongod.sh` +* `scripts/1-init_mongocfg.sh` +* `scripts/2-add-shard0.sh` diff --git a/docker-compose.yaml b/docker-compose.yaml new file mode 100644 index 0000000..d949843 --- /dev/null +++ b/docker-compose.yaml @@ -0,0 +1,160 @@ +version: '2' +services: + mongod0-0: + image: mongo:4.4.2 + command: + - "mongod" + - "-f" + - "/etc/mongod.conf" + expose: + - 27018 + deploy: + resources: + limits: + cpus: ${MONGOD_CPU} + memory: ${MONGOD_MEM} + reservations: + cpus: ${MONGOD_CPU} + memory: ${MONGOD_MEM} + restart: always + volumes: + - ${MONGOD0_0}:/data/db + - ${MONGOD0_CFG}:/etc/mongod.conf + mongod0-1: + image: mongo:4.4.2 + command: + - "mongod" + - "-f" + - "/etc/mongod.conf" + expose: + - 27018 + deploy: + resources: + limits: + cpus: ${MONGOD_CPU} + memory: ${MONGOD_MEM} + reservations: + cpus: ${MONGOD_CPU} + memory: ${MONGOD_MEM} + restart: always + volumes: + - ${MONGOD0_1}:/data/db + - ${MONGOD0_CFG}:/etc/mongod.conf + mongod0-arb: + image: mongo:4.4.2 + command: + - "mongod" + - "-f" + - "/etc/mongod.conf" + expose: + - 27018 + deploy: + resources: + limits: + cpus: ${MONGOD_ARB_CPU} + memory: ${MONGOD_ARB_MEM} + reservations: + cpus: ${MONGOD_ARB_CPU} + memory: ${MONGOD_ARB_MEM} + restart: always + volumes: + - ${MONGOD0_ARB}:/data/db + - ${MONGOD0_CFG}:/etc/mongod.conf + mongocfg-0: + image: mongo:4.4.2 + command: + - "mongod" + - "-f" + - "/etc/mongod.conf" + expose: + - 27019 + deploy: + resources: + limits: + cpus: ${MONGOCFG_CPU} + memory: ${MONGOCFG_MEM} + reservations: + cpus: ${MONGOCFG_CPU} + memory: ${MONGOCFG_MEM} + restart: always + volumes: + - ${MONGOCFG_0}:/data/db + - ${MONGOCFG_CFG}:/etc/mongod.conf + mongocfg-1: + image: mongo:4.4.2 + command: + - "mongod" + - "-f" + - "/etc/mongod.conf" + expose: + - 27019 + deploy: + resources: + limits: + cpus: ${MONGOCFG_CPU} + memory: ${MONGOCFG_MEM} + reservations: + cpus: ${MONGOCFG_CPU} + memory: ${MONGOCFG_MEM} + restart: always + volumes: + - ${MONGOCFG_1}:/data/db + - ${MONGOCFG_CFG}:/etc/mongod.conf + mongocfg-2: + image: mongo:4.4.2 + command: + - "mongod" + - "-f" + - "/etc/mongod.conf" + expose: + - 27019 + deploy: + resources: + limits: + cpus: ${MONGOCFG_CPU} + memory: ${MONGOCFG_MEM} + reservations: + cpus: ${MONGOCFG_CPU} + memory: ${MONGOCFG_MEM} + restart: always + volumes: + - ${MONGOCFG_2}:/data/db + - ${MONGOCFG_CFG}:/etc/mongod.conf + mongos-0: + image: mongo:4.4.2 + ports: + - "127.0.0.1:27017:27017" + command: + - "mongos" + - "-f" + - "/etc/mongos.conf" + deploy: + resources: + limits: + cpus: ${MONGOS_CPU} + memory: ${MONGOS_MEM} + reservations: + cpus: ${MONGOS_CPU} + memory: ${MONGOS_MEM} + restart: always + volumes: + - ${MONGOS_CFG}:/etc/mongos.conf + mongos-1: + image: mongo:4.4.2 + ports: + - "127.0.0.1:27027:27017" + command: + - "mongos" + - "-f" + - "/etc/mongos.conf" + deploy: + resources: + limits: + cpus: ${MONGOS_CPU} + memory: ${MONGOS_MEM} + reservations: + cpus: ${MONGOS_CPU} + memory: ${MONGOS_MEM} + restart: always + volumes: + - ${MONGOS_CFG}:/etc/mongos.conf diff --git a/docker_compose.env.template b/docker_compose.env.template new file mode 100644 index 0000000..3408d94 --- /dev/null +++ b/docker_compose.env.template @@ -0,0 +1,19 @@ +MONGOD0_0=${PWD}/var/lib/mongo/mongod0_0 +MONGOD0_1=${PWD}/var/lib/mongo/mongod0_1 +MONGOD0_ARB=${PWD}/var/lib/mongo/mongod0_arb +MONGOCFG_0=${PWD}/var/lib/mongo/mongocfg_0 +MONGOCFG_1=${PWD}/var/lib/mongo/mongocfg_1 +MONGOCFG_2=${PWD}/var/lib/mongo/mongocfg_2 + +MONGOD0_CFG=${PWD}/etc/mongo/mongod0.conf +MONGOCFG_CFG=${PWD}/etc/mongo/mongocfg.conf +MONGOS_CFG=${PWD}/etc/mongo/mongos.conf + +MONGOD_CPU=2 +MONGOD_MEM=24G +MONGOD_ARB_CPU=2 +MONGOD_ARB_MEM=4G +MONGOCFG_CPU=2 +MONGOCFG_MEM=8G +MONGOS_CPU=2 +MONGOS_MEM=8G diff --git a/etc/mongo/mongocfg.conf b/etc/mongo/mongocfg.conf new file mode 100644 index 0000000..3c0de44 --- /dev/null +++ b/etc/mongo/mongocfg.conf @@ -0,0 +1,21 @@ +storage: + dbPath: /data/db + journal: + enabled: true + wiredTiger: + engineConfig: + cacheSizeGB: 0.3 +net: + bindIpAll: true + tls: + mode: disabled + # PEMKeyFile: /etc/mongo/ssl/mongo-keypem.pem + # CAFile: /etc/mongo/ssl/root-ca.pem + # allowConnectionsWithoutCertificates: true + # allowInvalidCertificates: false +# security: +# clusterAuthMode: x509 +replication: + replSetName: mongo-configsvr +sharding: + clusterRole: configsvr diff --git a/etc/mongo/mongod0.conf b/etc/mongo/mongod0.conf new file mode 100644 index 0000000..9e38d89 --- /dev/null +++ b/etc/mongo/mongod0.conf @@ -0,0 +1,21 @@ +storage: + dbPath: /data/db + journal: + enabled: true + wiredTiger: + engineConfig: + cacheSizeGB: 0.5 +net: + bindIpAll: true + tls: + mode: disabled + # PEMKeyFile: /etc/mongo/ssl/mongo-keypem.pem + # CAFile: /etc/mongo/ssl/root-ca.pem + # allowConnectionsWithoutCertificates: true + # allowInvalidCertificates: false +# security: +# clusterAuthMode: x509 +replication: + replSetName: mongo0 +sharding: + clusterRole: shardsvr diff --git a/etc/mongo/mongos.conf b/etc/mongo/mongos.conf new file mode 100644 index 0000000..7ddb28f --- /dev/null +++ b/etc/mongo/mongos.conf @@ -0,0 +1,12 @@ +net: + bindIpAll: true + tls: + mode: disabled + # PEMKeyFile: /etc/mongo/ssl/mongo-keypem.pem + # CAFile: /etc/mongo/ssl/root-ca.pem + # allowConnectionsWithoutCertificates: true + # allowInvalidCertificates: false +# security: +# clusterAuthMode: x509 +sharding: + configDB: mongo-configsvr/mongocfg-0:27019,mongocfg-1:27019,mongocfg-2:27019 diff --git a/scripts/0-init_mongod.sh b/scripts/0-init_mongod.sh new file mode 100755 index 0000000..4ed7558 --- /dev/null +++ b/scripts/0-init_mongod.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +docker exec mongo-cluster-docker-compose_mongod0-0_1 mongo localhost:27018 --eval 'rs.initiate({ + _id : "mongo0", + members: [ + { _id: 0, host: "mongod0-0:27018" }, + { _id: 1, host: "mongod0-1:27018" }, + { _id: 2, host: "mongod0-arb:27018", arbiterOnly: true } + ] +})' diff --git a/scripts/1-init_mongocfg.sh b/scripts/1-init_mongocfg.sh new file mode 100755 index 0000000..acdc40e --- /dev/null +++ b/scripts/1-init_mongocfg.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +docker exec mongo-cluster-docker-compose_mongocfg-0_1 mongo localhost:27019 --eval 'rs.initiate({ + _id : "mongo-configsvr", + members: [ + { _id: 0, host: "mongocfg-0:27019" }, + { _id: 1, host: "mongocfg-1:27019" }, + { _id: 2, host: "mongocfg-2:27019" } + ] +})' diff --git a/scripts/2-add-shard0.sh b/scripts/2-add-shard0.sh new file mode 100755 index 0000000..e1681d1 --- /dev/null +++ b/scripts/2-add-shard0.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +docker exec mongo-cluster-docker-compose_mongos-0_1 mongo localhost:27017 --eval 'sh.addShard("mongo0/mongod0-0:27018,mongod0-1:27018")' diff --git a/var/lib/mongo/mongocfg_0/.exists b/var/lib/mongo/mongocfg_0/.exists new file mode 100644 index 0000000..e69de29 diff --git a/var/lib/mongo/mongocfg_1/.exists b/var/lib/mongo/mongocfg_1/.exists new file mode 100644 index 0000000..e69de29 diff --git a/var/lib/mongo/mongocfg_2/.exists b/var/lib/mongo/mongocfg_2/.exists new file mode 100644 index 0000000..e69de29 diff --git a/var/lib/mongo/mongod0_0/.exists b/var/lib/mongo/mongod0_0/.exists new file mode 100644 index 0000000..e69de29 diff --git a/var/lib/mongo/mongod0_1/.exists b/var/lib/mongo/mongod0_1/.exists new file mode 100644 index 0000000..e69de29 diff --git a/var/lib/mongo/mongod0_arb/.exists b/var/lib/mongo/mongod0_arb/.exists new file mode 100644 index 0000000..e69de29