Skip to content

Instantly share code, notes, and snippets.

@jmlrt
Created November 16, 2017 11:12
Show Gist options
  • Save jmlrt/27a9cda2fc6d57ec24a1a3e4950e0849 to your computer and use it in GitHub Desktop.
Save jmlrt/27a9cda2fc6d57ec24a1a3e4950e0849 to your computer and use it in GitHub Desktop.
Script to automate mongodb rpm updates steps on ReplicaSet nodes installed on EC2 instances with CentOS7
#!/usr/bin/bash -e
# This script will be use to automate the mongodb rpm updates steps on ReplicaSet nodes installed on EC2 instances with CentOS7
mongo_connect() {
mongo --quiet ${MONGO_DB} -u ${MONGO_USER} -p ${MONGO_PASS}
}
usage() {
cat << EOF
usage:
$0 <mongo_db> <mongo_user> <mongo_pass> <current_version> <new_version>
EOF
exit 1
}
# Main
LOCAL_IP=$(curl --silent http://169.254.169.254/latest/meta-data/local-ipv4)
MONGO_DB=$1
MONGO_USER=$2
MONGO_PASS=$3
CURRENT_VERSION=$4
NEW_VERSION=$5
# Testing arguments
test $# -eq 5 || usage
case ${CURRENT_VERSION} in
2.6|3.0|3.2) ;;
*) usage;;
esac
case ${NEW_VERSION} in
3.0|3.2|3.4) ;;
*) usage
esac
echo -e "\n--- 1. Changing mongodb repo\n"
cat << EOF | sudo tee /etc/yum.repos.d/mongo.repo
[mongodb-org-${NEW_VERSION}]
name=MongoDB Repository ${NEW_VERSION}
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/${NEW_VERSION}/x86_64/
gpgcheck=0
enabled=1
EOF
echo -e "\n--- 2. Replica set status\n"
echo "rs.status()" | mongo ${MONGO_DB} -u ${MONGO_USER} -p ${MONGO_PASS}
echo -e "\n--- 3. Checking that the node is a secondary\n"
IS_PRIMARY=$(echo "rs.status().members.filter(function(rsStatus){return rsStatus.name === \"${LOCAL_IP}:27017\";})[0].stateStr" | mongo_connect)
if [ ${IS_PRIMARY} == "PRIMARY" ]; then
echo -e "\n\nERROR: this node is PRIMARY\nYou need to run the MongoDB upgrade on a SECONDARY node...\n\n"
exit 2
fi
echo -e "\n--- 4. Stopping mongodb\n"
sudo systemctl stop mongod
echo -e "\n--- 5. Updating mongodb rpms\n"
sudo yum -y update mongodb-org-server.x86_64 mongodb-org-shell.x86_64 mongodb-org-tools.x86_64
echo -e "\n--- 6. Reloading mongodb service configuration\n"
sudo systemctl daemon-reload
echo -e "\n--- 7. Starting mongodb\n"
sudo systemctl start mongod
echo -e "\n--- 8. Checking mongodb version\n"
sudo grep "db version" /var/log/mongodb/mongod.log
echo -e "\n---9. Checking replica set status (stateStr need to be "SECONDARY")\n"
echo "rs.status().members.filter(function(rsStatus){return rsStatus.name === \"${LOCAL_IP}:27017\";})[0]" | mongo_connect
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment