# HG changeset patch
# User Marian Marinov <[email protected]>
# Date 1268210842 -7200
# Branch mysql-ms
# Node ID 283dfb08a1ee6e378725e006f1a98467fd134cfb
# Parent 7d5becb0cbd1bf5b3558dd85dede99d7f3ef2a3c
Medium: RA: mysql: readonly and updated preference handling
Make all servers readonly during start and switch off the readonly
flag during promotion.
Updated calculate_preference, now we get the master information
after we get the local information.
Now we also check for the logfile and add preference based on that.
diff -r 7d5becb0cbd1 -r 283dfb08a1ee heartbeat/mysql
--- a/heartbeat/mysql Tue Mar 02 14:43:57 2010 +0100
+++ b/heartbeat/mysql Wed Mar 10 10:47:22 2010 +0200
@@ -361,7 +361,7 @@
fi
else
if [ "$slave_io" = 'Yes' ] || [ "$slave_sql" = 'Yes' ]; then
- if [ "$slave_user" = "$OCF_RESKEY_replication_user" ];
then
+ if [ "$master_user" = "$OCF_RESKEY_replication_user" ];
then
# machine is slave
return 0;
fi
@@ -515,6 +515,8 @@
sleep 2
done
+ mysql --socket=$OCF_RESKEY_socket -O connect_timeout=1 -e 'SET GLOBAL
read_only=on';
+
ocf_log info "MySQL started"
return $OCF_SUCCESS
}
@@ -571,6 +573,7 @@
if is_slave; then
mysql --socket=$OCF_RESKEY_socket -O connect_timeout=1 -e 'STOP
SLAVE'
fi
+ mysql --socket=$OCF_RESKEY_socket -O connect_timeout=1 -e 'SET GLOBAL
read_only=off';
return $OCF_SUCCESS
}
@@ -598,7 +601,7 @@
return $OCF_NOT_RUNNING
fi
if [ $# != 1 ] && [ "$OCF_RESKEY_CRM_meta_notify_demote_uname" !=
"$HOSTNAME " ]; then
- return $OCF_ERR_GENERIC
+ return $OCF_SUCCESS
fi
if is_slave 1; then
return $OCF_SUCCESS
@@ -632,6 +635,9 @@
MASTER_CONNECT_RETRY=4"
mysql --socket=$OCF_RESKEY_socket -O connect_timeout=1 -e
'START SLAVE';
fi
+
+ mysql --socket=$OCF_RESKEY_socket -O connect_timeout=1 -e 'SET GLOBAL
read_only=on';
+
if is_slave 1; then
return $OCF_SUCCESS
else
@@ -640,22 +646,8 @@
}
calculate_preference() {
- master_file=''
+ master_log=''
master_pos=''
- mysql --password=$OCF_RESKEY_replication_passwd \
- --user=$OCF_RESKEY_replication_user \
- -h $master_host \
- -O connect_timeout=1 \
- -e 'SHOW MASTER STATUS\G'|while read k v; do
- if [ "$k" = 'File:' ]; then master_file="$v"; fi
- if [ "$k" = 'Position:' ]; then master_pos="$v"; fi
- done
-
- if [ -z "$master_file" ] || [ -z "$master_pos" ]; then
- ocf_log err "unable to find master file or master position"
- return $OCF_ERR_GENERIC;
- fi
-
local_log=''
local_pos=''
exec_pos=''
@@ -671,8 +663,24 @@
return $OCF_ERR_GENERIC
fi
+ mysql --password=$OCF_RESKEY_replication_passwd \
+ --user=$OCF_RESKEY_replication_user \
+ -h $master_host \
+ -O connect_timeout=1 \
+ -e 'SHOW MASTER STATUS\G'|while read k v; do
+ if [ "$k" = 'File:' ]; then master_log="$v"; fi
+ if [ "$k" = 'Position:' ]; then master_pos="$v"; fi
+ done
+
+ if [ -z "$master_log" ] || [ -z "$master_pos" ]; then
+ ocf_log err "unable to find master log or master position"
+ return $OCF_ERR_GENERIC;
+ fi
+ master_log=$(echo $master_log|sed 's/^.\+\.0\+//')
+ local_log=$(echo $local_log|sed 's/^.\+\.0\+//')
+ log_diff=$((master_log-local_log))
# no preference for very old slaves
- if [ "$master_file" != "$local_log" ]; then
+ if [ "$log_diff" -ge 2 ]; then
ocf_run $CRM_MASTER -v 0
return 1;
fi
_______________________________________________________
Linux-HA-Dev: [email protected]
http://lists.linux-ha.org/mailman/listinfo/linux-ha-dev
Home Page: http://linux-ha.org/