You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kudu.apache.org by ad...@apache.org on 2019/10/24 03:45:52 UTC

[kudu] branch master updated: scripts: multi-master support for start_kudu.sh and stop_kudu.sh

This is an automated email from the ASF dual-hosted git repository.

adar pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/kudu.git


The following commit(s) were added to refs/heads/master by this push:
     new 6af6e0c  scripts: multi-master support for start_kudu.sh and stop_kudu.sh
6af6e0c is described below

commit 6af6e0c01443463f5527219b497ea447690c2146
Author: Adar Dembo <ad...@cloudera.com>
AuthorDate: Wed Oct 23 13:03:39 2019 -0700

    scripts: multi-master support for start_kudu.sh and stop_kudu.sh
    
    Note: I changed the semantics of -m and -t as I think it's more common to
    change the number of servers than the base of the port range.
    
    Change-Id: Id8db19c9145b5c68bb437390e6c0608961680347
    Reviewed-on: http://gerrit.cloudera.org:8080/14535
    Reviewed-by: Alexey Serbin <as...@cloudera.com>
    Tested-by: Adar Dembo <ad...@cloudera.com>
---
 src/kudu/scripts/start_kudu.sh | 105 ++++++++++++++++++++++++++---------------
 src/kudu/scripts/stop_kudu.sh  |   6 +--
 2 files changed, 69 insertions(+), 42 deletions(-)

diff --git a/src/kudu/scripts/start_kudu.sh b/src/kudu/scripts/start_kudu.sh
index 47045ae..23e9a18 100755
--- a/src/kudu/scripts/start_kudu.sh
+++ b/src/kudu/scripts/start_kudu.sh
@@ -28,15 +28,20 @@ function usage() {
 cat << EOF
 Usage:
 start_kudu.sh [flags]
--h, --help       help
--m, --master     RPC port of kudu master server (HTTP port is next number)
--t, --tserver    RPC port of first kudu tablet server (other servers
-                 will have following numbers)
--b, --builddir   path to the kudu build directory
+-h, --help         Print help
+-m, --num-masters  Number of Kudu Master servers to start (default: 1)
+-t, --num-tservers Number of Kudu Tablet Servers to start (default: 3)
+--rpc-master       RPC port of first Kudu Master; HTTP port is the next number.
+                   Subsequent Masters will have following numbers
+--rpc-tserver      RPC port of first Kudu Tablet Server; HTTP port is the next
+                   number. Subsequent Tablet Servers will have following numbers
+-b, --builddir     Path to the Kudu build directory
 EOF
 }
 
-MASTER_RPC_PORT=8764
+NUM_MASTERS=1
+NUM_TSERVERS=3
+MASTER_RPC_PORT_BASE=8764
 TSERVER_RPC_PORT_BASE=9870
 BUILDDIR="$PWD"
 echo $(readlink -f $(dirname $0))
@@ -46,11 +51,19 @@ while (( "$#" )); do
       usage
       exit 1
       ;;
-    -m|--master)
-      MASTER_RPC_PORT=$2
+    -m|--num-masters)
+      NUM_MASTERS=$2
       shift 2
       ;;
-    -t|--tserver)
+    -t|--num-tservers)
+      NUM_TSERVERS=$2
+      shift 2
+      ;;
+    --rpc-master)
+      MASTER_RPC_PORT_BASE=$2
+      shift 2
+      ;;
+    --rpc-tserver)
       TSERVER_RPC_PORT_BASE=$2
       shift 2
       ;;
@@ -87,7 +100,7 @@ IP=127.0.0.1
 [ ! -x "$KUDUTSERVER" ] && { echo "Cannot find $KUDUTSERVER executable";  exit 1; }
 
 
-# Common steps before starting master or tablet server
+# Common steps before starting masters or tablet servers
 
 # 1) Create "data", "wal" and "log" directories for a server before start
 
@@ -115,16 +128,20 @@ pids=()
 # Start master server function
 
 function start_master() {
-  create_dirs_and_set_vars master
-  set_port_vars_and_print master $1 $2
-  "$KUDUMASTER" \
-    --fs_data_dirs="$dir_data" \
-    --fs_wal_dir="$dir_wal" \
-    --log_dir="$dir_log" \
-    --rpc_bind_addresses=$IP:$RPC_PORT \
-    --webserver_port=$HTTP_PORT \
-    --webserver_interface=$IP \
-    --webserver_doc_root="$WEBSERVER_DOC_ROOT" &
+  create_dirs_and_set_vars $1
+  set_port_vars_and_print $1 $2 $3
+  ARGS="$KUDUMASTER"
+  if [ $NUM_MASTERS -gt 1 ]; then
+    ARGS="$ARGS --master_addresses=$MASTER_ADDRESSES"
+  fi
+  ARGS="$ARGS --fs_data_dirs=$dir_data"
+  ARGS="$ARGS --fs_wal_dir=$dir_wal"
+  ARGS="$ARGS --log_dir=$dir_log"
+  ARGS="$ARGS --rpc_bind_addresses=$IP:$RPC_PORT"
+  ARGS="$ARGS --webserver_port=$HTTP_PORT"
+  ARGS="$ARGS --webserver_interface=$IP"
+  ARGS="$ARGS --webserver_doc_root=$WEBSERVER_DOC_ROOT"
+  $ARGS &
   pids+=($!)
 }
 
@@ -133,30 +150,42 @@ function start_master() {
 function start_tserver() {
   create_dirs_and_set_vars $1
   set_port_vars_and_print $1 $2 $3
-  MASTER_RPC_PORT=$4
-  "$KUDUTSERVER" \
-    --fs_data_dirs="$dir_data" \
-    --fs_wal_dir="$dir_wal" \
-    --log_dir="$dir_log" \
-    --rpc_bind_addresses=$IP:$RPC_PORT \
-    --webserver_port=$HTTP_PORT \
-    --webserver_interface=$IP \
-    --webserver_doc_root="$WEBSERVER_DOC_ROOT" \
-    --tserver_master_addrs=$IP:$MASTER_RPC_PORT &
+  ARGS="$KUDUTSERVER"
+  ARGS="$ARGS --fs_data_dirs=$dir_data"
+  ARGS="$ARGS --fs_wal_dir=$dir_wal"
+  ARGS="$ARGS --log_dir=$dir_log"
+  ARGS="$ARGS --rpc_bind_addresses=$IP:$RPC_PORT"
+  ARGS="$ARGS --webserver_port=$HTTP_PORT"
+  ARGS="$ARGS --webserver_interface=$IP"
+  ARGS="$ARGS --webserver_doc_root=$WEBSERVER_DOC_ROOT"
+  ARGS="$ARGS --tserver_master_addrs=$4"
+  $ARGS &
   pids+=($!)
 }
 
+# Precompute the comma-separated list of master addresses.
+MASTER_ADDRESSES=
+for i in $(seq 0 $((NUM_MASTERS - 1))); do
+  MASTER_RPC_PORT=$((MASTER_RPC_PORT_BASE + $i * 2))
+  ADDR=$IP:$MASTER_RPC_PORT
+  if [ $i -ne 0 ]; then
+    MASTER_ADDRESSES="${MASTER_ADDRESSES},"
+  fi
+  MASTER_ADDRESSES="${MASTER_ADDRESSES}${ADDR}"
+done
 
-# Start master server
-MASTER_HTTP_PORT=$(($MASTER_RPC_PORT + 1))
-start_master $MASTER_RPC_PORT $MASTER_HTTP_PORT
+# Start masters
+for i in $(seq 0 $((NUM_MASTERS - 1))); do
+  MASTER_RPC_PORT=$((MASTER_RPC_PORT_BASE + $i * 2))
+  MASTER_HTTP_PORT=$((MASTER_RPC_PORT + 1))
+  start_master master-$i $MASTER_RPC_PORT $MASTER_HTTP_PORT
+done
 
-# Start tablet servers
-for i in 0 1 2
-do
+# Start tservers
+for i in $(seq 0 $((NUM_TSERVERS - 1))); do
   TSERVER_RPC_PORT=$((TSERVER_RPC_PORT_BASE + $i * 2))
-  TSERVER_HTTP_PORT=$((TSERVER_RPC_PORT_BASE + $i * 2 + 1))
-  start_tserver tserver-$i $TSERVER_RPC_PORT $TSERVER_HTTP_PORT $MASTER_RPC_PORT
+  TSERVER_HTTP_PORT=$((TSERVER_RPC_PORT + 1))
+  start_tserver tserver-$i $TSERVER_RPC_PORT $TSERVER_HTTP_PORT $MASTER_ADDRESSES
 done
 
 # Show status of started processes
diff --git a/src/kudu/scripts/stop_kudu.sh b/src/kudu/scripts/stop_kudu.sh
index 98eefe9..8876967 100755
--- a/src/kudu/scripts/stop_kudu.sh
+++ b/src/kudu/scripts/stop_kudu.sh
@@ -22,7 +22,5 @@
 ########################################################################
 
 # Killing Kudu master and tablet servers
-
-kill -9 `pgrep kudu-tserver`
-kill -9 `pgrep kudu-master`
-ps -eo args | egrep "kudu-(master|tserver)"
+pkill -9 -u $(id -u) -x kudu-tserver
+pkill -9 -u $(id -u) -x kudu-master