Опция keepalived nopreempt не работает

Я хочу использовать параметр nopreempt с параметром keepalived vrrp для запуска резервного узла в качестве главного, когда мастер выйдет из строя и снова вернется в сеть.

Я установил параметр nopreempt на обоих серверах и установил состояние резервного копирования на обоих серверах, но из-за высокого приоритета nopreempt не работает.

Пожалуйста, руководство, чтобы решить это?

  Master Machine: 
  ! Configuration File for keepalived
   vrrp_instance VI_1 {
   state BACKUP
   nopreempt
   interface eth0
   virtual_router_id 1
   priority 250
   advert_int 1
   virtual_ipaddress {
    192.168.1.2/24
    } 
  }

  Backup Machine :
  ! Configuration File for keepalived
   vrrp_instance VI_1 {
   state BACKUP
   nopreempt
   interface eth0
   virtual_router_id 1
   priority 200
   advert_int 1
   virtual_ipaddress {
     192.168.1.2/24
   }

}

С уважением, Бен

6 ответов

Изменено состояние обоих серверов как BACKUP. Основной с более высоким приоритетом и с nopreempt, оба имеют одинаковый идентификатор маршрутизатора. Это работает для меня.

Прежде всего: я использую CentOS 6 и keepalived 1.2.7 (02/21,2013)

Я также попробовал nopreempt, и после некоторого тестирования он работает как ожидалось.

Запуск master и резервного копирования с одинаковым приоритетом vrrp - идеальная идея, поскольку существует ошибка (AFAICT), которая приводит к ситуации, когда сервер keepalived запускает VIP. согласно http://tools.ietf.org/html/rfc5798, оставшийся в живых с самым высоким IP должен остаться / стать хозяином. Я не мог наблюдать это поведение!

(Снова AFAICT) Вы должны удалить оператор "состояние" из файла конфигурации, если хотите увидеть работу nopreempt. Если keepalived с "состоянием MASTER" в файле конфигурации запускается, он запускается как мастер и объявляет себя как таковой = плохо. Если в файле конфигурации нет оператора "state", keepalived запускается в состоянии BACKUP и прослушивает vrrp. из-за "nopreempt" он не станет MASTER, даже если он работает с наивысшим приоритетом. это противоречит странице man 5 keepalived.conf, на которой состояние не имеет большого значения.

Keepalived с prio 255 всегда становится мастером - независимо от того, включена или отключена опция nopreempt.

Если вы тестируете keepalived, внимательно изучите правила брандмауэра /nat. всегда полезно запускать что-то вроде tcpdump, чтобы проверить, проходят ли рекламные объявления vrrp и имеют ли они правильный IP-адрес отправителя (один из других keepalived(s), а не стандартный gw!). Это особенно верно, если вы используете kvm/qemu guest, так как есть правила nat по умолчанию, которые меняют рекламу vrrp.

nopreempt работает только для keepalived в состоянии BACKUP. (RTFM), если keepalived работает (1.2.7), и сетевой канал отключается. Keepalived изменяет состояние FAULT. когда сетевое соединение возвращается, keepalived становится MASTER, если prio достаточно высок. Я не знаю, если это ошибка, но она делает nopreempt как-то бесполезным. Я отправлю вопрос в список рассылки.

Повеселись! С уважением

Стефан Керст

Я перепробовал множество конфигураций для достижения этой цели, и единственной, которая работала, была установка обоих серверов в состояние BACKUP, один сервер с приоритетом 51, другой с 50 и настройка nopreempt. Вот пример конфигурации:

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 51
    priority 51
    nopreempt
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass XXXXXXXX
    }
    virtual_ipaddress {
        192.168.69.100/28
    }
}

Просто установите приоритет 50 на втором сервере, и все должно работать.

Это может или не может быть правильным решением для вас, но у меня есть только два сервера поддержки активности.

Если вы не хотите, чтобы один сервер опережал другой, один сервер, имеющий более высокий приоритет, чем другой, на самом деле не имеет значения в сценарии с двумя серверами, как у меня. У меня работает если я включу nopreempt и установите для обоих серверов одинаковый приоритет.

ОБНОВИТЬ

Пример конфигурации по запросу:

vrrp_sync_group VRRP_SYNCS {
    group {
        public_http_ips
    }
}

vrrp_instance public_http_ips {
    state MASTER
    interface eth0
    virtual_router_id 18
    priority 100
    advert_int 1
    nopreempt
    virtual_ipaddress {
        192.168.0.254/24 dev eth0
    }
}

Резервная копия точно такая же, но в ней указано "состояние BACKUP".

Вы должны установить параметры "fall" и "rise" в скрипте vrrp. Пример работающей конфигурации:

vrrp_script chk_haproxy {
    script "killall -0 haproxy"
    interval 1
    fall 2
    rise 2
}

vrrp_instance VI_1 {
    interface eth0

    track_interface {
        eth0
        eth1
    }

    state BACKUP # same as other node
    priority 101 # your choice
    virtual_router_id 53
    advert_int 1
    nopreempt

    authentication {
        auth_type PASS
        auth_pass 8CHARPASS
    }

    unicast_src_ip 172.31.10.11 # other node: 172.31.10.12
    unicast_peer {
        172.31.10.12 # other node: 172.31.10.11
    }

    virtual_ipaddress {
        172.31.20.20 dev eth1
    }

    track_script {
        chk_haproxy
    }
}

Я думаю, что один и тот же параметр «virtual_router_id» в двух конфигурациях является ключевым здесь, с разными значениями «virtual_router_id» nopreempt не работает. Попробуйте установить тот же «virtual_router_id».

Другие вопросы по тегам