Created
November 16, 2017 11:12
-
-
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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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