===== Die wichtigen täglichen Befehle für einen Oracle NoSQL Store v3 in einem Skript umsetzen=====
Per Script wird es einfacher den gesamten Store über die verteilten Knoten zu starten / zu stoppen und wichtige Eigenschaften zu prüfen.
Vorbereitung:
* Zwischen den Knoten per SSL Key Austausch einen Login ohne Password zu realisieren siehe [[linux:vi#ssh_key_austausch |Key austauschen]]
* Library/Scripte herunterladen =>
* {{:nosql:nosql_create_skripte_v02.zip|NoSQL Scripts}}
* Die aktuellste Version vom Script findet sich hier:
* => [[https://orapowershell.codeplex.com/SourceControl/latest#bash/ONoSQL/| OraPowerShell - Linux Scripts für die Oracle NoSQL Datenbank]]
* Konfigurations-Datei "nodelist.conf" anpassen/erstellen
=== Beispiel Konfiguration===
Über die Datei nodelist.conf wird die Umgebung eingestellt, damit nichts im eigentlichen Skript angepasst werden muss. Jeder Knoten wird über das Array hinterlegt, über ADMIN_NODE wird definiert welcher Knoten für die administrativen Befehle verwendet werden soll.
#List of all nodes of the store
STORE_NAME[0]=GPIDB
STORE_PORT[0]=5000
STORE_NODE[0]=nosqldb01
STORE_ROOT[0]=/opt/oracle/kvdata
STORE_HOME[0]=/opt/oracle/produkt/11.2.0/kv-3.2.5
STORE_HTTP_ADMIN_PORT[0]=5001
STORE_ADMIN_PORT[0]=5005
STORE_HA_RANGE[0]=5010,5020
STORE_SERVICERANGE[0]=5021,5040
STORE_NAME[1]=GPIDB
STORE_PORT[1]=5000
STORE_NODE[1]=nosqldb02
STORE_ROOT[1]=/opt/oracle/kvdata
STORE_HOME[1]=/opt/oracle/produkt/11.2.0/kv-3.2.5
STORE_HTTP_ADMIN_PORT[1]=5001
STORE_ADMIN_PORT[1]=5005
STORE_HA_RANGE[1]=5010,5020
STORE_SERVICERANGE[1]=5021,5040
STORE_NAME[2]=GPIDB
STORE_PORT[2]=5000
STORE_NODE[2]=nosqldb03
STORE_ROOT[2]=/opt/oracle/kvdata
STORE_HOME[2]=/opt/oracle/produkt/11.2.0/kv-3.2.5
STORE_HTTP_ADMIN_PORT[2]=5001
STORE_ADMIN_PORT[2]=5005
STORE_HA_RANGE[2]=5010,5020
STORE_SERVICERANGE[2]=5021,5040
# Admin Node
ADMIN_NODE=0
ADMIN_SEC_CONFIG=TRUE
ADMIN_USER=root
ADMIN_SECRET=root_user.security
Wird der Store ohne Password Security betrieben, den Parameter "ADMIN_SEC_CONFIG" auf "FALSE" setzen!
=== Das eigentliche Script ===
#!/bin/sh
#
# Part of the Gunther Pippèrr
# GPI Oracle Script Library
# for more information see: http://orapowershell.codeplex.com
#
# Purpose
# Main Admin Task for a Oracle NoSQL Store
# Configuration read from nodelist.conf
#
# For NoSQL Version 3.1 - Oracle 12c R3
#
#
########## Environment ##############
SCRIPTPATH=$(cd ${0%/*} && echo $PWD/${0##*/})
SCRIPTS_DIR=`dirname "$SCRIPTPATH{}"`
# for Log usage
DAY_OF_WEEK="`date +%w`"
export DAY_OF_WEEK
DAY="`date +%d`"
export DAY
. ${SCRIPTS_DIR}/bash_lib.sh
#################################################
# read the Node Configuration
declare -a STORE_NODE
declare -a STORE_ROOT
declare -a STORE_HOME
declare -a STORE_NAME
. ${SCRIPTS_DIR}/nodelist.conf
################################################
# check Security Configuration
if [ "${ADMIN_SEC_CONFIG}" == "TRUE" ];
then
STORE_CONNECT_SECURITY="-security ${STORE_ROOT[$ADMIN_NODE]}/security/${ADMIN_SECRET}"
else
STORE_CONNECT_SECURITY=""
fi
############################################
createUser() {
printf "Name of the Store User:"
read USER_NAME
printf "Password of the Store User:"
read USER_PWD
# create the command file for the store user
CREATE_USER_COMMANDFILE="${SCRIPTS_DIR}/create_storeuser_${USER_NAME}_${STORE_NAME[$ADMIN_NODE]}.command"
# create the Store user
echo "plan create-user -name ${USER_NAME} -password ${USER_PWD} -wait" >${CREATE_USER_COMMANDFILE}
echo "plan grant -role readwrite -user ${USER_NAME} -wait" >>${CREATE_USER_COMMANDFILE}
echo "show user -name ${USER_NAME}" >>${CREATE_USER_COMMANDFILE}
java -jar ${STORE_HOME[$ADMIN_NODE]}/lib/kvstore.jar runadmin -port ${STORE_PORT[$ADMIN_NODE]} -host ${STORE_NODE[$ADMIN_NODE]} ${STORE_CONNECT_SECURITY} < ${CREATE_USER_COMMANDFILE}
java -jar ${STORE_HOME[$ADMIN_NODE]}/lib/kvstore.jar securityconfig pwdfile create -file ${STORE_ROOT[0]}/security/${USER_NAME}.pwd
java -jar ${STORE_HOME[$ADMIN_NODE]}/lib/kvstore.jar securityconfig pwdfile secret -file ${STORE_ROOT[0]}/security/${USER_NAME}.pwd -set -alias ${USER_NAME} -secret ${USER_PWD}
#Root user configuration anlegen
echo "oracle.kv.ssl.trustStore=client.trust" > ${STORE_ROOT[0]}/security/${USER_NAME}_user.security
echo "oracle.kv.transport=ssl" >> ${STORE_ROOT[0]}/security/${USER_NAME}_user.security
echo "oracle.kv.ssl.protocols=TLSv1.2,TLSv1.1,TLSv1" >> ${STORE_ROOT[0]}/security/${USER_NAME}_user.security
echo "oracle.kv.ssl.hostnameVerifier=dnmatch(CN\=NoSQL)" >> ${STORE_ROOT[0]}/security/${USER_NAME}_user.security
echo "oracle.kv.auth.pwdfile.file=${USER_NAME}.pwd" >> ${STORE_ROOT[0]}/security/${USER_NAME}_user.security
echo "oracle.kv.auth.username=${USER_NAME}" >> ${STORE_ROOT[0]}/security/${USER_NAME}_user.security
echo "-- Copy the Login Information to the other Nodes"
ELEMENT_COUNT=${#STORE_NODE[@]}
INDEX=1
while [ "${INDEX}" -lt "${ELEMENT_COUNT}" ]
do
scp ${STORE_ROOT[0]}/security/${USER_NAME}_user.security ${STORE_NODE[$INDEX]}:${STORE_ROOT[$INDEX]}/security/${USER_NAME}_user.security
scp ${STORE_ROOT[0]}/security/${USER_NAME}.pwd ${STORE_NODE[$INDEX]}:${STORE_ROOT[$INDEX]}/security/${USER_NAME}.pwd
let "INDEX = $INDEX + 1"
done
printError
}
dropUser(){
printf "Name of the Store User:"
read USER_NAME
# create the command file for the store user
CREATE_USER_COMMANDFILE="${SCRIPTS_DIR}/create_storeuser_${USER_NAME}_${STORE_NAME[$ADMIN_NODE]}.command"
# create the Store user
echo "show user -name ${USER_NAME}" >${CREATE_USER_COMMANDFILE}
echo "plan drop-user -name ${USER_NAME} -wait" >>${CREATE_USER_COMMANDFILE}
java -jar ${STORE_HOME[$ADMIN_NODE]}/lib/kvstore.jar runadmin -port ${STORE_PORT[$ADMIN_NODE]} -host ${STORE_NODE[$ADMIN_NODE]} ${STORE_CONNECT_SECURITY} < ${CREATE_USER_COMMANDFILE}
echo "-- Delete the login Information from all nodes"
COMMAND_TITLE="remove Login Information"
COMMAND="rm #KVROOTI#/security/${USER_NAME}*"
COMMANDUSR=`whoami`
doStore
printLine "OK"
printError
}
#################################################
# define commands used more then one time
STARTCOMMAND="nohup java -jar #KVHOMEI#/lib/kvstore.jar start -root #KVROOTI# > /tmp/nohup.out &"
STOPCOMMAND="java -jar #KVHOMEI#/lib/kvstore.jar stop -root #KVROOTI#"
#################################################
# Check command parameter
case "$1" in
start)
# start all Storage Nodes
COMMAND_TITLE="Starting Store"
COMMAND=${STARTCOMMAND}
COMMANDUSR=`whoami`
doStore
printLine "OK"
;;
stop)
# stop all Storage Nodes
COMMAND_TITLE="Shutdown Store"
COMMAND=${STOPCOMMAND}
COMMANDUSR=`whoami`
doStore
printLine "OK"
;;
admin)
# admin
printLine "-- Command java -jar $KVHOME/lib/kvstore.jar runadmin -port ${STORE_PORT[$ADMIN_NODE]} -host ${STORE_NODE[$ADMIN_NODE]} ${STORE_CONNECT_SECURITY} "
java -jar ${STORE_HOME[$ADMIN_NODE]}/lib/kvstore.jar runadmin -port ${STORE_PORT[$ADMIN_NODE]} -host ${STORE_NODE[$ADMIN_NODE]} ${STORE_CONNECT_SECURITY}
;;
console)
# kvshell
printLine "-- Command java -jar $KVHOME/lib/kvcli.jar -host $HOSTNAME -port ${STORE_PORT[$ADMIN_NODE]} -store ${STORE_NAME[$ADMIN_NODE]} ${STORE_CONNECT_SECURITY}"
printLine "-- To connect to the store connect with \"connect store -name ${STORE_NAME[$ADMIN_NODE]} ${STORE_CONNECT_SECURITY}\""
java -jar ${STORE_HOME[$ADMIN_NODE]}/lib/kvcli.jar -host $HOSTNAME -port ${STORE_PORT[$ADMIN_NODE]} -store ${STORE_NAME[$ADMIN_NODE]} ${STORE_CONNECT_SECURITY}
;;
count)
# kvshell
printLine "-- Command java -jar $KVHOME/lib/kvcli.jar -host $HOSTNAME -port ${STORE_PORT[$ADMIN_NODE]} -store ${STORE_NAME[$ADMIN_NODE]} ${STORE_CONNECT_SECURITY} aggregate kv -count"
java -jar ${STORE_HOME[$ADMIN_NODE]}/lib/kvcli.jar -host $HOSTNAME -port ${STORE_PORT[$ADMIN_NODE]} -store ${STORE_NAME[$ADMIN_NODE]} ${STORE_CONNECT_SECURITY} aggregate kv -count
;;
ping)
# ping
printLine "-- Command java -jar $KVHOME/lib/kvstore.jar ping -port ${STORE_PORT[$ADMIN_NODE]} -host ${STORE_NODE[$ADMIN_NODE]} ${STORE_CONNECT_SECURITY}"
java -jar ${STORE_HOME[$ADMIN_NODE]}/lib/kvstore.jar ping -port ${STORE_PORT[$ADMIN_NODE]} -host ${STORE_NODE[$ADMIN_NODE]} ${STORE_CONNECT_SECURITY}
;;
createUser)
#create a store user
createUser
;;
dropUser)
#drop a store user
dropUser
;;
status)
# status of the nodes
COMMAND_TITLE="Check Status "
COMMAND="jps -m | grep kv"
COMMANDUSR=`whoami`
doStore
;;
kill)
# status
COMMAND_TITLE="Kill all "
COMMAND="killall java"
COMMANDUSR=`whoami`
doStore
;;
fwstatus)
# status
COMMAND_TITLE="Check the firewall Rules "
COMMAND="iptables -L -n"
COMMANDUSR="root"
doStore
;;
cleanLogfile)
# save copy of all logfiles
COMMAND_TITLE="clean Logfiles: "
COMMAND="find #KVROOTI#/. -name \"*.log\" -exec mv {} {}.old_${DAY_OF_WEEK} \;"
COMMANDUSR=`whoami`
doStore
# remove all logfiles
COMMAND="find #KVROOTI#/. -name \"*.log\" -exec rm {} \;"
doStore
;;
getStoreSize)
# get the store total size on disk
COMMAND_TITLE="Get Store total Size on disk for each node: "
COMMAND="du -sh #KVROOTI#"
COMMANDUSR=`whoami`
doStore
;;
getStoreSizeDetail)
# get the store total size on disk
COMMAND_TITLE="Get Store total Size on disk for each node: "
COMMAND="du -h #KVROOTI#"
COMMANDUSR=`whoami`
doStore
;;
catLogfile)
# remove all logfiles
COMMAND_TITLE="clean Logfiles: "
COMMAND="find #KVROOTI#/. -name \"*.log\" -exec sh -c \"echo cut > {}\" \;"
COMMANDUSR=`whoami`
doStore
;;
readLogfile)
# remove all logfiles
COMMAND_TITLE="read Logfiles: "
COMMAND="grep Exception #KVROOTI#/*.log"
COMMANDUSR=`whoami`
doStore
COMMAND="grep Exception #KVROOTI#/#STORENAME#/log/*.log"
doStore
;;
reload|restart)
# stop and restart
COMMAND_TITLE="Starting Store:"
COMMAND=${STARTCOMMAND}
COMMANDUSR=`whoami`
doStore
COMMAND_TITLE="Shutdown Store: "
COMMAND=${STOPCOMAND}
COMMANDUSR=`whoami`
doStore
printLine "OK"
;;
createStore)
# createStore
echo " createStore -> Use the Script createStore.sh "
;;
*)
echo "-- Check the configuration file entries in nodelist.conf"
doCheck
echo " "
echo "Usage: $0 Start on each node the SN "
echo " stop -> Stop on each Node the SN "
echo " restart -> Restart on each Node the SN "
echo " reload -> Restart on each Node the SN "
echo " status -> Status on each node the SN "
echo " kill -> Kill on each node the SN with killall java "
echo " admin -> Start the admin console "
echo " console -> Start the kvshell console "
echo " count -> Count all entries in the store "
echo " ping -> Ping the Store "
echo " createUser -> Create a user in the store "
echo " dropUser -> Create a user in the store "
echo " getStoreSize -> get the Disk size for the store for each node"
echo " getStoreSizeDetail -> get he Disk size for the store for each node for each SN"
echo " fwstatus -> Show the status of the FW as root! "
echo " cleanLogfile -> Clean Log file on each node the SN "
echo " readLogfile -> Search Error in the logfile on each node the SN "
echo " catLogfile -> Cut the logfile on each node the SN "
echo " createStore -> Use the Script createStore.sh "
echo " celeteStore -> Use the Script deleteStore.sh "
exit 1
esac
#################################################
# finish