1
1
#! /usr/bin/env bash
2
+
2
3
# This file creates minimal TiDB cluster for tests
3
4
4
5
REALPATH=$( which realpath)
10
11
11
12
# Set up constants
12
13
SCRIPT_PATH=$( realpath $( dirname " $0 " ) )
13
- TEMPDIR=$( mktemp -d)
14
14
DOCKER=$( which docker)
15
- TAG_VERSION=" v6.1.0"
16
15
SCRIPT_INIT=false
17
- MYIP= " 127.0.0.1 "
16
+ DOCKER_NETWORK= " mysql_provider_test_network "
18
17
RUNNING_CONTAINERS=" "
19
18
export MYSQL_PORT=${MYSQL_PORT:- 4000}
19
+ export TAG_VERSION=" v${MYSQL_VERSION:- 6.1.0} "
20
20
21
21
# Sanity checks
22
22
if [ -z " $DOCKER " ]; then
@@ -31,12 +31,13 @@ set -o nounset # Disallow expansion of unset variables
31
31
set -o pipefail # Use last non-zero exit code in a pipeline
32
32
33
33
function script_usage() {
34
- cat << EOF
34
+ cat << EOF | column -t -s"^"
35
35
Usage:
36
- --mysql-port <MYSQL_PORT> TiDB Listen port
37
- --init Init TiDB cluster
38
- --destroy Destroy resources
39
- -h|--help Displays this help
36
+ --init ^ Init TiDB cluster
37
+ --destroy ^ Destroy resources
38
+ --port <MYSQL_PORT> ^ TiDB Listen port (default: 4000)
39
+ --version <MYSQL_VERSION> ^ TiDB version (default: 6.1.0)
40
+ -h|--help ^ Displays this help
40
41
EOF
41
42
}
42
43
@@ -46,20 +47,31 @@ function parse_params() {
46
47
param=" $1 "
47
48
case $param in
48
49
--port)
49
- if [ -z " $2 " ]; then
50
- echo missing param
50
+ shift
51
+ if [ -z " $1 " ]; then
52
+ echo " Missing port"
53
+ exit 1
51
54
fi
52
- export MYSQL_PORT=${2:- 4000}
53
- shift # past argument
54
- shift # past value
55
+ export MYSQL_PORT=${1:- 4000}
56
+ shift
55
57
;;
58
+ --version)
59
+ shift
60
+ if [ -z " $1 " ]; then
61
+ echo " Missing version"
62
+ exit 1
63
+ fi
64
+ export TAG_VERSION=" v${1:- 6.1.0} "
65
+ shift
66
+ ;;
67
+
56
68
--init)
57
69
export SCRIPT_INIT=true
58
70
shift
59
71
;;
60
72
--destroy)
61
73
if [ -z " $SCRIPT_INIT " ]; then
62
- echo " Cant destroy and init at once"
74
+ echo " Can't destroy and init at once"
63
75
exit 1
64
76
fi
65
77
destroy_cluster
@@ -80,81 +92,13 @@ function parse_params() {
80
92
done
81
93
}
82
94
83
-
84
-
85
- # My IP detection source code
86
- function get_my_ip() {
87
- if [ ! -d " $SCRIPT_PATH /../bin" ]; then
88
- mkdir -p $SCRIPT_PATH /../bin
89
- fi
90
- cat << \__END__ > $SCRIPT_PATH /../bin/myip.go
91
- package main
92
-
93
- import (
94
- "errors"
95
- "fmt"
96
- "net"
97
- "os"
98
- )
99
-
100
- func main() {
101
-
102
- ip, err := externalIP()
103
- if err != nil {
104
- fmt.Println(err)
105
- os.Exit(1)
106
- }
107
- fmt.Println(ip)
108
-
109
- }
110
-
111
- func externalIP() (string, error) {
112
- ifaces, err := net.Interfaces()
113
- if err != nil {
114
- return "", err
115
- }
116
- for _, iface := range ifaces {
117
- if iface.Flags&net.FlagUp == 0 {
118
- continue // interface down
119
- }
120
- if iface.Flags&net.FlagLoopback != 0 {
121
- continue // loopback interface
122
- }
123
- addrs, err := iface.Addrs()
124
- if err != nil {
125
- return "", err
126
- }
127
- for _, addr := range addrs {
128
- var ip net.IP
129
- switch v := addr.(type) {
130
- case *net.IPNet:
131
- ip = v.IP
132
- case *net.IPAddr:
133
- ip = v.IP
134
- }
135
- if ip == nil || ip.IsLoopback() {
136
- continue
137
- }
138
- ip = ip.To4()
139
- if ip == nil {
140
- continue // not an ipv4 address
141
- }
142
- return ip.String(), nil
143
- }
144
- }
145
- return "", errors.New("are you connected to the network?")
146
- }
147
- __END__
148
- gofmt -w $SCRIPT_PATH /../bin/myip.go || return 1
149
- MYIP=$( go run $SCRIPT_PATH /../bin/myip.go)
150
- }
151
-
152
95
function destroy_cluster() {
153
96
RUNNING_CONTAINERS=$( ${DOCKER} ps -a -q -f name=tidb -f name=tikv -f name=pd)
154
97
echo " ==> Removing any existing TiDB cluster components"
155
98
if [ ! -z " $RUNNING_CONTAINERS " ]; then
156
99
${DOCKER} rm -f $RUNNING_CONTAINERS > /dev/null 2>&1
157
100
fi
101
+ ${DOCKER} network rm ${DOCKER_NETWORK} > /dev/null 2>&1 || true
158
102
}
159
103
160
104
function show_docker_logs_and_exit() {
@@ -165,66 +109,58 @@ function show_docker_logs_and_exit() {
165
109
}
166
110
167
111
function run_pd() {
168
- local _myip=$1
169
112
echo " ==> Pulling up PD component"
170
- ${DOCKER} run -d --name pd1 \
171
- -p 2379:2379 \
172
- -p 2380:2380 \
113
+ ${DOCKER} run -d --name pd \
173
114
-v /etc/localtime:/etc/localtime:ro \
174
- -v /data:/data \
175
- -h pd1 \
115
+ -h pd \
116
+ --network " $DOCKER_NETWORK " \
176
117
pingcap/pd:$TAG_VERSION \
177
- --name=" pd1 " \
178
- --data-dir=" $TEMPDIR /pd1 " \
118
+ --name=" pd " \
119
+ --data-dir=" /data " \
179
120
--client-urls=" http://0.0.0.0:2379" \
180
- --advertise-client-urls=" http://$_myip :2379" \
121
+ --advertise-client-urls=" http://pd :2379" \
181
122
--peer-urls=" http://0.0.0.0:2380" \
182
- --advertise-peer-urls=" http://$_myip :2380" \
183
- --initial-cluster=" pd1 =http://$_myip :2380" > /dev/null 2>&1 || show_docker_logs_and_exit pd
123
+ --advertise-peer-urls=" http://pd :2380" \
124
+ --initial-cluster=" pd =http://pd :2380" > /dev/null 2>&1 || show_docker_logs_and_exit pd
184
125
}
185
126
186
127
function run_tikv() {
187
- local _myip=$1
188
128
echo " ==> Pulling up TiKV component"
189
- ${DOCKER} run -d --name tikv1 \
190
- -p 20160:20160 \
191
- -p 20180:20180 \
129
+ ${DOCKER} run -d --name tikv \
192
130
-v /etc/localtime:/etc/localtime:ro \
193
- -v /data:/data \
194
- -h tikv1 \
131
+ -h tikv \
132
+ --network " $DOCKER_NETWORK " \
195
133
pingcap/tikv:v4.0.0 \
196
134
--addr=" 0.0.0.0:20160" \
197
- --advertise-addr=" $_myip :20160" \
135
+ --advertise-addr=" tikv :20160" \
198
136
--status-addr=" 0.0.0.0:20180" \
199
- --data-dir=" $TEMPDIR /tikv1 " \
200
- --pd=" $_myip :2379" > /dev/null 2>&1 || show_docker_logs_and_exit tikv
137
+ --data-dir=" /data " \
138
+ --pd=" pd :2379" > /dev/null 2>&1 || show_docker_logs_and_exit tikv
201
139
}
202
140
203
141
function run_tidb() {
204
- local _myip=$1
205
- local _mysql_port=$2
142
+ local _mysql_port=$1
206
143
echo " ==> Pulling up TiDB component"
207
144
${DOCKER} run -d --name tidb \
208
145
-p $_mysql_port :$_mysql_port \
209
- -p 10080:10080 \
210
146
-v /etc/localtime:/etc/localtime:ro \
211
147
-h tidb \
148
+ --network " $DOCKER_NETWORK " \
212
149
pingcap/tidb:$TAG_VERSION \
213
150
--store=tikv \
214
151
-P $_mysql_port \
215
- --path=" $_myip :2379" > /dev/null 2>&1 || show_docker_logs_and_exit tidb
152
+ --path=" pd :2379" > /dev/null 2>&1 || show_docker_logs_and_exit tidb
216
153
}
217
154
218
155
function main() {
219
- local _myip
220
156
parse_params " $@ "
221
157
if [[ " $SCRIPT_INIT " = " true" ]]; then
222
158
echo " ==> Pulling up TiDB cluster with TiKV and TB components"
223
- get_my_ip && \
224
159
destroy_cluster && \
225
- run_pd $MYIP && \
226
- run_tikv $MYIP && \
227
- run_tidb $MYIP $MYSQL_PORT
160
+ ${DOCKER} network create ${DOCKER_NETWORK} && \
161
+ run_pd && \
162
+ run_tikv && \
163
+ run_tidb $MYSQL_PORT
228
164
229
165
else
230
166
script_usage
0 commit comments