-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathtest.sh
More file actions
executable file
·157 lines (134 loc) · 5.7 KB
/
test.sh
File metadata and controls
executable file
·157 lines (134 loc) · 5.7 KB
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
145
146
147
148
149
150
151
152
153
154
155
156
157
#!/usr/bin/env bash
VERSION="$1"
CONTAINER_PROXY_NAME="valkey-benchmark-proxy"
CONTAINER_MASTER_NAME="valkey-benchmark-master"
CONTAINER_SLAVE1_NAME="valkey-benchmark-slave1"
CONTAINER_SLAVE2_NAME="valkey-benchmark-slave2"
NETWORK_NAME="valkey-benchmark-net"
DRYCC_VALKEY_PASSWORD=123456
function clean_before_exit {
# delay before exiting, so stdout/stderr flushes through the logging system
clean-valkey
}
trap clean_before_exit EXIT
ensure-network() {
# Use a dedicated bridge network so each container gets a unique IP and
# can reach its neighbours. The default rootless networking (pasta) makes
# every container share the host IP, which breaks master/replica/sentinel
# discovery because containers cannot connect to each other by that IP.
if ! podman network exists "$NETWORK_NAME" >/dev/null 2>&1; then
podman network create "$NETWORK_NAME" >/dev/null
fi
}
start-valkey-master() {
podman run -d \
--rm \
--network "$NETWORK_NAME" \
--env "REDISCLI_AUTH=$DRYCC_VALKEY_PASSWORD" \
--env "DRYCC_VALKEY_PASSWORD=$DRYCC_VALKEY_PASSWORD" \
--name "$CONTAINER_MASTER_NAME" \
"registry.drycc.cc/drycc/valkey:$VERSION" \
sleep infinity
master_ip=$(podman exec "$CONTAINER_MASTER_NAME" hostname -i | tr -d '\r\n')
podman exec --env "DRYCC_VALKEY_SENTINEL=$master_ip" "$CONTAINER_MASTER_NAME" init-stack valkey-start server "$master_ip" &
podman exec --env "DRYCC_VALKEY_SENTINEL=$master_ip" "$CONTAINER_MASTER_NAME" init-stack valkey-start sentinel "$master_ip" &
}
start-valkey-slave1() {
podman run -d \
--rm \
--network "$NETWORK_NAME" \
--env "REDISCLI_AUTH=$DRYCC_VALKEY_PASSWORD" \
--env "DRYCC_VALKEY_PASSWORD=$DRYCC_VALKEY_PASSWORD" \
--name "$CONTAINER_SLAVE1_NAME" \
"registry.drycc.cc/drycc/valkey:$VERSION" \
sleep infinity
slave1_ip=$(podman exec -it "$CONTAINER_SLAVE1_NAME" hostname -i | tr -d '\r\n')
podman exec --env "DRYCC_VALKEY_SENTINEL=$master_ip" "$CONTAINER_SLAVE1_NAME" init-stack valkey-start server "$slave1_ip" &
podman exec --env "DRYCC_VALKEY_SENTINEL=$master_ip" "$CONTAINER_SLAVE1_NAME" init-stack valkey-start sentinel "$slave1_ip" &
}
start-valkey-slave2() {
podman run -d \
--rm \
--network "$NETWORK_NAME" \
--env "REDISCLI_AUTH=$DRYCC_VALKEY_PASSWORD" \
--env "DRYCC_VALKEY_PASSWORD=$DRYCC_VALKEY_PASSWORD" \
--name "$CONTAINER_SLAVE2_NAME" \
"registry.drycc.cc/drycc/valkey:$VERSION" \
sleep infinity
slave2_ip=$(podman exec -it "$CONTAINER_SLAVE2_NAME" hostname -i | tr -d '\r\n')
podman exec --env "DRYCC_VALKEY_SENTINEL=$master_ip" "$CONTAINER_SLAVE2_NAME" init-stack valkey-start server "$slave2_ip" &
podman exec --env "DRYCC_VALKEY_SENTINEL=$master_ip" "$CONTAINER_SLAVE2_NAME" init-stack valkey-start sentinel "$slave2_ip" &
}
start-valkey-proxy() {
podman run -d \
--rm \
--network "$NETWORK_NAME" \
--env "REDISCLI_AUTH=$DRYCC_VALKEY_PASSWORD" \
--env "DRYCC_VALKEY_PASSWORD=$DRYCC_VALKEY_PASSWORD" \
--name "$CONTAINER_PROXY_NAME" \
"registry.drycc.cc/drycc/valkey:$VERSION" \
sleep infinity
podman exec --env "DRYCC_VALKEY_SENTINEL=$master_ip" "$CONTAINER_PROXY_NAME" init-stack valkey-start proxy &
}
clean-valkey() {
{
podman kill "$CONTAINER_PROXY_NAME"
podman kill "$CONTAINER_SLAVE1_NAME"
podman kill "$CONTAINER_SLAVE2_NAME"
podman kill "$CONTAINER_MASTER_NAME"
podman network rm -f "$NETWORK_NAME"
} >>/dev/null 2>&1
}
clean-valkey
ensure-network
start-valkey-master
start-valkey-slave1
start-valkey-slave2
start-valkey-proxy
echo "run valkey proxy benchmark..."
podman exec "$CONTAINER_PROXY_NAME" init-stack valkey-benchmark -p 16379 -a $DRYCC_VALKEY_PASSWORD
echo "run valkey master benchmark..."
podman exec "$CONTAINER_MASTER_NAME" init-stack valkey-benchmark -a $DRYCC_VALKEY_PASSWORD
echo "check slave all keys..."
KEYS=$(podman exec "$CONTAINER_MASTER_NAME" bash -c 'init-stack valkey-cli KEYS "*"')
if [[ "${KEYS}" == "" ]]; then
echo "error: there is no data from the database"
exit 1
fi
echo "check sentinel $CONTAINER_MASTER_NAME get master..."
MASTER=$(podman exec "$CONTAINER_MASTER_NAME" init-stack valkey-cli -p 26379 sentinel get-master-addr-by-name drycc)
if [[ "${MASTER}" == "" ]]; then
echo "error: unable to obtain master information"
exit 1
fi
echo "check sentinel $CONTAINER_SLAVE1_NAME get master..."
MASTER=$(podman exec "$CONTAINER_SLAVE1_NAME" init-stack valkey-cli -p 26379 sentinel get-master-addr-by-name drycc)
if [[ "${MASTER}" == "" ]]; then
echo "error: unable to obtain master information"
exit 1
fi
echo "check sentinel $CONTAINER_SLAVE2_NAME get master..."
MASTER=$(podman exec "$CONTAINER_SLAVE2_NAME" init-stack valkey-cli -p 26379 sentinel get-master-addr-by-name drycc)
if [[ "${MASTER}" == "" ]]; then
echo "error: unable to obtain master information"
exit 1
fi
echo "check sentinel $CONTAINER_MASTER_NAME get slaves..."
SLAVES=$(podman exec "$CONTAINER_MASTER_NAME" init-stack valkey-cli -p 26379 sentinel replicas drycc)
if [[ "${SLAVES}" == "" ]]; then
echo "error: unable to obtain slaves information"
exit 1
fi
echo "check sentinel $CONTAINER_SLAVE1_NAME get slaves..."
SLAVES=$(podman exec "$CONTAINER_SLAVE1_NAME" init-stack valkey-cli -p 26379 sentinel replicas drycc)
if [[ "${SLAVES}" == "" ]]; then
echo "error: unable to obtain slaves information"
exit 1
fi
echo "check sentinel $CONTAINER_SLAVE2_NAME get slaves..."
SLAVES=$(podman exec "$CONTAINER_SLAVE2_NAME" init-stack valkey-cli -p 26379 sentinel replicas drycc)
if [[ "${SLAVES}" == "" ]]; then
echo "error: unable to obtain slaves information"
exit 1
fi
echo "all test ok..."