Commit fa1f9cb5 authored by one's avatar one
Browse files

[cluster] Update hostname in container

parent 3fdc646f
......@@ -3,15 +3,14 @@ set -e
# =====================================================================
# 节点映射表
# 1. 当前节点是主节点,WORKER_CONFIG不包括主节点
# 1. 当前节点是主节点,会挂载一个工作目录
# 2. 第一列是物理机hostname或IP,第二列是docker容器hostname
# =====================================================================
MASTER_NODE=$(hostname)
DOCKER_MASTER=node01
WORKER_CONFIG="
node1 node02
node2 node03
node3 node04
CLUSTER_CONFIG="
$(hostname) node01
node1 node02
node2 node03
node3 node04
"
# =====================================================================
......@@ -78,25 +77,47 @@ resolve_ip() {
echo "$ip"
}
MASTER_IP=$(resolve_ip ${MASTER_NODE})
DOCKER_ADD_HOSTS="--add-host ${DOCKER_MASTER}:${MASTER_IP}"
echo "[INFO] Master node: ${MASTER_NODE} -> ${DOCKER_MASTER} (${MASTER_IP})"
MASTER_NODE=$(hostname)
DOCKER_MASTER=""
MASTER_IP=""
DOCKER_ADD_HOSTS=""
MAPPING_STR=""
WORKER_NODE_ARR=()
# 读取hostname映射表
while read -r phys_host std_name rest; do
[[ -z "$phys_host" || "$phys_host" == \#* ]] && continue
IP=$(resolve_ip "$phys_host")
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
fi
# 所有节点的主机记录都需要加上
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})"
done <<< "$WORKER_CONFIG"
if [ -z "$MAPPING_STR" ]; then
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[*]}")
......@@ -121,6 +142,7 @@ fi
echo "[INFO] Starting docker containers..."
mkdir -p ${WORKDIR}
DOCKER_ARGS="--name=${CONTAINER_NAME} \
-e NODE_MAPPING=${MAPPING_STR} \
-v /opt/hyhal:/opt/hyhal:ro \
-v /root/.ssh:/root/.ssh \
-w /workspace \
......@@ -141,13 +163,13 @@ docker run -itd \
${DOCKER_ARGS} \
-v ${WORKDIR}:/workspace \
${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
pdsh -w ${WORKER_NODES} -S "docker run -itd \
${DOCKER_ARGS} \
${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
echo "[INFO] All containers are ready!"
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment