mirror of
https://github.com/percona/percona-toolkit.git
synced 2025-09-20 19:04:59 +00:00
PT-1741 Migrated Go pt-mongo-tools to new driver
This commit is contained in:
245
src/go/docker/test/init-cluster.sh
Executable file
245
src/go/docker/test/init-cluster.sh
Executable file
@@ -0,0 +1,245 @@
|
||||
#!/bin/bash
|
||||
|
||||
max_tries=45
|
||||
sleep_secs=1
|
||||
|
||||
cp /rootCA.crt /tmp/rootCA.crt
|
||||
cp /client.pem /tmp/client.pem
|
||||
chmod 400 /tmp/rootCA.crt /tmp/client.pem
|
||||
|
||||
MONGODB_IP=127.0.0.1
|
||||
MONGO_FLAGS="--quiet --host=${MONGODB_IP} --ssl --sslCAFile=/tmp/rootCA.crt --sslPEMKeyFile=/tmp/client.pem"
|
||||
|
||||
sleep $sleep_secs
|
||||
|
||||
/usr/bin/mongo --version
|
||||
|
||||
|
||||
## Shard 1
|
||||
tries=1
|
||||
while [ $tries -lt $max_tries ]; do
|
||||
/usr/bin/mongo ${MONGO_FLAGS} \
|
||||
--port=${TEST_MONGODB_S1_PRIMARY_PORT} \
|
||||
--eval='rs.initiate({
|
||||
_id: "'${TEST_MONGODB_S1_RS}'",
|
||||
version: 1,
|
||||
members: [
|
||||
{ _id: 0, host: "'${MONGODB_IP}':'${TEST_MONGODB_S1_PRIMARY_PORT}'", priority: 10 },
|
||||
{ _id: 1, host: "'${MONGODB_IP}':'${TEST_MONGODB_S1_SECONDARY1_PORT}'", priority: 1 },
|
||||
{ _id: 2, host: "'${MONGODB_IP}':'${TEST_MONGODB_S1_SECONDARY2_PORT}'", priority: 0, hidden: true, tags: { role: "backup" } }
|
||||
]})' | tee /tmp/init-result.json
|
||||
if [ $? == 0 ]; then
|
||||
grep -q '"ok" : 1' /tmp/init-result.json
|
||||
[ $? == 0 ] && rm -vf /tmp/init-result.json && break
|
||||
fi
|
||||
echo "# INFO: retrying rs.initiate() on ${TEST_MONGODB_S1_RS} in $sleep_secs secs (try $tries/$max_tries)"
|
||||
sleep $sleep_secs
|
||||
tries=$(($tries + 1))
|
||||
done
|
||||
if [ $tries -ge $max_tries ]; then
|
||||
echo "# ERROR: reached max tries $max_tries for ${TEST_MONGODB_S1_RS}, exiting"
|
||||
exit 1
|
||||
fi
|
||||
echo "# INFO: replset ${TEST_MONGODB_S1_RS} is initiated"
|
||||
|
||||
|
||||
## Shard 2
|
||||
tries=1
|
||||
while [ $tries -lt $max_tries ]; do
|
||||
/usr/bin/mongo ${MONGO_FLAGS} \
|
||||
--port=${TEST_MONGODB_S2_PRIMARY_PORT} \
|
||||
--eval='rs.initiate({
|
||||
_id: "'${TEST_MONGODB_S2_RS}'",
|
||||
version: 1,
|
||||
members: [
|
||||
{ _id: 0, host: "'${MONGODB_IP}':'${TEST_MONGODB_S2_PRIMARY_PORT}'", priority: 10 },
|
||||
{ _id: 1, host: "'${MONGODB_IP}':'${TEST_MONGODB_S2_SECONDARY1_PORT}'", priority: 1 },
|
||||
{ _id: 2, host: "'${MONGODB_IP}':'${TEST_MONGODB_S2_SECONDARY2_PORT}'", priority: 0, hidden: true, tags: { role: "backup" } }
|
||||
]})' | tee /tmp/init-result.json
|
||||
if [ $? == 0 ]; then
|
||||
grep -q '"ok" : 1' /tmp/init-result.json
|
||||
[ $? == 0 ] && rm -vf /tmp/init-result.json && break
|
||||
fi
|
||||
echo "# INFO: retrying rs.initiate() on ${TEST_MONGODB_S2_RS} in $sleep_secs secs (try $tries/$max_tries)"
|
||||
sleep $sleep_secs
|
||||
tries=$(($tries + 1))
|
||||
done
|
||||
if [ $tries -ge $max_tries ]; then
|
||||
echo "# ERROR: reached max tries $max_tries for ${TEST_MONGODB_S2_RS}, exiting"
|
||||
exit 1
|
||||
fi
|
||||
echo "# INFO: replset ${TEST_MONGODB_S2_RS} is initiated"
|
||||
|
||||
|
||||
## Configsvr replset
|
||||
tries=1
|
||||
while [ $tries -lt $max_tries ]; do
|
||||
/usr/bin/mongo ${MONGO_FLAGS} \
|
||||
--port=${TEST_MONGODB_CONFIGSVR1_PORT} \
|
||||
--eval='rs.initiate({
|
||||
_id: "'${TEST_MONGODB_CONFIGSVR_RS}'",
|
||||
configsvr: true,
|
||||
version: 1,
|
||||
members: [
|
||||
{ _id: 0, host: "'${MONGODB_IP}':'${TEST_MONGODB_CONFIGSVR1_PORT}'" }
|
||||
]
|
||||
})'
|
||||
[ $? == 0 ] && break
|
||||
echo "# INFO: retrying rs.initiate() for configsvr in $sleep_secs secs (try $tries/$max_tries)"
|
||||
sleep $sleep_secs
|
||||
tries=$(($tries + 1))
|
||||
done
|
||||
if [ $tries -ge $max_tries ]; then
|
||||
echo "# ERROR: reached max tries $max_tries, exiting"
|
||||
exit 1
|
||||
fi
|
||||
echo "# INFO: sharding configsvr is initiated"
|
||||
|
||||
## Replica set 3 (non sharded)
|
||||
tries=1
|
||||
while [ $tries -lt $max_tries ]; do
|
||||
/usr/bin/mongo ${MONGO_FLAGS} \
|
||||
--port=${TEST_MONGODB_S3_PRIMARY_PORT} \
|
||||
--eval='rs.initiate({
|
||||
_id: "'${TEST_MONGODB_S3_RS}'",
|
||||
version: 1,
|
||||
members: [
|
||||
{ _id: 0, host: "'${MONGODB_IP}':'${TEST_MONGODB_S3_PRIMARY_PORT}'", priority: 10 },
|
||||
{ _id: 1, host: "'${MONGODB_IP}':'${TEST_MONGODB_S3_SECONDARY1_PORT}'", priority: 1 },
|
||||
{ _id: 2, host: "'${MONGODB_IP}':'${TEST_MONGODB_S3_SECONDARY2_PORT}'", priority: 0, hidden: true, tags: { role: "backup" } }
|
||||
]})' | tee /tmp/init3-result.json
|
||||
if [ $? == 0 ]; then
|
||||
grep -q '"ok" : 1' /tmp/init3-result.json
|
||||
[ $? == 0 ] && rm -vf /tmp/init3-result.json && break
|
||||
fi
|
||||
echo "# INFO: retrying rs.initiate() on ${TEST_MONGODB_S3_RS} in $sleep_secs secs (try $tries/$max_tries)"
|
||||
sleep $sleep_secs
|
||||
tries=$(($tries + 1))
|
||||
done
|
||||
if [ $tries -ge $max_tries ]; then
|
||||
echo "# ERROR: reached max tries $max_tries for ${TEST_MONGODB_S3_RS}, exiting"
|
||||
exit 1
|
||||
fi
|
||||
echo "# INFO: replset ${TEST_MONGODB_S3_RS} is initiated"
|
||||
|
||||
for MONGODB_PORT in ${TEST_MONGODB_S1_PRIMARY_PORT} ${TEST_MONGODB_S2_PRIMARY_PORT} ${TEST_MONGODB_CONFIGSVR1_PORT}; do
|
||||
tries=1
|
||||
while [ $tries -lt $max_tries ]; do
|
||||
ISMASTER=$(/usr/bin/mongo ${MONGO_FLAGS} \
|
||||
--port=${MONGODB_PORT} \
|
||||
--eval='printjson(db.isMaster().ismaster)' 2>/dev/null)
|
||||
[ "$ISMASTER" == "true" ] && break
|
||||
echo "# INFO: retrying db.isMaster() check on 127.0.0.1:${MONGODB_PORT} in $sleep_secs secs (try $tries/$max_tries)"
|
||||
sleep $sleep_secs
|
||||
tries=$(($tries + 1))
|
||||
done
|
||||
if [ $tries -ge $max_tries ]; then
|
||||
echo "# ERROR: reached max tries $max_tries, exiting"
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
echo "# INFO: all replsets have primary"
|
||||
|
||||
|
||||
for MONGODB_PORT in 27017 ${TEST_MONGODB_S1_PRIMARY_PORT} ${TEST_MONGODB_S2_PRIMARY_PORT} ${TEST_MONGODB_CONFIGSVR1_PORT} ${TEST_MONGODB_S3_PRIMARY_PORT}; do
|
||||
echo "PORT $MONGODB_PORT"
|
||||
tries=1
|
||||
while [ $tries -lt $max_tries ]; do
|
||||
/usr/bin/mongo ${MONGO_FLAGS} \
|
||||
--port=${MONGODB_PORT} \
|
||||
--eval='db.createUser({
|
||||
user: "'${TEST_MONGODB_ADMIN_USERNAME}'",
|
||||
pwd: "'${TEST_MONGODB_ADMIN_PASSWORD}'",
|
||||
roles: [
|
||||
{ db: "admin", role: "root" }
|
||||
]
|
||||
})' \
|
||||
admin
|
||||
if [ $? == 0 ]; then
|
||||
echo "# INFO: added admin user to 127.0.0.1:${MONGODB_PORT}"
|
||||
/usr/bin/mongo ${MONGO_FLAGS} \
|
||||
--username=${TEST_MONGODB_ADMIN_USERNAME} \
|
||||
--password=${TEST_MONGODB_ADMIN_PASSWORD} \
|
||||
--port=${MONGODB_PORT} \
|
||||
--eval='db.createUser({
|
||||
user: "'${TEST_MONGODB_USERNAME}'",
|
||||
pwd: "'${TEST_MONGODB_PASSWORD}'",
|
||||
roles: [
|
||||
{ db: "admin", role: "backup" },
|
||||
{ db: "admin", role: "clusterMonitor" },
|
||||
{ db: "admin", role: "restore" },
|
||||
{ db: "config", role: "read" },
|
||||
{ db: "test", role: "readWrite" }
|
||||
]
|
||||
})' \
|
||||
admin
|
||||
[ $? == 0 ] && echo "# INFO: added test user to 127.0.0.1:${MONGODB_PORT}" && break
|
||||
fi
|
||||
echo "# INFO: retrying db.createUser() on 127.0.0.1:${MONGODB_PORT} in $sleep_secs secs (try $tries/$max_tries)"
|
||||
sleep $sleep_secs
|
||||
tries=$(($tries + 1))
|
||||
done
|
||||
done
|
||||
echo "# INFO: all replsets have auth user(s)"
|
||||
|
||||
|
||||
shard1=${TEST_MONGODB_S1_RS}'/127.0.0.1:'${TEST_MONGODB_S1_PRIMARY_PORT}',127.0.0.1:'${TEST_MONGODB_S1_SECONDARY1_PORT}
|
||||
shard2=${TEST_MONGODB_S2_RS}'/127.0.0.1:'${TEST_MONGODB_S2_PRIMARY_PORT}',127.0.0.1:'${TEST_MONGODB_S2_SECONDARY1_PORT}
|
||||
for shard in $shard1 $shard2; do
|
||||
tries=1
|
||||
while [ $tries -lt $max_tries ]; do
|
||||
ADDSHARD=$(/usr/bin/mongo ${MONGO_FLAGS} \
|
||||
--username=${TEST_MONGODB_ADMIN_USERNAME} \
|
||||
--password=${TEST_MONGODB_ADMIN_PASSWORD} \
|
||||
--port=${TEST_MONGODB_MONGOS_PORT} \
|
||||
--eval='printjson(sh.addShard("'$shard'").ok)' \
|
||||
admin 2>/dev/null)
|
||||
[ $? == 0 ] && [ "$ADDSHARD" == "1" ] && break
|
||||
echo "# INFO: retrying sh.addShard() check for '$shard' in $sleep_secs secs (try $tries/$max_tries)"
|
||||
sleep $sleep_secs
|
||||
tries=$(($tries + 1))
|
||||
done
|
||||
if [ $tries -ge $max_tries ]; then
|
||||
echo "# ERROR: reached max tries $max_tries for '$shard', exiting"
|
||||
exit 1
|
||||
fi
|
||||
echo "# INFO: added shard: $shard"
|
||||
done
|
||||
|
||||
tries=1
|
||||
while [ $tries -lt $max_tries ]; do
|
||||
ENABLESHARDING=$(/usr/bin/mongo ${MONGO_FLAGS} \
|
||||
--username=${TEST_MONGODB_ADMIN_USERNAME} \
|
||||
--password=${TEST_MONGODB_ADMIN_PASSWORD} \
|
||||
--port=${TEST_MONGODB_MONGOS_PORT} \
|
||||
--eval='sh.enableSharding("test").ok' \
|
||||
admin 2>/dev/null)
|
||||
[ $? == 0 ] && [ "$ENABLESHARDING" == "1" ] && break
|
||||
echo "# INFO: retrying sh.enableSharding(\"test\") check in $sleep_secs secs (try $tries/$max_tries)"
|
||||
sleep $sleep_secs
|
||||
tries=$(($tries + 1))
|
||||
done
|
||||
if [ $tries -ge $max_tries ]; then
|
||||
echo "# ERROR: reached max tries $max_tries for '$shard', exiting"
|
||||
exit 1
|
||||
fi
|
||||
echo "# INFO: \"test\" database is now sharded"
|
||||
|
||||
tries=1
|
||||
while [ $tries -lt $max_tries ]; do
|
||||
SHARDCOL=$(/usr/bin/mongo ${MONGO_FLAGS} \
|
||||
--username=${TEST_MONGODB_ADMIN_USERNAME} \
|
||||
--password=${TEST_MONGODB_ADMIN_PASSWORD} \
|
||||
--port=${TEST_MONGODB_MONGOS_PORT} \
|
||||
--eval='sh.shardCollection("test.test", {_id: 1}).ok' \
|
||||
admin 2>/dev/null)
|
||||
[ $? == 0 ] && [ "$ENABLESHARDING" == "1" ] && break
|
||||
echo "# INFO: retrying sh.shardCollection(\"test.test\", {_id: 1}) check in $sleep_secs secs (try $tries/$max_tries)"
|
||||
sleep $sleep_secs
|
||||
tries=$(($tries + 1))
|
||||
done
|
||||
if [ $tries -ge $max_tries ]; then
|
||||
echo "# ERROR: reached max tries $max_tries for '$shard', exiting"
|
||||
exit 1
|
||||
fi
|
||||
echo "# INFO: \"test.test\" collection is now sharded"
|
Reference in New Issue
Block a user