From 31e29ddc904e94a42410f6c6f807b167607736de Mon Sep 17 00:00:00 2001 From: Krzysztof Ksiazek Date: Thu, 31 Aug 2017 10:47:52 +0200 Subject: [PATCH] Further improvements to reduce config reloading --- tools/proxysql_galera_checker.sh | 32 ++++++++++++++++++++++++-------- 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/tools/proxysql_galera_checker.sh b/tools/proxysql_galera_checker.sh index 86fba0b25..198277ad8 100755 --- a/tools/proxysql_galera_checker.sh +++ b/tools/proxysql_galera_checker.sh @@ -273,11 +273,19 @@ if [ ${NUMBER_WRITERS_ONLINE} -eq 0 ]; then do WSREP_STATUS=$($MYSQL_CMDLINE -h $server -P $port -e "SHOW STATUS LIKE 'wsrep_local_state'" 2>>${ERR_FILE} | tail -1 2>>${ERR_FILE}) echo "`date` Check server $hostgroup:$server:$port for only available node in DONOR state, status $stat , wsrep_local_state $WSREP_STATUS" >> ${ERR_FILE} - if [ "${WSREP_STATUS}" = "2" -a "$stat" != "ONLINE" ] + if [ "${WSREP_STATUS}" = "2" -a "$stat" != "ONLINE" ] # if we are on Donor/Desync an not online in mysql_servers -> proceed then - change_server_status $HOSTGROUP_WRITER_ID "$server" $port "ONLINE" "WSREP status is DESYNC/DONOR, as this is the only node we will put this one online" - echo "1" > ${RELOAD_CHECK_FILE} - cnt=$(( $cnt + 1 )) + PROXY_RUNTIME_STATUS=$($PROXYSQL_CMDLINE "SELECT status FROM runtime_mysql_servers WHERE hostname='${server}' AND port='${port}' AND hostgroup_id='${hostgroup}'") + if [ "${PROXY_RUNTIME_STATUS}" != "ONLINE" ] # if we are not online in runtime_mysql_servers, proceed to change the server status and reload mysql_servers + then + change_server_status $HOSTGROUP_WRITER_ID "$server" $port "ONLINE" "WSREP status is DESYNC/DONOR, as this is the only node we will put this one online" + echo "1" > ${RELOAD_CHECK_FILE} + cnt=$(( $cnt + 1 )) + else # otherwise (we are already ONLINE in runtime_mysql_servers) no need to reload so let's just remove RELOAD_CHECK_FILE and update it to ONLINE in mysql_servers (in case something would reload it) + rm ${RELOAD_CHECK_FILE} + cnt=$(( $cnt + 1 )) + change_server_status $HOSTGROUP_WRITER_ID "$server" $port "ONLINE" "WSREP status is DESYNC/DONOR, as this is the only node we will put this one online" + fi fi safety_cnt=$(( $safety_cnt + 1 )) done @@ -297,11 +305,19 @@ if [ ${HOSTGROUP_READER_ID} -ne -1 -a ${NUMBER_READERS_ONLINE} -eq 0 ]; then do WSREP_STATUS=$($MYSQL_CMDLINE -h $server -P $port -e "SHOW STATUS LIKE 'wsrep_local_state'" 2>>${ERR_FILE} | tail -1 2>>${ERR_FILE}) echo "`date` Check server $hostgroup:$server:$port for only available node in DONOR state, status $stat , wsrep_local_state $WSREP_STATUS" >> ${ERR_FILE} - if [ "${WSREP_STATUS}" = "2" -a "$stat" != "ONLINE" ] + if [ "${WSREP_STATUS}" = "2" -a "$stat" != "ONLINE" ] # if we are on Donor/Desync an not online in mysql_servers -> proceed then - change_server_status $HOSTGROUP_READER_ID "$server" $port "ONLINE" "WSREP status is DESYNC/DONOR, as this is the only node we will put this one online" - echo "1" > ${RELOAD_CHECK_FILE} - cnt=$(( $cnt + 1 )) + PROXY_RUNTIME_STATUS=$($PROXYSQL_CMDLINE "SELECT status FROM runtime_mysql_servers WHERE hostname='${server}' AND port='${port}' AND hostgroup_id='${hostgroup}'") + if [ "${PROXY_RUNTIME_STATUS}" != "ONLINE" ] # if we are not online in runtime_mysql_servers, proceed to change the server status and reload mysql_servers + then + change_server_status $HOSTGROUP_READER_ID "$server" $port "ONLINE" "WSREP status is DESYNC/DONOR, as this is the only node we will put this one online" + echo "1" > ${RELOAD_CHECK_FILE} + cnt=$(( $cnt + 1 )) + else # otherwise (we are already ONLINE in runtime_mysql_servers) no need to reload so let's just remove RELOAD_CHECK_FILE and update it to ONLINE in mysql_servers (in case something would reload it) + rm ${RELOAD_CHECK_FILE} + cnt=$(( $cnt + 1 )) + change_server_status $HOSTGROUP_READER_ID "$server" $port "ONLINE" "WSREP status is DESYNC/DONOR, as this is the only node we will put this one online" + fi fi safety_cnt=$(( $safety_cnt + 1 )) done