提交 115c0021 编写于 作者: Z zhaoyanggh

script to control cluster used for test robust

上级 b8e80467
#!/bin/bash
stty erase '^H'
stty erase '^?'
# 运行前需要安装expect; apt install expect
# 运行方式:
# ./cluster.sh -c xxx.cfg
# cfg文件内格式: 每行代表一个节点 第一列为external ip、第二列为密码、第三列为用户名、第四列为hostname、第五列为interal ip
# 注意:列与列直接用空格隔开
# 例子:
# 51.143.97.155 tbase125! root node5 10.2.0.10
# 20.94.253.116 tbase125! root node2 10.2.0.12
# 20.94.250.236 tbase125! root node3 10.2.0.13
# 20.98.72.51 tbase125! root node4 10.2.0.14
menu(){
echo "=============================="
echo "-------------Target-----------"
echo "=============================="
echo "1 cluster"
echo "=============================="
echo "2 dnode"
echo "=============================="
echo "3 arbitrator"
echo "=============================="
echo "4 exit"
echo "=============================="
}
cluster_menu(){
echo "=============================="
echo "----------Operation-----------"
echo "=============================="
echo "1 start cluster"
echo "=============================="
echo "2 stop cluster"
echo "=============================="
echo "3 exit"
echo "=============================="
}
dnode_menu(){
echo "=============================="
echo "----------Operation-----------"
echo "=============================="
echo "1 start dnode"
echo "=============================="
echo "2 stop dnode"
echo "=============================="
echo "3 add dnode"
echo "=============================="
echo "4 drop dnode"
echo "=============================="
echo "5 exit"
echo "=============================="
}
arbitrator_menu(){
echo "=============================="
echo "----------Operation-----------"
echo "=============================="
echo "1 start arbitrator"
echo "=============================="
echo "2 stop arbitrator"
echo "=============================="
echo "3 exit"
echo "=============================="
}
print_cfg() {
echo "=============================="
echo "-------Configure file---------"
echo "=============================="
echo "Id | IP address | hostname"
i=1
while read line || [[ -n ${line} ]]
do
arr=($line)
echo " $i | ${arr[0]} | ${arr[3]}"
i=`expr $i + 1`;
done < $1
echo "=============================="
}
update(){
expect -c "
set timeout -1;
spawn ssh $3@$1;
expect {
*yes/no* { send \"yes\r\"; exp_continue }
*assword:* { send \"$2\r\" }
}
expect {
*#* { send \"systemctl $4 taosd\r\" }
}
expect {
*#* { send \"exit\r\" }
}
expect eof;
"
echo -e "\033[32mdnode successfully $4 \033[0m"
}
update_dnode(){
i=1
while read line || [[ -n ${line} ]]
do
if [[ $1 -eq $i ]]; then
arr=($line)
update ${arr[0]} ${arr[1]} ${arr[2]} $2
break;
fi
i=`expr $i + 1`;
done < $3
}
add_hosts() {
expect -c "
set timeout -1;
spawn ssh $3@$1;
expect {
*yes/no* { send \"yes\r\"; exp_continue }
*assword:* { send \"$2\r\" }
}
expect {
*#* { send \"echo $4 $5 >> /etc/hosts\r\" }
}
expect {
*#* { send \"exit\r\" }
}
expect eof;
"
echo -e "\033[32mSuccessfully add to /etc/hosts in $1\033[0m"
}
remove_hosts() {
expect -c "
set timeout -1;
spawn ssh $3@$1;
expect {
*yes/no* { send \"yes\r\"; exp_continue }
*assword:* { send \"$2\r\" }
}
expect {
*#* { send \"sed -i '/$4/d\' /etc/hosts\r\" }
}
expect {
*#* { send \"exit\r\" }
}
expect eof;
"
echo -e "\033[32mSuccessfully remove from /etc/hosts in $1\033[0m"
}
remove_varlibtaos() {
expect -c "
set timeout -1;
spawn ssh $3@$1;
expect {
*yes/no* { send \"yes\r\"; exp_continue }
*assword:* { send \"$2\r\" }
}
expect {
*#* { send \"rm -rf /var/lib/taos/*\r\" }
}
expect {
*#* { send \"exit\r\" }
}
expect eof;
"
echo -e "\033[32mSuccessfully remove /var/lib/taos/* in $1\033[0m"
}
scp_cfg() {
expect -c "
set timeout -1;
spawn scp /etc/taos/taos.cfg $3@$1:/etc/taos;
expect {
*yes/no* { send \"yes\r\"; exp_continue }
*assword:* { send \"$2\r\" }
}
expect eof;
"
echo -e "\033[32mSuccessfully scp /etc/taos/taos.cfg to $1\033[0m"
}
manage_dnode(){
i=1
while read line || [[ -n ${line} ]]
do
if [[ $1 -eq $i ]]; then
arr=($line)
scp_cfg ${arr[0]} ${arr[1]} ${arr[2]}
ip=${arr[0]}
pd=${arr[1]}
user=${arr[2]}
j=1
while read line2 || [[ -n ${line2} ]]
do
arr2=($line2)
if [[ $1 -ne $j ]]; then
if [ $3 == "create" ];then
echo "$3"
add_hosts $ip $pd $user ${arr2[4]} ${arr2[3]}
else
remove_hosts $ip $pd $user ${arr2[4]} ${arr2[3]}
fi
fi
j=`expr $j + 1`;
done < $2
remove_varlibtaos $ip $pd $user
if [ $3 == "create" ];then
update $ip $pd $user "start"
else
update $ip $pd $user "stop"
fi
taos -s "$3 dnode \"${arr[3]}:6030\""
break;
fi
i=`expr $i + 1`;
done < $2
echo -e "\033[32mSuccessfully $3 dnode id $1\033[0m"
}
update_cluster() {
while read line || [[ -n ${line} ]]
do
arr=($line)
if [ $1 == "start" ]; then
scp_cfg ${arr[0]} ${arr[1]} ${arr[2]}
fi
update ${arr[0]} ${arr[1]} ${arr[2]} $1
done < $2
}
while :
do
clear
menu
read -p "select mode: " n
case $n in
1)
clear
print_cfg $2
cluster_menu
read -p "select operation: " c
case $c in
1)
update_cluster "start" $2
break
;;
2)
update_cluster "stop" $2
break
;;
3)
break
;;
esac
;;
2)
clear
print_cfg $2
dnode_menu
read -p "select operation: " d
case $d in
1)
clear
print_cfg $2
read -p "select dnode: " id
update_dnode $id "start" $2
break
;;
2)
clear
print_cfg $2
read -p "select dnode: " id
update_dnode $id "stop" $2
break
;;
3)
clear
print_cfg $2
read -p "select dnode: " id
manage_dnode $id $2 "create"
break
;;
4)
clear
print_cfg $2
read -p "select dnode: " id
manage_dnode $id $2 "drop"
break
;;
5)
break
;;
esac
;;
3)
clear
arbitrator_menu
read -p "select operation: " m
case $m in
1)
nohup /usr/local/taos/bin/tarbitrator >/dev/null 2>&1 &
echo -e "\033[32mSuccessfully start arbitrator $3 \033[0m"
break
;;
2)
var=`ps -ef | grep tarbitrator | awk '{print $2}' | head -n 1`
kill -9 $var
break
;;
3)
break
;;
esac
;;
4)
break
;;
esac
done
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册