Re: Split brain due to keepalived apparently freezing in the vrrp master

Frank Baalbergen <[email protected]>
Newsgroups gmane.linux.keepalived.devel
Message-ID <D0DDF13D.8524%[email protected]>
Hi Sergio,

This is an interesting issue, I run the same keepalived version (Debian)
and didn’t see this issue. I have some questions to have a better
understanding of the problem.

- What kind of activity do you mean with “usually at times of higher than
usual activity on the server”, is that MySQL activity?
- Is this reproducible when you manually increase the activity on db3?
- Are there any load issues on the psychical hardware that could block
there complete virtual machine or are you still able to ssh/use the
virtual machine?
- Can you share /usr/local/bin/mysql_checker?

- How is the port utilisation on the switch at high activity peaks?

Regards,

Frank

On 15/01/15 21:46, "Sergio Roysen" <[email protected]> wrote:

>We are having a recurrent issue in a group of three servers where one of
>the backup nodes grabs the virtual ip address because the master fails
>to send the vrrp advert with its priority for a few seconds and it also
>fails to run in time the local checks.
>
>This results in a split brain scenario until the original master is able
>to broadcast its status again.
>
>This is a recurring issue, happening several times a day, usually at
>times of higher than usual activity on the server, but not necessarily
>at periods of higher than usual network traffic.
>
>All the servers are running Ubuntu 12.04 (we've seen a similar behavior
>in another group of servers running Ubuntu 14.04)
>We are using keepalived version 1.2.13
>
>This is the keepalived configuration that we are using:
>---
>global_defs {
>   notification_email {
>         xxx
>   }
>   notification_email_from xxx
>   smtp_server xxx
>   smtp_connect_timeout 30
>}
>vrrp_script mysql_died {
>         script "/usr/local/bin/mysql_checker"
>         interval 5
>         fall 6
>         rise 6
>}
>vrrp_script force_failover_reader {
>         script "test \! -f /etc/keepalived/trigger.reader.failover"
>         interval 5
>}
>vrrp_instance reader_vip_shard_0 {
>         interface  bond0
>         state BACKUP
>         virtual_router_id 150
>         priority 101
>         advert_int 1
>         authentication {
>                auth_type PASS
>                auth_pass xxxxx
>         }
>         virtual_ipaddress {
>                172.16.255.55
>         }
>         track_script {
>                 mysql_died weight -40
>                 force_failover_reader weight -50
>         }
>         notify "/usr/local/bin/notify_mysql_failover.sh"
>}
>---
>
>This is the initial keepalived status at the beginning of the incident:
>db3: Master. Priority 101
>db2: Backup. Priority 61
>db1: Backup. Priority 101
>
>What follows is all the data that we were able to capture during this
>incident.
>
>tcpdump captured on db1 filtering all the adverts for 'vrid 150'. Notice
>the gap of vrrp adverts from db3 beginning at 13:09:29.
>---
>13:09:28.205765 IP db3 > vrrp.mcast.net: VRRPv2, Advertisement, vrid
>150, prio 101, authtype simple, intvl 1s, length 20
>13:09:29.205840 IP db3 > vrrp.mcast.net: VRRPv2, Advertisement, vrid
>150, prio 101, authtype simple, intvl 1s, length 20
>13:09:32.811435 IP db1 > vrrp.mcast.net: VRRPv2, Advertisement, vrid
>150, prio 101, authtype simple, intvl 1s, length 20
>13:09:32.811530 IP db2 > vrrp.mcast.net: VRRPv2, Advertisement, vrid
>150, prio 61, authtype simple, intvl 1s, length 20
>13:09:32.811566 IP db1 > vrrp.mcast.net: VRRPv2, Advertisement, vrid
>150, prio 101, authtype simple, intvl 1s, length 20
>13:09:32.811626 IP db2 > vrrp.mcast.net: VRRPv2, Advertisement, vrid
>150, prio 61, authtype simple, intvl 1s, length 20
>13:09:32.811646 IP db1 > vrrp.mcast.net: VRRPv2, Advertisement, vrid
>150, prio 101, authtype simple, intvl 1s, length 20
>13:09:33.812474 IP db1 > vrrp.mcast.net: VRRPv2, Advertisement, vrid
>150, prio 101, authtype simple, intvl 1s, length 20
>13:09:34.001709 IP db3 > vrrp.mcast.net: VRRPv2, Advertisement, vrid
>150, prio 101, authtype simple, intvl 1s, length 20
>13:09:34.001751 IP db1 > vrrp.mcast.net: VRRPv2, Advertisement, vrid
>150, prio 101, authtype simple, intvl 1s, length 20
>13:09:34.001842 IP db3 > vrrp.mcast.net: VRRPv2, Advertisement, vrid
>150, prio 101, authtype simple, intvl 1s, length 20
>13:09:35.002100 IP db3 > vrrp.mcast.net: VRRPv2, Advertisement, vrid
>150, prio 101, authtype simple, intvl 1s, length 20
>---
>
>We keep a log of the results of the mysql_checker script used by
>keepalived.
>These are the results on db3. There is an eight seconds gap beginning at
>13:09:27. The interval between checks should be five seconds.
>---
>2015-01-15 13:09:17 (66891): Check number 14605
>2015-01-15 13:09:17 (66891): check_mysql_health will return 0
>2015-01-15 13:09:22 (66973): Check number 14606
>2015-01-15 13:09:22 (66973): check_mysql_health will return 0
>2015-01-15 13:09:27 (67024): Check number 14607
>2015-01-15 13:09:27 (67024): check_mysql_health will return 0
>2015-01-15 13:09:35 (67318): Check number 14608
>2015-01-15 13:09:35 (67318): check_mysql_health will return 0
>2015-01-15 13:09:40 (67427): Check number 14609
>2015-01-15 13:09:40 (67427): check_mysql_health will return 0
>---
>
>Keepalived entries in the syslog of db3 at the time of the incident:
>---
>Jan 15 13:09:34 db3 Keepalived_vrrp[48241]:
>VRRP_Instance(reader_vip_shard_0) Received lower prio advert, forcing
>new election
>Jan 15 13:09:34 db3 Keepalived_vrrp[48241]:
>VRRP_Instance(reader_vip_shard_0) Received lower prio advert, forcing
>new election
>---
>
>Keepalived entries in the syslog of db1 at the time of the incident:
>---
>Jan 15 13:09:32 db1 Keepalived_vrrp[39988]:
>VRRP_Instance(reader_vip_shard_0) Transition to MASTER STATE
>Jan 15 13:09:32 db1 Keepalived_vrrp[39988]:
>VRRP_Instance(reader_vip_shard_0) Received lower prio advert, forcing
>new election
>Jan 15 13:09:32 db1 Keepalived_vrrp[39988]:
>VRRP_Instance(reader_vip_shard_0) Received lower prio advert, forcing
>new election
>Jan 15 13:09:33 db1 Keepalived_vrrp[39988]:
>VRRP_Instance(reader_vip_shard_0) Entering MASTER STATE
>Jan 15 13:09:33 db1 Keepalived_vrrp[39988]: Opening script file
>/usr/local/bin/notify_mysql_failover.sh
>Jan 15 13:09:34 db1 Keepalived_vrrp[39988]:
>VRRP_Instance(reader_vip_shard_0) Received higher prio advert
>Jan 15 13:09:34 db1 Keepalived_vrrp[39988]:
>VRRP_Instance(reader_vip_shard_0) Entering BACKUP STATE
>Jan 15 13:09:34 db1 Keepalived_vrrp[39988]: Opening script file
>/usr/local/bin/notify_mysql_failover.sh
>---
>
>---
>
>Sergio Roysen
>Operations - Shopify
>
>
>
>--------------------------------------------------------------------------
>----
>New Year. New Location. New Benefits. New Data Center in Ashburn, VA.
>GigeNET is offering a free month of service with a new server in Ashburn.
>Choose from 2 high performing configs, both with 100TB of bandwidth.
>Higher redundancy.Lower latency.Increased capacity.Completely compliant.
>http://p.sf.net/sfu/gigenet
>_______________________________________________
>Keepalived-devel mailing list
>[email protected]
>https://lists.sourceforge.net/lists/listinfo/keepalived-devel

------------------------------------------------------------------------------
New Year. New Location. New Benefits. New Data Center in Ashburn, VA.
GigeNET is offering a free month of service with a new server in Ashburn.
Choose from 2 high performing configs, both with 100TB of bandwidth.
Higher redundancy.Lower latency.Increased capacity.Completely compliant.
http://p.sf.net/sfu/gigenet
_______________________________________________
Keepalived-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/keepalived-devel
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.