Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
tsoc
hg-misc-tools
Commits
fa1f9cb5
Commit
fa1f9cb5
authored
Mar 07, 2026
by
one
Browse files
[cluster] Update hostname in container
parent
3fdc646f
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
39 additions
and
17 deletions
+39
-17
projects/cluster/docker-cluster-up.sh
projects/cluster/docker-cluster-up.sh
+39
-17
No files found.
projects/cluster/docker-cluster-up.sh
View file @
fa1f9cb5
...
@@ -3,15 +3,14 @@ set -e
...
@@ -3,15 +3,14 @@ set -e
# =====================================================================
# =====================================================================
# 节点映射表
# 节点映射表
# 1. 当前节点是主节点,
WORKER_CONFIG不包括主节点
# 1. 当前节点是主节点,
会挂载一个工作目录
# 2. 第一列是物理机hostname或IP,第二列是docker容器hostname
# 2. 第一列是物理机hostname或IP,第二列是docker容器hostname
# =====================================================================
# =====================================================================
MASTER_NODE
=
$(
hostname
)
CLUSTER_CONFIG
=
"
DOCKER_MASTER
=
node01
$(
hostname
)
node01
WORKER_CONFIG
=
"
node1 node02
node1 node02
node2 node03
node2 node03
node3 node04
node3 node04
"
"
# =====================================================================
# =====================================================================
...
@@ -78,25 +77,47 @@ resolve_ip() {
...
@@ -78,25 +77,47 @@ resolve_ip() {
echo
"
$ip
"
echo
"
$ip
"
}
}
MASTER_IP
=
$(
resolve_ip
${
MASTER_NODE
}
)
MASTER_NODE
=
$(
hostname
)
DOCKER_ADD_HOSTS
=
"--add-host
${
DOCKER_MASTER
}
:
${
MASTER_IP
}
"
DOCKER_MASTER
=
""
echo
"[INFO] Master node:
${
MASTER_NODE
}
->
${
DOCKER_MASTER
}
(
${
MASTER_IP
}
)"
MASTER_IP
=
""
DOCKER_ADD_HOSTS
=
""
MAPPING_STR
=
""
WORKER_NODE_ARR
=()
WORKER_NODE_ARR
=()
# 读取hostname映射表
while
read
-r
phys_host std_name rest
;
do
while
read
-r
phys_host std_name rest
;
do
[[
-z
"
$phys_host
"
||
"
$phys_host
"
==
\#
*
]]
&&
continue
[[
-z
"
$phys_host
"
||
"
$phys_host
"
==
\#
*
]]
&&
continue
IP
=
$(
resolve_ip
"
$phys_host
"
)
IP
=
$(
resolve_ip
"
$phys_host
"
)
if
[
-z
"
$IP
"
]
;
then
if
[
-z
"
$IP
"
]
;
then
echo
"[Error] Failed to resolve IP for
worker
node '
$phys_host
'!"
echo
"[Error] Failed to resolve IP for node '
$phys_host
'!"
exit
1
exit
1
fi
fi
# 所有节点的主机记录都需要加上
DOCKER_ADD_HOSTS
=
"
${
DOCKER_ADD_HOSTS
}
--add-host
${
std_name
}
:
${
IP
}
"
DOCKER_ADD_HOSTS
=
"
${
DOCKER_ADD_HOSTS
}
--add-host
${
std_name
}
:
${
IP
}
"
WORKER_NODE_ARR+
=(
"
$phys_host
"
)
echo
"[INFO] Worker node:
${
phys_host
}
->
${
std_name
}
(
${
IP
}
)"
if
[
-z
"
$MAPPING_STR
"
]
;
then
done
<<<
"
$WORKER_CONFIG
"
MAPPING_STR
=
"
${
phys_host
}
:
${
std_name
}
"
else
MAPPING_STR
=
"
${
MAPPING_STR
}
,
${
phys_host
}
:
${
std_name
}
"
fi
# 判断是否是本物理机(主节点)
if
[
"
$phys_host
"
=
"
$MASTER_NODE
"
]
;
then
DOCKER_MASTER
=
$std_name
MASTER_IP
=
$IP
echo
"[INFO] Master node:
${
phys_host
}
->
${
std_name
}
(
${
IP
}
)"
else
WORKER_NODE_ARR+
=(
"
$phys_host
"
)
echo
"[INFO] Worker node:
${
phys_host
}
->
${
std_name
}
(
${
IP
}
)"
fi
done
<<<
"
$CLUSTER_CONFIG
"
if
[
-z
"
$DOCKER_MASTER
"
]
;
then
echo
"[Error] Current node '
$MASTER_NODE
' is not found in CLUSTER_CONFIG!"
exit
1
fi
WORKER_NODES
=
$(
IFS
=
,
;
echo
"
${
WORKER_NODE_ARR
[*]
}
"
)
WORKER_NODES
=
$(
IFS
=
,
;
echo
"
${
WORKER_NODE_ARR
[*]
}
"
)
...
@@ -121,6 +142,7 @@ fi
...
@@ -121,6 +142,7 @@ fi
echo
"[INFO] Starting docker containers..."
echo
"[INFO] Starting docker containers..."
mkdir
-p
${
WORKDIR
}
mkdir
-p
${
WORKDIR
}
DOCKER_ARGS
=
"--name=
${
CONTAINER_NAME
}
\
DOCKER_ARGS
=
"--name=
${
CONTAINER_NAME
}
\
-e NODE_MAPPING=
${
MAPPING_STR
}
\
-v /opt/hyhal:/opt/hyhal:ro
\
-v /opt/hyhal:/opt/hyhal:ro
\
-v /root/.ssh:/root/.ssh
\
-v /root/.ssh:/root/.ssh
\
-w /workspace
\
-w /workspace
\
...
@@ -141,13 +163,13 @@ docker run -itd \
...
@@ -141,13 +163,13 @@ docker run -itd \
${
DOCKER_ARGS
}
\
${
DOCKER_ARGS
}
\
-v
${
WORKDIR
}
:/workspace
\
-v
${
WORKDIR
}
:/workspace
\
${
IMAGE_NAME
}
\
${
IMAGE_NAME
}
\
bash
-c
"mkdir -p /run/sshd && /usr/sbin/sshd -p
${
SSH_PORT
}
; sleep infinity"
bash
-c
"
hostname
${
DOCKER_MASTER
}
&&
mkdir -p /run/sshd && /usr/sbin/sshd -p
${
SSH_PORT
}
; sleep infinity"
if
[
-n
"
$WORKER_NODES
"
]
;
then
if
[
-n
"
$WORKER_NODES
"
]
;
then
pdsh
-w
${
WORKER_NODES
}
-S
"docker run -itd
\
pdsh
-w
${
WORKER_NODES
}
-S
"docker run -itd
\
${
DOCKER_ARGS
}
\
${
DOCKER_ARGS
}
\
${
IMAGE_NAME
}
\
${
IMAGE_NAME
}
\
bash -c 'mkdir -p /run/sshd && /usr/sbin/sshd -p
${
SSH_PORT
}
; sleep infinity'"
bash -c '
PHYS=
\$
(hostname); for m in
\$
{NODE_MAPPING//,/ }; do [
\"\$
{m%%:*}
\"
=
\"\$
PHYS
\"
] && hostname
\$
{m##*:} && break; done;
mkdir -p /run/sshd && /usr/sbin/sshd -p
${
SSH_PORT
}
; sleep infinity'"
fi
fi
echo
"[INFO] All containers are ready!"
echo
"[INFO] All containers are ready!"
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment