Skip to content

Instantly share code, notes, and snippets.

@moshest
Last active November 20, 2018 01:51
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save moshest/e4c73efc8d6a35971f6e to your computer and use it in GitHub Desktop.
Save moshest/e4c73efc8d6a35971f6e to your computer and use it in GitHub Desktop.
Setup Mongodb Server on Amazon EC2
#!/usr/bin/env bash
# usage: wget -N https://gist.githubusercontent.com/moshest/e4c73efc8d6a35971f6e/raw/setup-mongodb.sh && sh ./setup-mongodb.sh
set -e
# configs
read -e -p "Replica set name: " -i "rep1" replSet
read -e -p "Hostname: " -i $(curl -s http://169.254.169.254/latest/meta-data/public-hostname) hostname
read -e -p "Swap size: " -i "8G" swapsize
read -e -p "Data drive: " -i "xvdf" dataDrive
read -e -p "Journal drive: " -i "xvdg" journalDrive
read -e -p "Log drive: " -i "xvdh" logDrive
read -e -p "Config file: " -i "/etc/mongod.conf" configFile
read -p "Press [Enter] to start setup.."
#############################################
echo "Update mechine..."
sudo yum -y update
echo "Set hostname..."
sudo hostname $hostname
sudo sed -i "/HOSTNAME\b/c\HOSTNAME=$hostname" /etc/sysconfig/network
echo "Add swap..."
hasSwap=`grep "swapfile" /etc/fstab | cat`
if [ -z "$hasSwap" ]; then
echo "Create swapfile of $swapsize megabytes"
sudo fallocate -l $swapsize /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
sudo sh -c "echo '/swapfile none swap defaults 0 0' >> /etc/fstab"
else
echo 'swapfile found. No changes made.'
fi
cat /proc/swaps
cat /proc/meminfo | grep Swap
echo "Install mongodb..."
echo "[MongoDB]
name=MongoDB Repository
baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/x86_64
gpgcheck=0
enabled=1" | sudo tee -a /etc/yum.repos.d/mongodb.repo
sudo yum install -y mongodb-org-server mongodb-org-shell mongodb-org-tools
sudo sed -i "/bind_ip=\b/c\bind_ip=0.0.0.0" $configFile
sudo sed -i "/replSet=\b/c\replSet=$replSet" $configFile
echo "Create mount points..."
sudo mkdir /data /log /journal
sudo mkfs.ext4 /dev/$dataDrive
sudo mkfs.ext4 /dev/$journalDrive
sudo mkfs.ext4 /dev/$logDrive
echo "/dev/$dataDrive /data ext4 defaults,auto,noatime,noexec 0 0
/dev/$journalDrive /journal ext4 defaults,auto,noatime,noexec 0 0
/dev/$logDrive /log ext4 defaults,auto,noatime,noexec 0 0" | sudo tee -a /etc/fstab
sudo mount /data
sudo mount /journal
sudo mount /log
sudo chown mongod:mongod /data /journal /log
sudo ln -s /journal /data/journal
sudo sed -i "/dbpath\b/c\dbpath=/data" $configFile
sudo sed -i "/logpath\b/c\logpath=/log/mongod.log" $configFile
echo "Update secutiry limits..."
echo "
* soft nofile 64000
* hard nofile 64000
* soft nproc 32000
* hard nproc 32000" | sudo tee -a /etc/security/limits.conf
echo "
* soft nproc 32000
* hard nproc 32000" | sudo tee -a /etc/security/limits.d/90-nproc.conf
sudo blockdev --setra 32 /dev/$dataDrive
sudo blockdev --setra 32 /dev/$journalDrive
sudo blockdev --setra 32 /dev/$logDrive
echo 'ACTION=="add", KERNEL=="'$dataDrive'", ATTR{bdi/read_ahead_kb}="16"' | sudo tee -a /etc/udev/rules.d/85-ebs.rules
echo 'ACTION=="add", KERNEL=="'$journalDrive'", ATTR{bdi/read_ahead_kb}="16"' | sudo tee -a /etc/udev/rules.d/85-ebs.rules
echo 'ACTION=="add", KERNEL=="'$logDrive'", ATTR{bdi/read_ahead_kb}="16"' | sudo tee -a /etc/udev/rules.d/85-ebs.rules
echo "Starting mongodb..."
sudo chkconfig mongod on
sudo service mongod start
echo "Done."
read -p "Press [Enter] to reboot instance."
sudo reboot
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment