diff --git a/.github/workflows/e2etests.yml b/.github/workflows/e2etests.yml index 63983cf3..bff0e214 100644 --- a/.github/workflows/e2etests.yml +++ b/.github/workflows/e2etests.yml @@ -46,8 +46,8 @@ jobs: - name: Run tests (pytest) run: | - export TEST_SOURCE_URI=mongodb://adm:pass@rs00:30000 - export TEST_TARGET_URI=mongodb://adm:pass@rs10:30100 + export TEST_SOURCE_URI=mongodb://rs00:30000 + export TEST_TARGET_URI=mongodb://rs10:30100 export TEST_PCSM_URL=http://127.0.0.1:2242 export TEST_PCSM_BIN=./bin/pcsm_test @@ -96,8 +96,8 @@ jobs: - name: Run tests (pytest) run: | - export TEST_SOURCE_URI=mongodb://adm:pass@src-mongos:27017 - export TEST_TARGET_URI=mongodb://adm:pass@tgt-mongos:29017 + export TEST_SOURCE_URI=mongodb://src-mongos:27017 + export TEST_TARGET_URI=mongodb://tgt-mongos:29017 export TEST_PCSM_URL=http://127.0.0.1:2242 export TEST_PCSM_BIN=./bin/pcsm_test diff --git a/.github/workflows/rs/mongo/users.adm.js b/.github/workflows/rs/mongo/users.adm.js deleted file mode 100644 index 1d0f4a36..00000000 --- a/.github/workflows/rs/mongo/users.adm.js +++ /dev/null @@ -1,5 +0,0 @@ -db.getSiblingDB('admin').createUser({ - user: 'adm', - pwd: 'pass', - roles: ['root'], -}); diff --git a/.github/workflows/rs/mongo/users.js b/.github/workflows/rs/mongo/users.js deleted file mode 100644 index 32986ec5..00000000 --- a/.github/workflows/rs/mongo/users.js +++ /dev/null @@ -1,11 +0,0 @@ -db.getSiblingDB('admin').createUser({ - user: 'source', - pwd: 'pass', - roles: ['backup', 'clusterMonitor', 'readAnyDatabase'], -}); - -db.getSiblingDB('admin').createUser({ - user: 'target', - pwd: 'pass', - roles: ['restore', 'clusterMonitor', 'clusterManager', 'readWriteAnyDatabase'], -}); diff --git a/.github/workflows/rs/util b/.github/workflows/rs/util index fdf7c6e7..5e1c2767 100755 --- a/.github/workflows/rs/util +++ b/.github/workflows/rs/util @@ -51,7 +51,5 @@ rsinit() { echo "uninitialized primary: $1" exit 1 fi - msh "$2" "/cfg/users.adm.js" - msh "adm:pass@$2" "/cfg/users.js" - msh "adm:pass@$2" "/cfg/scripts/deprioritize.js" + msh "$2" "/cfg/scripts/deprioritize.js" } diff --git a/.github/workflows/sh/mongo/users.adm.js b/.github/workflows/sh/mongo/users.adm.js deleted file mode 100644 index ffb6838b..00000000 --- a/.github/workflows/sh/mongo/users.adm.js +++ /dev/null @@ -1,5 +0,0 @@ -db.getSiblingDB('admin').createUser({ - user: 'adm', - pwd: 'pass', - roles: ['root'], -}); diff --git a/.github/workflows/sh/mongo/users.js b/.github/workflows/sh/mongo/users.js deleted file mode 100644 index cff9241c..00000000 --- a/.github/workflows/sh/mongo/users.js +++ /dev/null @@ -1,20 +0,0 @@ -db.getSiblingDB('admin').createUser({ - user: 'source', - pwd: 'pass', - roles: ['backup', 'clusterMonitor', 'readAnyDatabase'], -}); - -db.getSiblingDB('admin').createUser({ - user: 'target', - pwd: 'pass', - roles: ['restore', 'clusterMonitor', 'clusterManager', 'readWriteAnyDatabase'], -}); - -db.createUser({ - user: "mongodb_exporter", - pwd: "pass", - roles: [ - { role: "clusterMonitor", db: "admin" }, - { role: "read", db: "local" }, - ], -}) diff --git a/.github/workflows/sh/run b/.github/workflows/sh/run index f8f06d30..72481c9f 100755 --- a/.github/workflows/sh/run +++ b/.github/workflows/sh/run @@ -13,11 +13,11 @@ mwait "src-rs00:30000" && rsinit "src/rs0" "src-rs00:30000" mwait "src-rs10:30100" && rsinit "src/rs1" "src-rs10:30100" dcf up -d src-mongos && mwait "src-mongos:27017" -msh "adm:pass@src-mongos:27017" --eval " +msh "src-mongos:27017" --eval " sh.addShard('rs0/src-rs00:30000'); // sh.addShard('rs1/src-rs10:30100'); " -msh "adm:pass@src-mongos:27017" --eval "db.adminCommand('transitionFromDedicatedConfigServer');" +msh "src-mongos:27017" --eval "db.adminCommand('transitionFromDedicatedConfigServer');" dcf up -d tgt-cfg0 tgt-rs00 tgt-rs10 @@ -26,8 +26,8 @@ mwait "tgt-rs00:40000" && rsinit "tgt/rs0" "tgt-rs00:40000" mwait "tgt-rs10:40100" && rsinit "tgt/rs1" "tgt-rs10:40100" dcf up -d tgt-mongos && mwait "tgt-mongos:27017" -msh "adm:pass@tgt-mongos:27017" --eval " +msh "tgt-mongos:27017" --eval " sh.addShard('rs0/tgt-rs00:40000'); // sh.addShard('rs1/tgt-rs10:40100'); " -msh "adm:pass@tgt-mongos:27017" --eval "db.adminCommand('transitionFromDedicatedConfigServer');" +msh "tgt-mongos:27017" --eval "db.adminCommand('transitionFromDedicatedConfigServer');" diff --git a/.github/workflows/sh/util b/.github/workflows/sh/util index 43c3eee9..8f43df1c 100755 --- a/.github/workflows/sh/util +++ b/.github/workflows/sh/util @@ -55,7 +55,5 @@ rsinit() { echo "uninitialized primary: $1" exit 1 fi - msh "$2" "/cfg/users.adm.js" - msh "adm:pass@$2" "/cfg/users.js" - msh "adm:pass@$2" "/cfg/scripts/deprioritize.js" + msh "$2" "/cfg/scripts/deprioritize.js" } diff --git a/.gitignore b/.gitignore index f610e683..89e9e72e 100644 --- a/.gitignore +++ b/.gitignore @@ -9,6 +9,7 @@ .env /bin/ +/tmp/ vendor/ .pytest_cache diff --git a/hack/cleanup.sh b/hack/cleanup.sh new file mode 100755 index 00000000..061d97d8 --- /dev/null +++ b/hack/cleanup.sh @@ -0,0 +1,78 @@ +#!/usr/bin/env bash +# Clean up Docker resources for test environments +# Removes: containers, volumes, networks +# +# Usage: ./cleanup.sh [ENV...] +# (no args) Clean all (rs, sh, sh-ha) +# rs Replica set only +# sh Sharded cluster only (3→2 shards, project: s1) +# sh-ha Sharded cluster HA only +# +# Example: +# ./cleanup.sh rs sh # rs and sh + +set -euo pipefail + +SCRIPT_DIR=$(dirname "${BASH_SOURCE[0]}") +ENVS_TO_CLEAN=() + +if [[ $# -eq 0 ]]; then + ENVS_TO_CLEAN=("rs" "sh" "sh-ha") +else + while [[ $# -gt 0 ]]; do + case $1 in + rs|sh|sh-ha) + ENVS_TO_CLEAN+=("$1") + shift + ;; + *) + echo "Unknown environment: $1" + echo "Valid: rs, sh, sh-ha" + exit 1 + ;; + esac + done +fi + +# Function to clean up a compose environment +cleanup_env() { + local name=$1 + local compose_file=$2 + local project_name=${3:-} + + if [[ ! -f "$compose_file" ]]; then + echo "Skipping $name (compose file not found)" + return + fi + + echo "Cleaning $name..." + + local compose_cmd="docker compose -f $compose_file" + if [[ -n "$project_name" ]]; then + compose_cmd="docker compose -p $project_name -f $compose_file" + fi + + # Stop and remove containers, then remove volumes + $compose_cmd down --remove-orphans 2>/dev/null || true + $compose_cmd down -v 2>/dev/null || true +} + +# Clean specified environments +for env in "${ENVS_TO_CLEAN[@]}"; do + case $env in + rs) + cleanup_env "rs" "$SCRIPT_DIR/rs/compose.yml" + docker volume ls -q | grep -E '^rs[0-9]+' | xargs -r docker volume rm 2>/dev/null || true + ;; + sh) + cleanup_env "sh" "$SCRIPT_DIR/sh/compose.yml" "s1" + docker volume ls -q | grep -E '^(src-|tgt-|s1_)' | xargs -r docker volume rm 2>/dev/null || true + ;; + sh-ha) + cleanup_env "sh-ha" "$SCRIPT_DIR/sh-ha/compose.yml" "s1" + docker volume ls -q | grep -E '^s1_' | xargs -r docker volume rm 2>/dev/null || true + ;; + esac +done + +echo "Done." diff --git a/hack/rs/mongo/keyFile b/hack/rs/mongo/keyFile deleted file mode 100644 index 76a6bf9e..00000000 --- a/hack/rs/mongo/keyFile +++ /dev/null @@ -1,16 +0,0 @@ -jKXOsAuRH4Br5urlvr2Ur0n6OjRQBiv3W7QrQ3PTQ9PmmCEw/CrLiQ/LjLzL6USe -S+v+Mo9chlswa0KADDnsUCp342LtKIDm68hgWq5/m3H+phOVDx95TJqyuMA9e0tO -P/WJQ+e1s+9OEM5Xqfg2LHq2L9kZKE5fgvpWKPR/HMaPKFYOuSk6CyNvc6Y6c96b -fQImjZ2DVbeEIczu4sNPESi9jwncUu2QD1xTyoa+PNeuLbVoYzQNLwkxzSXxMpxA -zcYaysBWpx0MB3CRn7hCfNPSGDbXfDYac7fopHb8IO3jouzkw+p/dcGuCMfA+VW3 -opmNmJPfogb5nXTwKNVhYh3VcEBc4GX9MnYyT2l0LxcyHQUPFSvN6ksC3fDqTkF/ -dsYTvPNpGjnSVKC3L5VkVarWvNfyL9RXFrz6SHZ0W6ndBT88GH8fzdB41WPhj9fF -BOI9NyIrlLnbP9LbctFQlcXfX7veIwT/eh8fgJwOfYuURVZaQlqcyhTeUm3wiOjx -yBbDF2D0/jyLkzk26zT57txNXlrYN+dGX/Rm/zEr8uJsBIi3W3rDrb+8vsRkrnQG -66D5Ef8GMT+ZUH+tcCjJ7uIvX1UXzieSlUkikDZ+VeKXQ+sKpS7k6qiCTNLQVRBS -lJjNNJg2x3XUVuRCaA/015c45YNCs5Bl0CGIXPZiX3aBoi6nlTb8aZwssLDwaxQD -agsGVfyYSEEj6INibdgFsTEsly15dcBvUhRpBH/uPcw+q3tOZZiS546LhvPn9h3P -ZbRDy/4vKjVsK3XQbyR6IzY8IiORG6AxIHgDuVqH7NC5SW+2xrtwQvZBZY1mn/OR -VFqvhRv9CcDR21wyClHtIvepbjDdzta/Ek3S+6zo/OudxK2G3zxafjf0Jgyc4sUT -gl2wuGxtlTBXf+3ZdSIzB16qnU83JO7CVAnyvO5f9A6082sBgshjf3H4YNNM8xbx -dbZcG9apLsvOlkHzF/O+D6jCYI97WXl42ry0J1UDydBuYeZM diff --git a/hack/rs/mongo/users.adm.js b/hack/rs/mongo/users.adm.js deleted file mode 100644 index 1d0f4a36..00000000 --- a/hack/rs/mongo/users.adm.js +++ /dev/null @@ -1,5 +0,0 @@ -db.getSiblingDB('admin').createUser({ - user: 'adm', - pwd: 'pass', - roles: ['root'], -}); diff --git a/hack/rs/mongo/users.js b/hack/rs/mongo/users.js deleted file mode 100644 index 32986ec5..00000000 --- a/hack/rs/mongo/users.js +++ /dev/null @@ -1,11 +0,0 @@ -db.getSiblingDB('admin').createUser({ - user: 'source', - pwd: 'pass', - roles: ['backup', 'clusterMonitor', 'readAnyDatabase'], -}); - -db.getSiblingDB('admin').createUser({ - user: 'target', - pwd: 'pass', - roles: ['restore', 'clusterMonitor', 'clusterManager', 'readWriteAnyDatabase'], -}); diff --git a/hack/rs/run.sh b/hack/rs/run.sh index d7ce5235..6aff76cd 100755 --- a/hack/rs/run.sh +++ b/hack/rs/run.sh @@ -9,13 +9,6 @@ RDIR="$BASE/rs" export compose="$RDIR/compose.yml" -# https://www.mongodb.com/docs/v7.0/tutorial/deploy-sharded-cluster-with-keyfile-access-control/ -if [ ! -s "$RDIR/mongo/keyFile" ]; then - echo >&2 generate "$RDIR/mongo/keyFile" - openssl rand -base64 756 >"$RDIR/mongo/keyFile" - chmod 400 "$RDIR/mongo/keyFile" -fi - dcf up -d rs00 rs01 rs02 rs10 rs11 rs12 mwait "rs00:30000" diff --git a/hack/sh-ha/mongo/configsvr.conf b/hack/sh-ha/mongo/configsvr.conf index 95a5b9be..f1f7a867 100644 --- a/hack/sh-ha/mongo/configsvr.conf +++ b/hack/sh-ha/mongo/configsvr.conf @@ -2,4 +2,3 @@ systemLog.quiet: true net.bindIpAll: true storage.dbPath: /data/db sharding.clusterRole: configsvr -security.keyFile: /cfg/keyFile diff --git a/hack/sh-ha/mongo/keyFile b/hack/sh-ha/mongo/keyFile deleted file mode 100644 index 2c8d8ca5..00000000 --- a/hack/sh-ha/mongo/keyFile +++ /dev/null @@ -1,16 +0,0 @@ -iitBPDTa3PVSOnB3JxZwsJr+XBmcBYYZDPKDj9Z05bUIFIjH471QZZF9DKA9paB0 -gnYmBBLnZO8hhupYKIYBHSQBr0balLDjjKXDBHCZm/MmOJxFHkuAmKsHygUB0ZlK -3z3WeRhjaAqGKgyDCbv+Yb5GZsek5WsPVt7+oR8xdoaH9xRrAVavF5c6De8lWKRq -qCHmRdh1kcOKbHH02qE2Gfoc+kQyJbN02azasnoatcGY9gEC4Ss5XSVTmSzEo/fa -poM4KDqlgikUpqs4J1pDzJmenav1U8QgrlWVyO/JEFkKG7JGzmpo8AJ0fyaUfokg -jdkNhSAjHAsd2Q9uD0VGXvCitm0QeOYUQUEKFWaJKfdX6Dag/Fj1/lE1YRWYkiOP -IK8Aq75xoKakM8hiamPhtXCFJ1pSnuuwgGC5yP4b9XmDUHBytLse1UMGAny3dUl2 -Usx1MzylRSswu442ipzjxbsjZ9s9kGHNXaUckoUReYiuhkjWB4HBFF+3Lu5qAOQx -XohWsvseZtPDk1LBN5acXZe3WRzKwxqtiJaQWiRM1OC/G5l3nG7bI2mK6mIXjh9G -q7U+Y3ULfBwfMF3P6jSF9CsZw6WFufuEj8uLAleHokwhcz1+j6P5REkhs7jEWImw -jygpl3Utahh0JzMXP4ckIwOQgc4Oj7ZTBezmn4Q9yiHVI3pWjgadxrndyWpEMHv9 -1NT0U0hMCwfUOFXYHDzfyU/VEECzh0iX73nSXyF88gBEuuHAPb0ZOYC/RsdUKxIs -iqOSd04tRQNkBBdUhhjYqMn1cf4EFzbGSaqB87IqdCyVzljYejy0Dp3LxmB5tZEn -2Rm5w77dHVzcgJY23wpjnA83Biu3SNmbC12+keGX4TURdSJfhG/RX2uplr8T8aPR -yvd85NzX0i6XiH5mVqcgADE2PwSOJsEArz14voj1Yqnb87gNDkZPVyFF37r9n0PF -ZpOJqVy/rkSWGa3pAMHVk0M7HKCpf2pC1uGpoxp3+wjpKa4L diff --git a/hack/sh-ha/mongo/mongos.conf b/hack/sh-ha/mongo/mongos.conf index 8984d3e2..8dd37c46 100644 --- a/hack/sh-ha/mongo/mongos.conf +++ b/hack/sh-ha/mongo/mongos.conf @@ -1,3 +1,2 @@ systemLog.quiet: true net.bindIpAll: true -security.keyFile: /cfg/keyFile diff --git a/hack/sh-ha/mongo/shardsvr.conf b/hack/sh-ha/mongo/shardsvr.conf index 2247f32f..e425519b 100644 --- a/hack/sh-ha/mongo/shardsvr.conf +++ b/hack/sh-ha/mongo/shardsvr.conf @@ -2,4 +2,3 @@ systemLog.quiet: true net.bindIpAll: true storage.dbPath: /data/db sharding.clusterRole: shardsvr -security.keyFile: /cfg/keyFile diff --git a/hack/sh-ha/mongo/users.adm.js b/hack/sh-ha/mongo/users.adm.js deleted file mode 100644 index ffb6838b..00000000 --- a/hack/sh-ha/mongo/users.adm.js +++ /dev/null @@ -1,5 +0,0 @@ -db.getSiblingDB('admin').createUser({ - user: 'adm', - pwd: 'pass', - roles: ['root'], -}); diff --git a/hack/sh-ha/mongo/users.js b/hack/sh-ha/mongo/users.js deleted file mode 100644 index cff9241c..00000000 --- a/hack/sh-ha/mongo/users.js +++ /dev/null @@ -1,20 +0,0 @@ -db.getSiblingDB('admin').createUser({ - user: 'source', - pwd: 'pass', - roles: ['backup', 'clusterMonitor', 'readAnyDatabase'], -}); - -db.getSiblingDB('admin').createUser({ - user: 'target', - pwd: 'pass', - roles: ['restore', 'clusterMonitor', 'clusterManager', 'readWriteAnyDatabase'], -}); - -db.createUser({ - user: "mongodb_exporter", - pwd: "pass", - roles: [ - { role: "clusterMonitor", db: "admin" }, - { role: "read", db: "local" }, - ], -}) diff --git a/hack/sh-ha/run.sh b/hack/sh-ha/run.sh index 1c3816f6..ffc0c06d 100755 --- a/hack/sh-ha/run.sh +++ b/hack/sh-ha/run.sh @@ -9,8 +9,6 @@ source "$BASE/util" SDIR="$BASE/sh-ha" -chmod 400 "$SDIR"/mongo/keyFile - export compose=$SDIR/compose.yml # dcf up -d src-cfg0 src-rs00 src-rs10 tgt-cfg0 tgt-rs00 tgt-rs10 @@ -30,7 +28,7 @@ mwait "src-rs12:30102" rsinit "src/rs1" "src-rs10:30100" dcf up -d src-mongos && mwait "src-mongos:27017" -msh "adm:pass@src-mongos:27017" --eval " +msh "src-mongos:27017" --eval " sh.addShard('rs0/src-rs00:30000'); // sh.addShard('rs0/src-rs01:30001'); // sh.addShard('rs0/src-rs02:30002'); // @@ -55,7 +53,7 @@ mwait "tgt-rs12:40102" rsinit "tgt/rs1" "tgt-rs10:40100" dcf up -d tgt-mongos && mwait "tgt-mongos:27017" -msh "adm:pass@tgt-mongos:27017" --eval " +msh "tgt-mongos:27017" --eval " sh.addShard('rs0/tgt-rs00:40000'); // sh.addShard('rs0/tgt-rs01:40001'); // sh.addShard('rs0/tgt-rs02:40002'); // diff --git a/hack/sh/compose.yml b/hack/sh/compose.yml index 1c88598c..2ad06a39 100644 --- a/hack/sh/compose.yml +++ b/hack/sh/compose.yml @@ -67,6 +67,23 @@ services: "30100", ] + src-rs20: + image: "${MONGO_IMAGE:-percona/percona-server-mongodb:8.0}" + container_name: src-rs20 + hostname: src-rs20 + ports: ["30200:30200"] + volumes: ["src-rs20:/data/db", "./mongo/:/cfg:ro"] + command: + [ + "mongod", + "-f", + "/cfg/shardsvr.conf", + "--replSet", + "rs2", + "--port", + "30200", + ] + # ----------------- Target ----------------- tgt-mongos: image: "${MONGO_IMAGE:-percona/percona-server-mongodb:8.0}" @@ -134,10 +151,29 @@ services: "40100", ] + tgt-rs20: + image: "${MONGO_IMAGE:-percona/percona-server-mongodb:8.0}" + container_name: tgt-rs20 + hostname: tgt-rs20 + ports: ["40200:40200"] + volumes: ["tgt-rs20:/data/db", "./mongo/:/cfg:ro"] + command: + [ + "mongod", + "-f", + "/cfg/shardsvr.conf", + "--replSet", + "rs2", + "--port", + "40200", + ] + volumes: src-cfg0: src-rs00: src-rs10: + src-rs20: tgt-cfg0: tgt-rs00: tgt-rs10: + tgt-rs20: diff --git a/hack/sh/mongo/configsvr.conf b/hack/sh/mongo/configsvr.conf index 95a5b9be..f1f7a867 100644 --- a/hack/sh/mongo/configsvr.conf +++ b/hack/sh/mongo/configsvr.conf @@ -2,4 +2,3 @@ systemLog.quiet: true net.bindIpAll: true storage.dbPath: /data/db sharding.clusterRole: configsvr -security.keyFile: /cfg/keyFile diff --git a/hack/sh/mongo/keyFile b/hack/sh/mongo/keyFile deleted file mode 100644 index 2c8d8ca5..00000000 --- a/hack/sh/mongo/keyFile +++ /dev/null @@ -1,16 +0,0 @@ -iitBPDTa3PVSOnB3JxZwsJr+XBmcBYYZDPKDj9Z05bUIFIjH471QZZF9DKA9paB0 -gnYmBBLnZO8hhupYKIYBHSQBr0balLDjjKXDBHCZm/MmOJxFHkuAmKsHygUB0ZlK -3z3WeRhjaAqGKgyDCbv+Yb5GZsek5WsPVt7+oR8xdoaH9xRrAVavF5c6De8lWKRq -qCHmRdh1kcOKbHH02qE2Gfoc+kQyJbN02azasnoatcGY9gEC4Ss5XSVTmSzEo/fa -poM4KDqlgikUpqs4J1pDzJmenav1U8QgrlWVyO/JEFkKG7JGzmpo8AJ0fyaUfokg -jdkNhSAjHAsd2Q9uD0VGXvCitm0QeOYUQUEKFWaJKfdX6Dag/Fj1/lE1YRWYkiOP -IK8Aq75xoKakM8hiamPhtXCFJ1pSnuuwgGC5yP4b9XmDUHBytLse1UMGAny3dUl2 -Usx1MzylRSswu442ipzjxbsjZ9s9kGHNXaUckoUReYiuhkjWB4HBFF+3Lu5qAOQx -XohWsvseZtPDk1LBN5acXZe3WRzKwxqtiJaQWiRM1OC/G5l3nG7bI2mK6mIXjh9G -q7U+Y3ULfBwfMF3P6jSF9CsZw6WFufuEj8uLAleHokwhcz1+j6P5REkhs7jEWImw -jygpl3Utahh0JzMXP4ckIwOQgc4Oj7ZTBezmn4Q9yiHVI3pWjgadxrndyWpEMHv9 -1NT0U0hMCwfUOFXYHDzfyU/VEECzh0iX73nSXyF88gBEuuHAPb0ZOYC/RsdUKxIs -iqOSd04tRQNkBBdUhhjYqMn1cf4EFzbGSaqB87IqdCyVzljYejy0Dp3LxmB5tZEn -2Rm5w77dHVzcgJY23wpjnA83Biu3SNmbC12+keGX4TURdSJfhG/RX2uplr8T8aPR -yvd85NzX0i6XiH5mVqcgADE2PwSOJsEArz14voj1Yqnb87gNDkZPVyFF37r9n0PF -ZpOJqVy/rkSWGa3pAMHVk0M7HKCpf2pC1uGpoxp3+wjpKa4L diff --git a/hack/sh/mongo/mongos.conf b/hack/sh/mongo/mongos.conf index 8984d3e2..8dd37c46 100644 --- a/hack/sh/mongo/mongos.conf +++ b/hack/sh/mongo/mongos.conf @@ -1,3 +1,2 @@ systemLog.quiet: true net.bindIpAll: true -security.keyFile: /cfg/keyFile diff --git a/hack/sh/mongo/shardsvr.conf b/hack/sh/mongo/shardsvr.conf index 2247f32f..e425519b 100644 --- a/hack/sh/mongo/shardsvr.conf +++ b/hack/sh/mongo/shardsvr.conf @@ -2,4 +2,3 @@ systemLog.quiet: true net.bindIpAll: true storage.dbPath: /data/db sharding.clusterRole: shardsvr -security.keyFile: /cfg/keyFile diff --git a/hack/sh/mongo/src/rs2.js b/hack/sh/mongo/src/rs2.js new file mode 100644 index 00000000..9560d6df --- /dev/null +++ b/hack/sh/mongo/src/rs2.js @@ -0,0 +1,8 @@ +rs.initiate({ + _id: 'rs2', + members: [ + { _id: 0, host: 'src-rs20:30200', priority: 2 }, + // { _id: 1, host: 'rs21:30201' }, + // { _id: 2, host: 'rs22:30202' }, + ], +}); diff --git a/hack/sh/mongo/tgt/rs2.js b/hack/sh/mongo/tgt/rs2.js new file mode 100644 index 00000000..7b3fadff --- /dev/null +++ b/hack/sh/mongo/tgt/rs2.js @@ -0,0 +1,8 @@ +rs.initiate({ + _id: 'rs2', + members: [ + { _id: 0, host: 'tgt-rs20:40200', priority: 2 }, + // { _id: 1, host: 'rs21:40201' }, + // { _id: 2, host: 'rs22:40202' }, + ], +}); diff --git a/hack/sh/mongo/users.adm.js b/hack/sh/mongo/users.adm.js deleted file mode 100644 index ffb6838b..00000000 --- a/hack/sh/mongo/users.adm.js +++ /dev/null @@ -1,5 +0,0 @@ -db.getSiblingDB('admin').createUser({ - user: 'adm', - pwd: 'pass', - roles: ['root'], -}); diff --git a/hack/sh/mongo/users.js b/hack/sh/mongo/users.js deleted file mode 100644 index cff9241c..00000000 --- a/hack/sh/mongo/users.js +++ /dev/null @@ -1,20 +0,0 @@ -db.getSiblingDB('admin').createUser({ - user: 'source', - pwd: 'pass', - roles: ['backup', 'clusterMonitor', 'readAnyDatabase'], -}); - -db.getSiblingDB('admin').createUser({ - user: 'target', - pwd: 'pass', - roles: ['restore', 'clusterMonitor', 'clusterManager', 'readWriteAnyDatabase'], -}); - -db.createUser({ - user: "mongodb_exporter", - pwd: "pass", - roles: [ - { role: "clusterMonitor", db: "admin" }, - { role: "read", db: "local" }, - ], -}) diff --git a/hack/sh/run.sh b/hack/sh/run.sh index 20018a85..c8e95c86 100755 --- a/hack/sh/run.sh +++ b/hack/sh/run.sh @@ -1,4 +1,16 @@ #!/usr/bin/env bash +# Start MongoDB sharded clusters for source and target +# +# Usage: +# ./run.sh # Default: 2 source shards, 2 target shards +# SRC_SHARDS=1 ./run.sh # Custom source shards, default target +# TGT_SHARDS=3 ./run.sh # Default source, custom target shards +# SRC_SHARDS=3 TGT_SHARDS=1 ./run.sh # Custom both +# +# Limits: Max 3 shards each for source and target +# Services are named: src-rs{N}0 and tgt-rs{N}0 where N is the shard index (0-based) +# Ports: source shards start at 30000 (increment by 100), target shards at 40000 + export COMPOSE_PROJECT_NAME=s1 BASE=$(dirname "$(dirname "$0")") @@ -9,33 +21,91 @@ source "$BASE/util" SDIR="$BASE/sh" -chmod 400 "$SDIR"/mongo/keyFile - export compose=$SDIR/compose.yml -# dcf up -d src-cfg0 src-rs00 src-rs10 tgt-cfg0 tgt-rs00 tgt-rs10 -dcf up -d src-cfg0 src-rs00 src-rs10 +# Configuration: Number of shards for source and target clusters +# Can be overridden with environment variables: SRC_SHARDS=2 TGT_SHARDS=1 ./run.sh +SRC_SHARDS="${SRC_SHARDS:-2}" +TGT_SHARDS="${TGT_SHARDS:-2}" + +# Port mappings for each shard (must match compose.yml) +# Source shards: rs0=30000, rs1=30100, rs2=30200 +# Target shards: rs0=40000, rs1=40100, rs2=40200 +SRC_SHARD_PORTS=(30000 30100 30200) +TGT_SHARD_PORTS=(40000 40100 40200) + +MAX_SRC_SHARDS=${#SRC_SHARD_PORTS[@]} +MAX_TGT_SHARDS=${#TGT_SHARD_PORTS[@]} + +if [ "$SRC_SHARDS" -gt "$MAX_SRC_SHARDS" ]; then + echo "ERROR: SRC_SHARDS=$SRC_SHARDS exceeds maximum $MAX_SRC_SHARDS" + echo "Available init scripts: $SDIR/mongo/src/rs{0..$((MAX_SRC_SHARDS-1))}.js" + exit 1 +fi + +if [ "$TGT_SHARDS" -gt "$MAX_TGT_SHARDS" ]; then + echo "ERROR: TGT_SHARDS=$TGT_SHARDS exceeds maximum $MAX_TGT_SHARDS" + echo "Available init scripts: $SDIR/mongo/tgt/rs{0..$((MAX_TGT_SHARDS-1))}.js" + exit 1 +fi + +echo "Starting source cluster with $SRC_SHARDS shards (max: $MAX_SRC_SHARDS)" +echo "Starting target cluster with $TGT_SHARDS shards (max: $MAX_TGT_SHARDS)" +# Build list of source shard services to start +SRC_SERVICES="src-cfg0" +for i in $(seq 0 $((SRC_SHARDS - 1))); do + SRC_SERVICES="$SRC_SERVICES src-rs${i}0" +done + +# Start source config server and shards +dcf up -d $SRC_SERVICES + +# Initialize source config server mwait "src-cfg0:27000" && rsinit "src/cfg" "src-cfg0:27000" -mwait "src-rs00:30000" && rsinit "src/rs0" "src-rs00:30000" -mwait "src-rs10:30100" && rsinit "src/rs1" "src-rs10:30100" +# Initialize source shards +for i in $(seq 0 $((SRC_SHARDS - 1))); do + PORT=${SRC_SHARD_PORTS[$i]} + mwait "src-rs${i}0:${PORT}" && rsinit "src/rs${i}" "src-rs${i}0:${PORT}" +done + +# Start source mongos dcf up -d src-mongos && mwait "src-mongos:27017" -msh "adm:pass@src-mongos:27017" --eval " - sh.addShard('rs0/src-rs00:30000'); // - sh.addShard('rs1/src-rs10:30100'); -" -# msh "adm:pass@src-mongos:27017" --eval "db.adminCommand('transitionFromDedicatedConfigServer');" -dcf up -d tgt-cfg0 tgt-rs00 tgt-rs10 +# Add source shards to cluster +ADD_SHARDS_CMD="" +for i in $(seq 0 $((SRC_SHARDS - 1))); do + PORT=${SRC_SHARD_PORTS[$i]} + ADD_SHARDS_CMD="${ADD_SHARDS_CMD}sh.addShard('rs${i}/src-rs${i}0:${PORT}'); " +done +msh "src-mongos:27017" --eval "$ADD_SHARDS_CMD" + +# Build list of target shard services to start +TGT_SERVICES="tgt-cfg0" +for i in $(seq 0 $((TGT_SHARDS - 1))); do + TGT_SERVICES="$TGT_SERVICES tgt-rs${i}0" +done +# Start target config server and shards +dcf up -d $TGT_SERVICES + +# Initialize target config server mwait "tgt-cfg0:28000" && rsinit "tgt/cfg" "tgt-cfg0:28000" -mwait "tgt-rs00:40000" && rsinit "tgt/rs0" "tgt-rs00:40000" -mwait "tgt-rs10:40100" && rsinit "tgt/rs1" "tgt-rs10:40100" +# Initialize target shards +for i in $(seq 0 $((TGT_SHARDS - 1))); do + PORT=${TGT_SHARD_PORTS[$i]} + mwait "tgt-rs${i}0:${PORT}" && rsinit "tgt/rs${i}" "tgt-rs${i}0:${PORT}" +done + +# Start target mongos dcf up -d tgt-mongos && mwait "tgt-mongos:27017" -msh "adm:pass@tgt-mongos:27017" --eval " - sh.addShard('rs0/tgt-rs00:40000'); // - sh.addShard('rs1/tgt-rs10:40100'); -" -# msh "adm:pass@tgt-mongos:27017" --eval "db.adminCommand('transitionFromDedicatedConfigServer');" + +# Add target shards to cluster +ADD_SHARDS_CMD="" +for i in $(seq 0 $((TGT_SHARDS - 1))); do + PORT=${TGT_SHARD_PORTS[$i]} + ADD_SHARDS_CMD="${ADD_SHARDS_CMD}sh.addShard('rs${i}/tgt-rs${i}0:${PORT}'); " +done +msh "tgt-mongos:27017" --eval "$ADD_SHARDS_CMD" diff --git a/hack/util b/hack/util index 17a2d639..f25d81f2 100755 --- a/hack/util +++ b/hack/util @@ -51,7 +51,5 @@ rsinit() { echo "uninitialized primary: $1" exit 1 fi - msh "$2" "/cfg/users.adm.js" - msh "adm:pass@$2" "/cfg/users.js" - msh "adm:pass@$2" "/cfg/scripts/deprioritize.js" + msh "$2" "/cfg/scripts/deprioritize.js" }