Skip to content

Commit 463b6a0

Browse files
jschoiRRDajeong-Park
authored andcommitted
RBD cluster 구분에 대응하는 HA heartbeat 커맨드 수정
1 parent a525f2d commit 463b6a0

File tree

1 file changed

+63
-66
lines changed

1 file changed

+63
-66
lines changed

scripts/vm/hypervisor/kvm/kvmheartbeat_rbd.sh

Lines changed: 63 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -38,122 +38,119 @@ SourceHostIP=
3838
interval=0
3939
rflag=0
4040
cflag=0
41-
UUIDList=""
41+
UUIDList=
4242
skeyPath="/var/lib/libvirt/images/"
4343

44-
while getopts 'p:n:s:h:i:t:u:r:c' OPTION; do
44+
while getopts 'p:n:s:h:i:t:u:r:c' OPTION
45+
do
4546
case $OPTION in
4647
p)
47-
PoolName="$OPTARG"
48-
;;
48+
PoolName="$OPTARG"
49+
;;
4950
n)
50-
PoolAuthUserName="$OPTARG"
51-
;;
51+
PoolAuthUserName="$OPTARG"
52+
;;
5253
s)
53-
PoolAuthSecret="$OPTARG"
54-
;;
54+
PoolAuthSecret="$OPTARG"
55+
;;
5556
h)
56-
HostIP="$OPTARG"
57-
;;
57+
HostIP="$OPTARG"
58+
;;
5859
i)
59-
SourceHostIP="$OPTARG"
60-
;;
60+
SourceHostIP="$OPTARG"
61+
;;
6162
t)
62-
interval="$OPTARG"
63-
;;
63+
interval="$OPTARG"
64+
;;
6465
u)
65-
UUIDList="$OPTARG"
66-
;;
66+
UUIDList="$OPTARG"
67+
;;
6768
r)
68-
rflag=1
69-
;;
69+
rflag=1
70+
;;
7071
c)
71-
cflag=1
72-
;;
72+
cflag=1
73+
;;
7374
*)
74-
help
75-
;;
75+
help
76+
;;
7677
esac
7778
done
7879

7980
if [ -z "$PoolName" ]; then
8081
exit 2
8182
fi
8283

84+
# rados object touch action for vol list
85+
res=$(rbd -p $PoolName ls --id $PoolAuthUserName -m $SourceHostIP -K $skeyPath$PoolAuthSecret | grep MOLD-AC)
86+
if [ $? -gt 0 ]; then
87+
rbd -p $PoolName create --size 1 --id $PoolAuthUserName -m $SourceHostIP -K $skeyPath$PoolAuthSecret MOLD-AC
88+
fi
89+
90+
timestamp=$(date +%s)
91+
92+
if [ -n "$UUIDList" ]; then
93+
for uuid in $(echo $UUIDList | sed 's/,/ /g'); do
94+
objId=$(rbd -p $PoolName info $uuid --id $PoolAuthUserName -m $SourceHostIP -K $skeyPath$PoolAuthSecret | grep 'id:')
95+
objId=${objId#*id: }
96+
res=$(timeout 3s bash -c "rados -p $PoolName touch rbd_object_map.$objId")
97+
if [ $? -eq 0 ]; then
98+
# 정상적인 touch 상태면 image meta에 key: uuid / value : timestamp 입력
99+
rbd -p $PoolName --id $PoolAuthUserName -m $SourceHostIP -K $skeyPath$PoolAuthSecret image-meta set MOLD-AC $uuid $HostIP:$timestamp
100+
else
101+
# 정상적으로 touch 상태가 아니면 image meta에 key : uuid 삭제
102+
rbd -p $PoolName --id $PoolAuthUserName -m $SourceHostIP -K $skeyPath$PoolAuthSecret image-meta rm MOLD-AC $uuid
103+
fi
104+
done
105+
fi
106+
83107
#write the heart beat log
84108
write_hbLog() {
85109
Timestamp=$(date +%s)
86-
CurrentTime=$(date +"%Y-%m-%d %H:%M:%S")
87-
88-
obj=$(rbd -p $PoolName ls --id $PoolAuthUserName -m $SourceHostIP -K $skeyPath$PoolAuthSecret | grep MOLD-HB-$HostIP)
110+
obj=$(rbd -p $PoolName ls --id $PoolAuthUserName -m $SourceHostIP -K $skeyPath$PoolAuthSecret | grep MOLD-HB)
89111

90112
if [ $? -gt 0 ]; then
91-
rbd -p $PoolName create --size 1 --id $PoolAuthUserName -m $SourceHostIP -K $skeyPath$PoolAuthSecret MOLD-HB-$HostIP
113+
rbd -p $PoolName create --size 1 --id $PoolAuthUserName -m $SourceHostIP -K $skeyPath$PoolAuthSecret MOLD-HB
92114
fi
93115

94-
rbd -p $PoolName --id $PoolAuthUserName -m $SourceHostIP -K $skeyPath$PoolAuthSecret image-meta set MOLD-HB-$HostIP $HostIP $Timestamp
95-
ret=$?
96-
if [ $ret -eq 0 ]; then
97-
logger -p user.info -t MOLD-HA-HB "[Writing] 호스트:$HostIP | HB 파일 갱신(RBD, 스토리지:$PoolName) > [현 시간:$CurrentTime]"
98-
else
99-
logger -p user.info -t MOLD-HA-HB "[Writing] 호스트:$HostIP | HB 파일 갱신(RBD, 스토리지:$PoolName) > HB 갱신 실패!!!"
100-
fi
101-
return $ret
102-
116+
obj=$(rbd -p $PoolName --id $PoolAuthUserName -m $SourceHostIP -K $skeyPath$PoolAuthSecret image-meta set MOLD-HB $HostIP $Timestamp)
103117
if [ $? -gt 0 ]; then
104-
printf "Failed to create rbd file and set image-meta"
118+
printf "Failed to create rbd file and set image-meta"
105119
return 2
106120
fi
107121
return 0
108122
}
109123

110124
#check the heart beat log
111125
check_hbLog() {
112-
Timestamp=$(date +%s)
113-
CurrentTime=$(date +"%Y-%m-%d %H:%M:%S")
114-
115-
getHbTime=$(rbd -p $PoolName --id $PoolAuthUserName -m $SourceHostIP -K $skeyPath$PoolAuthSecret image-meta get MOLD-HB-$HostIP $HostIP)
126+
now=$(date +%s)
127+
getHbTime=$(rbd -p $PoolName --id $PoolAuthUserName -m $SourceHostIP -K $skeyPath$PoolAuthSecret image-meta get MOLD-HB $HostIP)
116128
if [ $? -gt 0 ] || [ -z "$getHbTime" ]; then
117129
return 1
118130
fi
119131

120-
diff=$(expr $Timestamp - $getHbTime)
121-
getHbTimeFmt=$(date -d @${getHbTime} '+%Y-%m-%d %H:%M:%S')
122-
logger -p user.info -t MOLD-HA-HB "[Checking] 호스트:$HostIP | HB 파일 체크(RBD, 스토리지:$PoolName) > [현 시간:$CurrentTime | HB 파일 시간:$getHbTimeFmt | 시간 차이:$diff초]"
123-
if { [ "$diff" -gt 30 ] && [ "$diff" -le 45 ]; } || { [ "$diff" -gt 60 ] && [ "$diff" -le 75 ]; }; then
124-
timeout 1 ssh ccvm "
125-
mysql -u cloud -pAblecloud1! -D cloud -e \"
126-
INSERT INTO event (
127-
uuid, type, state, description, user_id, account_id, domain_id,
128-
resource_id, resource_type, created, level, start_id,
129-
parameters, archived, display
130-
) VALUES (
131-
UUID(), 'HA.STATE.TRANSITION', 'Completed',
132-
'[Heartbeat Checking] Host: $HostIP | Storage: $PoolName [Current Time: $CurrentTime | HB File Time: $getHbTimeFmt | Time Difference: $diff seconds]', 1, 1, 1, 0, 'Host',
133-
UTC_TIMESTAMP(), 'WARN', 0, NULL, 0, 1
134-
);
135-
\"
136-
"
137-
fi
132+
diff=$(expr $now - $getHbTime)
133+
138134
if [ $diff -gt $interval ]; then
139-
logger -p user.info -t MOLD-HA-HB "[Result] 호스트:$HostIP | HB 체크 결과(RBD, 스토리지:$PoolName) > [HOST STATE : DEAD]"
140-
echo "### [HOST STATE : DEAD] Set maximum interval: ($interval seconds), Actual difference: ($diff seconds) => Considered host down in [PoolType : RBD] ###"
141-
return 0
142-
else
143-
logger -p user.info -t MOLD-HA-HB "[Result] 호스트:$HostIP | HB 체크 결과(RBD, 스토리지:$PoolName) > [HOST STATE : ALIVE]"
144-
echo "### [HOST STATE : ALIVE] in [PoolType : RBD] ###"
135+
return $diff
145136
fi
146137
return 0
147138
}
148139

149140
if [ "$rflag" == "1" ]; then
150141
check_hbLog
151-
exit 0
142+
diff=$?
143+
if [ $diff == 0 ]; then
144+
echo "### [HOST STATE : ALIVE] in [PoolType : RBD] ###"
145+
else
146+
echo "### [HOST STATE : DEAD] Set maximum interval: ($interval seconds), Actual difference: ($diff seconds) => Considered host down in [PoolType : RBD] ###"
147+
fi
148+
exit 0
152149
elif [ "$cflag" == "1" ]; then
153150
/usr/bin/logger -t heartbeat "kvmheartbeat_rbd.sh will reboot system because it was unable to write the heartbeat to the storage."
154151
sync &
155152
sleep 5
156-
echo b >/proc/sysrq-trigger
153+
echo b > /proc/sysrq-trigger
157154
exit $?
158155
else
159156
write_hbLog

0 commit comments

Comments
 (0)