From e2fdc60b7d15c376a6794c550be7f717a74f9a26 Mon Sep 17 00:00:00 2001 From: baba230896 Date: Thu, 28 May 2020 16:16:51 +0530 Subject: [PATCH] Added common deployment scripts for CFN, GDM and ARM. --- azure_scripts/create_universe.sh | 129 ------------------ azure_scripts/install_software.sh | 124 ----------------- common_scripts/create_universe.sh | 210 +++++++++++++++++++++++++++++ common_scripts/install_software.sh | 151 +++++++++++++++++++++ 4 files changed, 361 insertions(+), 253 deletions(-) delete mode 100644 azure_scripts/create_universe.sh delete mode 100755 azure_scripts/install_software.sh create mode 100644 common_scripts/create_universe.sh create mode 100644 common_scripts/install_software.sh diff --git a/azure_scripts/create_universe.sh b/azure_scripts/create_universe.sh deleted file mode 100644 index 79b844e..0000000 --- a/azure_scripts/create_universe.sh +++ /dev/null @@ -1,129 +0,0 @@ -#!/bin/bash - -############################################################################### -# -# This script configures a list of nodes and creates a universe. -# -############################################################################### - - -# Get the name of the cloud -CLOUD_NAME=$1 - -# Get the region name -REGION=$2 - -# Get the replication factor. -RF=$3 -echo "Replication factor: $RF" - -# Get the list of nodes (ips) used for intra-cluster communication. -IpArray=($4 $5 $6) -NODES=${IpArray[*]} -echo "Creating universe with nodes: [$NODES]" - -# Get the AZ for the nodes. -INSTANCE_ZONE=${7} -SSH_USER=${8} - -YB_HOME=/home/$SSH_USER/yugabyte-db -YB_MASTER_ADDRESSES="" - -idx=0 -node_num=0 -############################################################################### -# Pick the masters as per the replication factor. -############################################################################### - -for node in $NODES -do - if [ -z $YB_MASTER_ADDRESSES ]; then - YB_MASTER_ADDRESSES="$node:7100" - else - YB_MASTER_ADDRESSES="$YB_MASTER_ADDRESSES,$node:7100" - fi - idx=`expr $idx + 1` - node_num=`expr $node_num + 1`; -done - -############################################################################### -# Setup master addresses across all the nodes. -############################################################################### -echo "Finalizing configuration..." -echo "--master_addresses=${YB_MASTER_ADDRESSES}" >> ${YB_HOME}/master/conf/server.conf -echo "--tserver_master_addrs=${YB_MASTER_ADDRESSES}" >> ${YB_HOME}/tserver/conf/server.conf -echo "--replication_factor=${RF}" >> ${YB_HOME}/master/conf/server.conf -echo "--replication_factor=${RF}" >> ${YB_HOME}/tserver/conf/server.conf -echo "--default_memory_limit_to_ram_ratio=0.35" >> ${YB_HOME}/master/conf/server.conf -echo "--default_memory_limit_to_ram_ratio=0.6" >> ${YB_HOME}/tserver/conf/server.conf - -############################################################################### -# Setup placement information if multi-AZ -############################################################################### - -echo "Adding placement flag information ..." - -echo "--placement_cloud=${CLOUD_NAME}" >> ${YB_HOME}/master/conf/server.conf -echo "--placement_cloud=${CLOUD_NAME}" >> ${YB_HOME}/tserver/conf/server.conf -echo "--placement_region=${REGION}" >> ${YB_HOME}/master/conf/server.conf -echo "--placement_region=${REGION}" >> ${YB_HOME}/tserver/conf/server.conf -echo "--placement_zone=${INSTANCE_ZONE}" >> ${YB_HOME}/master/conf/server.conf -echo "--placement_zone=${INSTANCE_ZONE}" >> ${YB_HOME}/tserver/conf/server.conf -echo "--use_initial_sys_catalog_snapshot" >> ${YB_HOME}/master/conf/server.conf - - - -############################################################################### -# Setup YSQL proxies across all nodes -############################################################################### -NODEIP=`curl -H Metadata:true "http://169.254.169.254/metadata/instance/network/interface/0/ipv4/ipAddress/0/privateIpAddress?api-version=2017-08-01&format=text"` -echo "Enabling YSQL..." -echo '--start_pgsql_proxy' >> ${YB_HOME}/tserver/conf/server.conf -echo "--pgsql_proxy_bind_address=${NODEIP}:5433" >> ${YB_HOME}/tserver/conf/server.conf - - -############################################################################### -# Start the masters. -############################################################################### -echo "Starting masters..." -MASTER_EXE=${YB_HOME}/master/bin/yb-master -MASTER_OUT=${YB_HOME}/master/master.out -MASTER_ERR=${YB_HOME}/master/master.err -nohup ${MASTER_EXE} --flagfile ${YB_HOME}/master/conf/server.conf >>${MASTER_OUT} 2>>${MASTER_ERR} /dev/null 2>&1"; } | crontab - - echo "Created master crontab entry at [$node]" - fi - - - -############################################################################### -# Start the tservers. -############################################################################### -echo "Starting tservers..." -echo "export YB_MASTER_ADDRESSES=${YB_MASTER_ADDRESSES}" >> ${YB_HOME}/.yb_env.sh -TSERVER_EXE=${YB_HOME}/tserver/bin/yb-tserver -TSERVER_OUT=${YB_HOME}/tserver/tserver.out -TSERVER_ERR=${YB_HOME}/tserver/tserver.err - -echo "Setting LANG and LC_* environment variables on all nodes" -echo -e 'export LC_ALL=en_US.utf-8 \nexport LANG=en_US.utf-8' > ~/env -sudo mv ~/env /etc/environment -sudo chown root:root /etc/environment -sudo chmod 0644 /etc/environment -nohup ${TSERVER_EXE} --flagfile ${YB_HOME}/tserver/conf/server.conf >>${TSERVER_OUT} 2>>${TSERVER_ERR} /dev/null 2>&1"; } | crontab - - echo "Created tserver crontab entry at [$node]" - fi diff --git a/azure_scripts/install_software.sh b/azure_scripts/install_software.sh deleted file mode 100755 index fdb0071..0000000 --- a/azure_scripts/install_software.sh +++ /dev/null @@ -1,124 +0,0 @@ -#!/bin/bash - -############################################################################### -# -# This is a simple script to install yugabyte-db software on a machine. -# -############################################################################### -YB_VERSION=$1 -SSH_USER=$2 -YB_HOME=/home/${SSH_USER}/yugabyte-db -YB_PACKAGE_URL="https://downloads.yugabyte.com/yugabyte-${YB_VERSION}-linux.tar.gz" -YB_PACKAGE_NAME="${YB_PACKAGE_URL##*/}" - -############################################################################### -# Create the necessary directories. -############################################################################### -mkdir -p ${YB_HOME}/yb-software -mkdir -p ${YB_HOME}/master/conf -mkdir -p ${YB_HOME}/tserver/conf - -# Save the current directory. -pushd ${YB_HOME} - -############################################################################### -# Set appropriate ulimits according to https://docs.yugabyte.com/latest/deploy/manual-deployment/system-config/#setting-ulimits -############################################################################### -echo "Setting appropriate YB ulimits.." - -cat > /tmp/99-yugabyte-limits.conf < /dev/null - -echo "Installing..." -mv yugabyte-${YB_VERSION} yb-software -yb-software/yugabyte-${YB_VERSION}/bin/post_install.sh 2>&1 > /dev/null - - -############################################################################### -# Install master. -############################################################################### -pushd master -for i in ../yb-software/yugabyte-${YB_VERSION}/* -do - YB_TARGET_FILE="${i#../yb-software/yugabyte-${YB_VERSION}/}" - if [[ ! -L "${YB_TARGET_FILE}" ]]; then - ln -s $i > /dev/null - else - echo "rm -f ${YB_TARGET_FILE}" >> .master_relink - echo "ln -s $i" >> .master_relink - fi -done -mkdir -p conf -popd - - -############################################################################### -# Install tserver. -############################################################################### -pushd tserver -for i in ../yb-software/yugabyte-${YB_VERSION}/* -do - YB_TARGET_FILE="${i#../yb-software/yugabyte-${YB_VERSION}/}" - if [[ ! -L "${YB_TARGET_FILE}" ]]; then - ln -s $i > /dev/null - else - echo "rm -f ${YB_TARGET_FILE}" >> .tserver_relink - echo "ln -s $i" >> .tserver_relink - fi -done -mkdir -p conf -popd - - -############################################################################### -# Create the data drives. -############################################################################### -mkdir -p ${YB_HOME}/data/disk0 -mkdir -p ${YB_HOME}/data/disk1 -if [[ ! -f master/conf/server.conf ]]; then - echo "--fs_data_dirs=${YB_HOME}/data/disk0,${YB_HOME}/data/disk1" >> master/conf/server.conf -fi -if [[ ! -f tserver/conf/server.conf ]]; then - echo "--fs_data_dirs=${YB_HOME}/data/disk0,${YB_HOME}/data/disk1" >> tserver/conf/server.conf -fi -# Restore the original directory. -popd - -############################################################################### -# Create an environment file -############################################################################### -echo "YB_HOME=${YB_HOME}" >> ${YB_HOME}/.yb_env.sh -echo "export PATH='$PATH':${YB_HOME}/master/bin:${YB_HOME}/tserver/bin" >> ${YB_HOME}/.yb_env.sh -echo "source ${YB_HOME}/.yb_env.sh" >> /home/${USER}/.bash_profile -chmod 755 ${YB_HOME}/.yb_env.sh - diff --git a/common_scripts/create_universe.sh b/common_scripts/create_universe.sh new file mode 100644 index 0000000..b13ff09 --- /dev/null +++ b/common_scripts/create_universe.sh @@ -0,0 +1,210 @@ +#!/bin/bash + +############################################################################### +# +# This script configures a list of nodes and creates a universe. +# +# Usage: +# create_universe.sh \ +# +# : space separated set of ips the nodes should use to talk +# to each other +############################################################################### + + +# Get the name of the cloud +CLOUD_NAME=$1 + +# Get the region name +REGION=$2 + +# Get the replication factor. +RF=$3 +echo "Replication factor: $RF" + +# Get the list of nodes (ips) used for intra-cluster communication. +NODES=$4 +echo "Creating universe with nodes: [$NODES]" +IFS=" " read -r -a node_array <<< "$NODES" + +if [[ "${CLOUD_NAME}" == "AWS" ]]; then + # Get the AZ for the nodes. + ZONES=$5 + echo "Creating universe in AZ's: [$ZONES]" + IFS=" " read -r -a zone_array <<< "$ZONES" + + ZONES=$(echo "${ZONES}" | tr ' ' '\n' | sort -u | tr '\n' ' ') + echo "Using zones: [ $ZONES ] and zone_array [ ${zone_array[*]} ]" + + INSTANCE_ZONE=${6} + SSH_USER=${7} +else + INSTANCE_ZONE=${5} + SSH_USER=${6} +fi + +case "${CLOUD_NAME}" in + + 'AWS') + NODEIP="$(curl http://169.254.169.254/latest/meta-data/local-ipv4)" + ;; + + 'Azure') + NODEIP="$(curl -H Metadata:true "http://169.254.169.254/metadata/instance/network/interface/0/ipv4/ipAddress/0/privateIpAddress?api-version=2017-08-01&format=text")" + ;; + + 'GCP') + NODEIP="$(curl http://metadata.google.internal/computeMetadata/v1/instance/network-interfaces/0/ip -H "Metadata-Flavor: Google")" + ;; + + *) + echo "Invalid Cloud Name" + exit 1 + ;; +esac + +YB_HOME="/home/$SSH_USER/yugabyte-db" +YB_MASTER_ADDRESSES="" + +idx=0 +declare -a master_ips +############################################################################### +# Pick the masters as per the replication factor. +############################################################################### +used_zones="" + +function add_master_ip() { + if [ -n "${YB_MASTER_ADDRESSES}" ]; then + YB_MASTER_ADDRESSES="$YB_MASTER_ADDRESSES," + fi + YB_MASTER_ADDRESSES="$YB_MASTER_ADDRESSES${node_array[$1]}:7100" + master_ips+=(${node_array[$1]}) +} + +if [[ "${CLOUD_NAME}" == "AWS" ]]; then + # Pick node's IP from every zone to ensure a master per zone + # Necessary Condition for a master per zone + # 1. RF must be greater than or equal to Zones. + for node_index in "${!zone_array[@]}"; do + if (( idx < RF )); then + if [[ "${used_zones}" == *"${zone_array[$node_index]}"* ]]; then + continue + fi + + add_master_ip "${node_index}" + + idx=$(( idx + 1 )) + used_zones="$used_zones ${zone_array[$node_index]}" + fi + done + + # Pick node's IP and add, to ensure RF = Number of master + # If RF > Number of Zones + while (( RF - idx > 0 )) + do + for node_index in "${!node_array[@]}"; do + if ! [[ "${master_ips[*]}" == *"${node_array[$node_index]}"* ]]; then + add_master_ip "${node_index}" + break + fi + done + + idx=$(( idx + 1 )) + done +else + for node_index in "${!node_array[@]}"; do + if (( idx < RF )); then + add_master_ip "${node_index}" + fi + idx=$(( idx + 1 )) + done +fi + +echo "Master addresses: $YB_MASTER_ADDRESSES" + + +############################################################################### +# Setup master addresses across all the nodes. +############################################################################### +echo "Finalizing configuration..." +echo "--master_addresses=${YB_MASTER_ADDRESSES}" >> "${YB_HOME}/master/conf/server.conf" +echo "--tserver_master_addrs=${YB_MASTER_ADDRESSES}" >> "${YB_HOME}/tserver/conf/server.conf" +echo "--replication_factor=${RF}" >> "${YB_HOME}/master/conf/server.conf" +echo "--replication_factor=${RF}" >> "${YB_HOME}/tserver/conf/server.conf" +echo "--default_memory_limit_to_ram_ratio=0.35" >> "${YB_HOME}/master/conf/server.conf" +echo "--default_memory_limit_to_ram_ratio=0.6" >> "${YB_HOME}/tserver/conf/server.conf" + +############################################################################### +# Setup placement information if multi-AZ +############################################################################### + +echo "Adding placement flag information ..." + +echo "--placement_cloud=${CLOUD_NAME}" >> "${YB_HOME}/master/conf/server.conf" +echo "--placement_cloud=${CLOUD_NAME}" >> "${YB_HOME}/tserver/conf/server.conf" +echo "--placement_region=${REGION}" >> "${YB_HOME}/master/conf/server.conf" +echo "--placement_region=${REGION}" >> "${YB_HOME}/tserver/conf/server.conf" +echo "--placement_zone=${INSTANCE_ZONE}" >> "${YB_HOME}/master/conf/server.conf" +echo "--placement_zone=${INSTANCE_ZONE}" >> "${YB_HOME}/tserver/conf/server.conf" +echo "--use_initial_sys_catalog_snapshot" >> "${YB_HOME}/master/conf/server.conf" + +############################################################################### +# Setup rpc_bind_addresses across all the nodes. +############################################################################### +echo "--rpc_bind_addresses=${NODEIP}:7100" >> "${YB_HOME}/master/conf/server.conf" +echo "--rpc_bind_addresses=${NODEIP}:9100" >> "${YB_HOME}/tserver/conf/server.conf" + +############################################################################### +# Setup YSQL proxies across all nodes +############################################################################### +echo "Enabling YSQL..." +echo '--start_pgsql_proxy' >> "${YB_HOME}/tserver/conf/server.conf" +echo "--pgsql_proxy_bind_address=${NODEIP}:5433" >> "${YB_HOME}/tserver/conf/server.conf" + +############################################################################### +# Start the masters. +############################################################################### +if [[ "${master_ips[*]}" == *"${NODEIP}"* ]]; then + echo "Starting masters...${NODEIP}" + MASTER_EXE=${YB_HOME}/master/bin/yb-master + MASTER_OUT=${YB_HOME}/master/master.out + MASTER_ERR=${YB_HOME}/master/master.err + nohup "${MASTER_EXE}" --flagfile "${YB_HOME}/master/conf/server.conf" >>"${MASTER_OUT}" 2>>"${MASTER_ERR}" /dev/null 2>&1"; } | crontab - + echo "Created master crontab entry at [${NODEIP}]" + fi +fi + +############################################################################### +# Start the tservers. +############################################################################### +echo "Starting tservers..." +echo "export YB_MASTER_ADDRESSES=${YB_MASTER_ADDRESSES}" >> "${YB_HOME}/.yb_env.sh" +TSERVER_EXE=${YB_HOME}/tserver/bin/yb-tserver +TSERVER_OUT=${YB_HOME}/tserver/tserver.out +TSERVER_ERR=${YB_HOME}/tserver/tserver.err + +echo "Setting LANG and LC_* environment variables on all nodes" +echo -e 'export LC_ALL=en_US.utf-8 \nexport LANG=en_US.utf-8' > ~/env +sudo mv ~/env /etc/environment +sudo chown root:root /etc/environment +sudo chmod 0644 /etc/environment +nohup "${TSERVER_EXE}" --flagfile "${YB_HOME}/tserver/conf/server.conf" >>"${TSERVER_OUT}" 2>>"${TSERVER_ERR}" /dev/null 2>&1"; } | crontab - + echo "Created tserver crontab entry at [${NODEIP}]" + fi + + diff --git a/common_scripts/install_software.sh b/common_scripts/install_software.sh new file mode 100644 index 0000000..9140c3a --- /dev/null +++ b/common_scripts/install_software.sh @@ -0,0 +1,151 @@ +#!/bin/bash + +############################################################################### +# +# This is a simple script to install yugabyte-db software on a machine. +# +############################################################################### + +YB_VERSION=$1 +YB_HOME=/home/${USER}/yugabyte-db +YB_PACKAGE_URL="https://downloads.yugabyte.com/yugabyte-${YB_VERSION}-linux.tar.gz" +YB_PACKAGE_NAME="${YB_PACKAGE_URL##*/}" + +############################################################################### +# Create the necessary directories. +############################################################################### +mkdir -p "${YB_HOME}/yb-software" +mkdir -p "${YB_HOME}/master" +mkdir -p "${YB_HOME}/tserver" + +# Save the current directory. +pushd "${YB_HOME}" + +############################################################################### +# Set appropriate ulimits according to https://docs.yugabyte.com/latest/deploy/manual-deployment/system-config/#setting-ulimits +############################################################################### +echo "Setting appropriate YB ulimits.." + +cat > /tmp/99-yugabyte-limits.conf < /tmp/new-system-limits.conf < /dev/null + +echo "Installing..." +mv "yugabyte-${YB_VERSION}" yb-software +yb-software/"yugabyte-${YB_VERSION}"/bin/post_install.sh 2>&1 > /dev/null + + +############################################################################### +# Install master. +############################################################################### +pushd master +for i in ../yb-software/"yugabyte-${YB_VERSION}"/* +do + YB_TARGET_FILE="${i#../yb-software/yugabyte-${YB_VERSION}/}" + if [[ ! -L "${YB_TARGET_FILE}" ]]; then + ln -s "$i" > /dev/null + else + echo "rm -f ${YB_TARGET_FILE}" >> .master_relink + echo "ln -s $i" >> .master_relink + fi +done +mkdir -p conf +popd + + +############################################################################### +# Install tserver. +############################################################################### +pushd tserver +for i in ../yb-software/"yugabyte-${YB_VERSION}"/* +do + YB_TARGET_FILE="${i#../yb-software/yugabyte-${YB_VERSION}/}" + if [[ ! -L "${YB_TARGET_FILE}" ]]; then + ln -s "$i" > /dev/null + else + echo "rm -f ${YB_TARGET_FILE}" >> .tserver_relink + echo "ln -s $i" >> .tserver_relink + fi +done +mkdir -p conf +popd + + +############################################################################### +# Create the data drives. +############################################################################### +mkdir -p "${YB_HOME}/data/disk0" +mkdir -p "${YB_HOME}/data/disk1" +if [[ ! -f master/conf/server.conf ]]; then + echo "--fs_data_dirs=${YB_HOME}/data/disk0,${YB_HOME}/data/disk1" >> master/conf/server.conf +fi +if [[ ! -f tserver/conf/server.conf ]]; then + echo "--fs_data_dirs=${YB_HOME}/data/disk0,${YB_HOME}/data/disk1" >> tserver/conf/server.conf +fi +# Restore the original directory. +popd + +############################################################################### +# Create an environment file +############################################################################### +echo "YB_HOME=${YB_HOME}" >> "${YB_HOME}/.yb_env.sh" +echo "export PATH=$PATH:${YB_HOME}/master/bin:${YB_HOME}/tserver/bin" >> "${YB_HOME}/.yb_env.sh" +echo "export YB_EDITION=${YB_VERSION}" >> "${YB_HOME}/.yb_env.sh" +echo "source ${YB_HOME}/.yb_env.sh" >> "/home/${USER}/.bash_profile" +chmod 755 "${YB_HOME}/.yb_env.sh" +