1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144
|
#
# Common shell routines for testing remote key servers (incl. clustering)
#
# Copyright (c) 2021,2024 Red Hat.
#
# wait for local server on given port
_wait_for_key_server()
{
__port=6379 # default
[ $# -eq 1 ] && __port=$1
__n=1
while [ $__n -lt 10 ]; do
$keys_cli -p $__port ping >/dev/null 2>&1 && return 0
pmsleep 0.25
__n=`expr $__n + 1`
done
echo _wait_for_key_server on port $__port FAILED
return 1
}
# wait for PCP schema version to exist in local server on given port
# (must observe version 2 or higher in the pcp:version:schema key).
_wait_for_pcp_schema()
{
__port=6379 # default
[ $# -eq 1 ] && __port=$1
__n=1
while [ $__n -lt 10 ]; do
__schema=0`$keys_cli -p $__port get pcp:version:schema 2>/dev/null`
test "$__schema" -gt 1 && return 0
pmsleep 0.25
__n=`expr $__n + 1`
done
echo _wait_for_pcp_schema on port $__port FAILED
return 1
}
_key_server_cluster_3nodes_start()
{
echo "== Start a key server cluster"
echo "== Start node 1"
key_server_node1_port=`_find_free_port`
$key_server --port $key_server_node1_port --save "" --cluster-enabled yes --cluster-config-file $tmp.keys1.cluster.conf > $tmp.keys1.out 2>&1 &
__key_server_node1_pid=$!
echo "key_server_node1_port=$key_server_node1_port" >>$seq_full
echo "__key_server_node1_pid=$__key_server_node1_pid" >>$seq_full
_wait_for_key_server $key_server_node1_port
$keys_cli -p $key_server_node1_port ping
$keys_cli -p $key_server_node1_port flushall
echo "== Start node 2"
key_server_node2_port=`_find_free_port`
$key_server --port $key_server_node2_port --save "" --cluster-enabled yes --cluster-config-file $tmp.keys2.cluster.conf > $tmp.keys2.out 2>&1 &
__key_server_node2_pid=$!
echo "key_server_node2_port=$key_server_node2_port" >>$seq_full
echo "__key_server_node2_pid=$__key_server_node2_pid" >>$seq_full
_wait_for_key_server $key_server_node2_port
$keys_cli -p $key_server_node2_port ping
$keys_cli -p $key_server_node2_port flushall
echo "== Start node 3"
key_server_node3_port=`_find_free_port`
$key_server --port $key_server_node3_port --save "" --cluster-enabled yes --cluster-config-file $tmp.keys3.cluster.conf > $tmp.keys3.out 2>&1 &
__key_server_node3_pid=$!
echo "key_server_node3_port=$key_server_node3_port" >>$seq_full
echo "__key_server_node3_pid=$__key_server_node3_pid" >>$seq_full
_wait_for_key_server $key_server_node3_port
$keys_cli -p $key_server_node3_port ping
$keys_cli -p $key_server_node3_port flushall
echo
echo "== Create key server cluster"
# --cluster-yes is not supported <= 5.0.3 (RHEL 7), use workaround instead
yes yes | $keys_cli --cluster create 127.0.0.1:$key_server_node1_port 127.0.0.1:$key_server_node2_port 127.0.0.1:$key_server_node3_port \
| sed 's/\x1b\[[0-9;]*m//g' \
| tee -a $seq_full \
| grep '[OK]'
echo
echo "== Wait for cluster to get ready"
for __i in `seq 1 30`
do
if $keys_cli -p $key_server_node1_port cluster info | grep -q "cluster_state:ok" && echo "OK"
then
__cluster_ready=yes
break
fi
pmsleep 2
done
if [ -z "$__cluster_ready" ]
then
echo "Key server cluster didn't get ready in 60 seconds:"
echo $keys_cli -p $key_server_node1_port cluster info
$keys_cli -p $key_server_node1_port cluster info
exit 1
fi
echo
echo "== Cluster status"
$keys_cli -p $key_server_node1_port cluster info | tr -d '\r' | grep -E "cluster_(state|known_nodes|size)"
}
_key_server_cluster_3nodes_stop()
{
printf "\n== Key server Node 1 keys:\n" >> $seq_full
$keys_cli -p $key_server_node1_port keys '*' >> $seq_full
printf "\n== Key server Node 1 log:\n" >> $seq_full
cat $tmp.keys1.out >> $seq_full
printf "\n== Key server Node 2 keys:\n" >> $seq_full
$keys_cli -p $key_server_node2_port keys '*' >> $seq_full
printf "\n== Key server Node 2 log:\n" >> $seq_full
cat $tmp.keys2.out >> $seq_full
printf "\n== Key server Node 3 keys:\n" >> $seq_full
$keys_cli -p $key_server_node3_port keys '*' >> $seq_full
printf "\n== Key server Node 3 log:\n" >> $seq_full
cat $tmp.keys3.out >> $seq_full
[ -n "$key_server_node1_port" ] && $keys_cli -p $key_server_node1_port shutdown
[ -n "$key_server_node2_port" ] && $keys_cli -p $key_server_node2_port shutdown
[ -n "$key_server_node3_port" ] && $keys_cli -p $key_server_node3_port shutdown
}
if which valkey-cli >/dev/null 2>&1
then
keys_cli=valkey-cli
elif which redis-cli >/dev/null 2>&1
then
keys_cli=redis-cli
else
_notrun "No key server command line interface found"
fi
if which valkey-server >/dev/null 2>&1
then
key_server=valkey-server
elif which redis-server >/dev/null 2>&1
then
key_server=redis-server
else
_notrun "No key server binary found"
fi
|