github.com/qsunny/k8s@v0.0.0-20220101153623-e6dca256d5bf/examples-master/cassandra/image/files/run.sh (about)

     1  #!/bin/bash
     2  
     3  # Copyright 2016 The Kubernetes Authors.
     4  #
     5  # Licensed under the Apache License, Version 2.0 (the "License");
     6  # you may not use this file except in compliance with the License.
     7  # You may obtain a copy of the License at
     8  #
     9  #     http://www.apache.org/licenses/LICENSE-2.0
    10  #
    11  # Unless required by applicable law or agreed to in writing, software
    12  # distributed under the License is distributed on an "AS IS" BASIS,
    13  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    14  # See the License for the specific language governing permissions and
    15  # limitations under the License.
    16  
    17  set -e
    18  CASSANDRA_CONF_DIR=/etc/cassandra
    19  CASSANDRA_CFG=$CASSANDRA_CONF_DIR/cassandra.yaml
    20  
    21  # we are doing StatefulSet or just setting our seeds
    22  if [ -z "$CASSANDRA_SEEDS" ]; then
    23    HOSTNAME=$(hostname -f)
    24    CASSANDRA_SEEDS=$(hostname -f)
    25  fi
    26  
    27  # The following vars relate to their counter parts in $CASSANDRA_CFG
    28  # for instance rpc_address
    29  CASSANDRA_RPC_ADDRESS="${CASSANDRA_RPC_ADDRESS:-0.0.0.0}"
    30  CASSANDRA_NUM_TOKENS="${CASSANDRA_NUM_TOKENS:-32}"
    31  CASSANDRA_CLUSTER_NAME="${CASSANDRA_CLUSTER_NAME:='Test Cluster'}"
    32  CASSANDRA_LISTEN_ADDRESS=${POD_IP:-$HOSTNAME}
    33  CASSANDRA_BROADCAST_ADDRESS=${POD_IP:-$HOSTNAME}
    34  CASSANDRA_BROADCAST_RPC_ADDRESS=${POD_IP:-$HOSTNAME}
    35  CASSANDRA_DISK_OPTIMIZATION_STRATEGY="${CASSANDRA_DISK_OPTIMIZATION_STRATEGY:-ssd}"
    36  CASSANDRA_MIGRATION_WAIT="${CASSANDRA_MIGRATION_WAIT:-1}"
    37  CASSANDRA_ENDPOINT_SNITCH="${CASSANDRA_ENDPOINT_SNITCH:-SimpleSnitch}"
    38  CASSANDRA_DC="${CASSANDRA_DC}"
    39  CASSANDRA_RACK="${CASSANDRA_RACK}"
    40  CASSANDRA_RING_DELAY="${CASSANDRA_RING_DELAY:-30000}"
    41  CASSANDRA_AUTO_BOOTSTRAP="${CASSANDRA_AUTO_BOOTSTRAP:-true}"
    42  CASSANDRA_SEEDS="${CASSANDRA_SEEDS:false}"
    43  CASSANDRA_SEED_PROVIDER="${CASSANDRA_SEED_PROVIDER:-org.apache.cassandra.locator.SimpleSeedProvider}"
    44  CASSANDRA_AUTO_BOOTSTRAP="${CASSANDRA_AUTO_BOOTSTRAP:false}"
    45  
    46  # Turn off JMX auth
    47  CASSANDRA_OPEN_JMX="${CASSANDRA_OPEN_JMX:-false}"
    48  # send GC to STDOUT
    49  CASSANDRA_GC_STDOUT="${CASSANDRA_GC_STDOUT:-false}"
    50  
    51  echo Starting Cassandra on ${CASSANDRA_LISTEN_ADDRESS}
    52  echo CASSANDRA_CONF_DIR ${CASSANDRA_CONF_DIR}
    53  echo CASSANDRA_CFG ${CASSANDRA_CFG}
    54  echo CASSANDRA_AUTO_BOOTSTRAP ${CASSANDRA_AUTO_BOOTSTRAP}
    55  echo CASSANDRA_BROADCAST_ADDRESS ${CASSANDRA_BROADCAST_ADDRESS}
    56  echo CASSANDRA_BROADCAST_RPC_ADDRESS ${CASSANDRA_BROADCAST_RPC_ADDRESS}
    57  echo CASSANDRA_CLUSTER_NAME ${CASSANDRA_CLUSTER_NAME}
    58  echo CASSANDRA_COMPACTION_THROUGHPUT_MB_PER_SEC ${CASSANDRA_COMPACTION_THROUGHPUT_MB_PER_SEC}
    59  echo CASSANDRA_CONCURRENT_COMPACTORS ${CASSANDRA_CONCURRENT_COMPACTORS}
    60  echo CASSANDRA_CONCURRENT_READS ${CASSANDRA_CONCURRENT_READS}
    61  echo CASSANDRA_CONCURRENT_WRITES ${CASSANDRA_CONCURRENT_WRITES}
    62  echo CASSANDRA_COUNTER_CACHE_SIZE_IN_MB ${CASSANDRA_COUNTER_CACHE_SIZE_IN_MB}
    63  echo CASSANDRA_DC ${CASSANDRA_DC}
    64  echo CASSANDRA_DISK_OPTIMIZATION_STRATEGY ${CASSANDRA_DISK_OPTIMIZATION_STRATEGY}
    65  echo CASSANDRA_ENDPOINT_SNITCH ${CASSANDRA_ENDPOINT_SNITCH}
    66  echo CASSANDRA_GC_WARN_THRESHOLD_IN_MS ${CASSANDRA_GC_WARN_THRESHOLD_IN_MS}
    67  echo CASSANDRA_INTERNODE_COMPRESSION ${CASSANDRA_INTERNODE_COMPRESSION}
    68  echo CASSANDRA_KEY_CACHE_SIZE_IN_MB ${CASSANDRA_KEY_CACHE_SIZE_IN_MB}
    69  echo CASSANDRA_LISTEN_ADDRESS ${CASSANDRA_LISTEN_ADDRESS}
    70  echo CASSANDRA_LISTEN_INTERFACE ${CASSANDRA_LISTEN_INTERFACE}
    71  echo CASSANDRA_MEMTABLE_ALLOCATION_TYPE ${CASSANDRA_MEMTABLE_ALLOCATION_TYPE}
    72  echo CASSANDRA_MEMTABLE_CLEANUP_THRESHOLD ${CASSANDRA_MEMTABLE_CLEANUP_THRESHOLD}
    73  echo CASSANDRA_MEMTABLE_FLUSH_WRITERS ${CASSANDRA_MEMTABLE_FLUSH_WRITERS}
    74  echo CASSANDRA_MIGRATION_WAIT ${CASSANDRA_MIGRATION_WAIT}
    75  echo CASSANDRA_NUM_TOKENS ${CASSANDRA_NUM_TOKENS}
    76  echo CASSANDRA_RACK ${CASSANDRA_RACK}
    77  echo CASSANDRA_RING_DELAY ${CASSANDRA_RING_DELAY}
    78  echo CASSANDRA_RPC_ADDRESS ${CASSANDRA_RPC_ADDRESS}
    79  echo CASSANDRA_RPC_INTERFACE ${CASSANDRA_RPC_INTERFACE}
    80  echo CASSANDRA_SEEDS ${CASSANDRA_SEEDS}
    81  echo CASSANDRA_SEED_PROVIDER ${CASSANDRA_SEED_PROVIDER}
    82  
    83  
    84  # if DC and RACK are set, use GossipingPropertyFileSnitch
    85  if [[ $CASSANDRA_DC && $CASSANDRA_RACK ]]; then
    86    echo "dc=$CASSANDRA_DC" > $CASSANDRA_CONF_DIR/cassandra-rackdc.properties
    87    echo "rack=$CASSANDRA_RACK" >> $CASSANDRA_CONF_DIR/cassandra-rackdc.properties
    88    CASSANDRA_ENDPOINT_SNITCH="GossipingPropertyFileSnitch"
    89  fi
    90  
    91  if [ -n "$CASSANDRA_MAX_HEAP" ]; then
    92    sed -ri "s/^(#)?-Xmx[0-9]+.*/-Xmx$CASSANDRA_MAX_HEAP/" "$CASSANDRA_CONF_DIR/jvm.options"
    93    sed -ri "s/^(#)?-Xms[0-9]+.*/-Xms$CASSANDRA_MAX_HEAP/" "$CASSANDRA_CONF_DIR/jvm.options"
    94  fi
    95  
    96  if [ -n "$CASSANDRA_REPLACE_NODE" ]; then
    97     echo "-Dcassandra.replace_address=$CASSANDRA_REPLACE_NODE/" >> "$CASSANDRA_CONF_DIR/jvm.options"
    98  fi
    99  
   100  for rackdc in dc rack; do
   101    var="CASSANDRA_${rackdc^^}"
   102    val="${!var}"
   103    if [ "$val" ]; then
   104  	sed -ri 's/^('"$rackdc"'=).*/\1 '"$val"'/' "$CASSANDRA_CONF_DIR/cassandra-rackdc.properties"
   105    fi
   106  done
   107  
   108  # TODO what else needs to be modified
   109  for yaml in \
   110    broadcast_address \
   111    broadcast_rpc_address \
   112    cluster_name \
   113    disk_optimization_strategy \
   114    endpoint_snitch \
   115    listen_address \
   116    num_tokens \
   117    rpc_address \
   118    start_rpc \
   119    key_cache_size_in_mb \
   120    concurrent_reads \
   121    concurrent_writes \
   122    memtable_cleanup_threshold \
   123    memtable_allocation_type \
   124    memtable_flush_writers \
   125    concurrent_compactors \
   126    compaction_throughput_mb_per_sec \
   127    counter_cache_size_in_mb \
   128    internode_compression \
   129    endpoint_snitch \
   130    gc_warn_threshold_in_ms \
   131    listen_interface \
   132    rpc_interface \
   133    ; do
   134    var="CASSANDRA_${yaml^^}"
   135    val="${!var}"
   136    if [ "$val" ]; then
   137      sed -ri 's/^(# )?('"$yaml"':).*/\2 '"$val"'/' "$CASSANDRA_CFG"
   138    fi
   139  done
   140  
   141  echo "auto_bootstrap: ${CASSANDRA_AUTO_BOOTSTRAP}" >> $CASSANDRA_CFG
   142  
   143  # set the seed to itself.  This is only for the first pod, otherwise
   144  # it will be able to get seeds from the seed provider
   145  if [[ $CASSANDRA_SEEDS == 'false' ]]; then
   146    sed -ri 's/- seeds:.*/- seeds: "'"$POD_IP"'"/' $CASSANDRA_CFG
   147  else # if we have seeds set them.  Probably StatefulSet
   148    sed -ri 's/- seeds:.*/- seeds: "'"$CASSANDRA_SEEDS"'"/' $CASSANDRA_CFG
   149  fi
   150  
   151  sed -ri 's/- class_name: SEED_PROVIDER/- class_name: '"$CASSANDRA_SEED_PROVIDER"'/' $CASSANDRA_CFG
   152  
   153  # send gc to stdout
   154  if [[ $CASSANDRA_GC_STDOUT == 'true' ]]; then
   155    sed -ri 's/ -Xloggc:\/var\/log\/cassandra\/gc\.log//' $CASSANDRA_CONF_DIR/cassandra-env.sh
   156  fi
   157  
   158  # enable RMI and JMX to work on one port
   159  echo "JVM_OPTS=\"\$JVM_OPTS -Djava.rmi.server.hostname=$POD_IP\"" >> $CASSANDRA_CONF_DIR/cassandra-env.sh
   160  
   161  # getting WARNING messages with Migration Service
   162  echo "-Dcassandra.migration_task_wait_in_seconds=${CASSANDRA_MIGRATION_WAIT}" >> $CASSANDRA_CONF_DIR/jvm.options
   163  echo "-Dcassandra.ring_delay_ms=${CASSANDRA_RING_DELAY}" >> $CASSANDRA_CONF_DIR/jvm.options
   164  
   165  if [[ $CASSANDRA_OPEN_JMX == 'true' ]]; then
   166    export LOCAL_JMX=no
   167    sed -ri 's/ -Dcom\.sun\.management\.jmxremote\.authenticate=true/ -Dcom\.sun\.management\.jmxremote\.authenticate=false/' $CASSANDRA_CONF_DIR/cassandra-env.sh
   168    sed -ri 's/ -Dcom\.sun\.management\.jmxremote\.password\.file=\/etc\/cassandra\/jmxremote\.password//' $CASSANDRA_CONF_DIR/cassandra-env.sh
   169  fi
   170  
   171  chmod 700 "${CASSANDRA_DATA}"
   172  chown -c -R cassandra "${CASSANDRA_DATA}" "${CASSANDRA_CONF_DIR}"
   173  
   174  export CLASSPATH=/kubernetes-cassandra.jar
   175  
   176  su cassandra -c "$CASSANDRA_HOME/bin/cassandra -f"