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"