github.com/1aal/kubeblocks@v0.0.0-20231107070852-e1c03e598921/deploy/apecloud-mysql/scripts/switchover-without-candidate.sh (about) 1 #!/bin/bash 2 set -ex 3 4 if [ ! -z $MYSQL_ROOT_PASSWORD ]; then 5 password_flag="-p$MYSQL_ROOT_PASSWORD" 6 fi 7 global_info=`mysql -h$KB_CONSENSUS_LEADER_POD_FQDN -uroot $password_flag 2>/dev/null -e "select IP_PORT from information_schema.wesql_cluster_global order by MATCH_INDEX desc;"` 8 global_info_arr=($global_info) 9 leader_ip_port=$KB_CONSENSUS_LEADER_POD_FQDN:13306 10 try_times=10 11 12 for((i=1;i<${#global_info_arr[@]};i++)) do 13 if [ "$leader_ip_port" == "${global_info_arr[i]}" ];then 14 echo "do not transfer to leader, leader:${global_info_arr[i]}" 15 else 16 # get currently leader weight 17 leader_weight_info=`mysql -h$KB_CONSENSUS_LEADER_POD_FQDN -uroot $password_flag 2>/dev/null -e "select ELECTION_WEIGHT from information_schema.wesql_cluster_global where IP_PORT='$leader_ip_port' limit 1;"` 18 leader_weight_arr=($leader_weight_info) 19 leader_weight=${leader_weight_arr[1]} 20 echo "leader_weight=$leader_weight" 21 22 # get current follower weight 23 current_follower_weight_info=`mysql -h$KB_CONSENSUS_LEADER_POD_FQDN -uroot $password_flag 2>/dev/null -e "select ELECTION_WEIGHT from information_schema.wesql_cluster_global where IP_PORT='${global_info_arr[i]}' limit 1;"` 24 current_follower_weight_arr=($current_follower_weight_info) 25 current_follower_weight=${current_follower_weight_arr[1]} 26 echo "current_follower_weight=$current_follower_weight" 27 if [ $current_follower_weight -lt $leader_weight ];then 28 echo "leader weight larger than follower weight, update leader weight to current follower weight! leader:$leader_ip_port, leader weight:$leader_weight, follower:${global_info_arr[i]}, follower weight:$current_follower_weight" 29 mysql -h$KB_CONSENSUS_LEADER_POD_FQDN -uroot $password_flag -e "call dbms_consensus.configure_follower('$leader_ip_port', $current_follower_weight, 0);" 2>&1 30 fi 31 mysql -h$KB_CONSENSUS_LEADER_POD_FQDN -uroot $password_flag -e "call dbms_consensus.change_leader('${global_info_arr[i]}');" 2>&1 32 sleep 5 33 role_info=`mysql -h$KB_CONSENSUS_LEADER_POD_FQDN -uroot $password_flag 2>/dev/null -e "select ROLE from information_schema.wesql_cluster_local;"` 34 role_info_arr=($role_info) 35 real_role=${role_info_arr[1]} 36 if [ "$real_role" == "Follower" ];then 37 echo "transfer successfully" 38 new_leader_host_and_port=${global_info_arr[i]} 39 new_leader_host=${new_leader_host_and_port%%:*} 40 echo "new_leader_host=$new_leader_host" 41 break 42 fi 43 fi 44 ((try_times--)) 45 if [ $try_times -le 0 ];then 46 break 47 fi 48 done