"git@developer.sourcefind.cn:yangql/googletest.git" did not exist on "e77deb29a65444247343c3ace800782de3706fd1"
Commit fa1f9cb5 authored by one's avatar one
Browse files

[cluster] Update hostname in container

parent 3fdc646f
...@@ -3,12 +3,11 @@ set -e ...@@ -3,12 +3,11 @@ 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")
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})" echo "[INFO] Worker node: ${phys_host} -> ${std_name} (${IP})"
done <<< "$WORKER_CONFIG" 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!"
......
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