Смотрите на эту страницу, она документирует пошаговый процесс. Это выглядит действительно сложным, но я много раз делал это без проблемы.
Обновление: Найденный другой ссылкой, которая является точно тем же процессом, только без снимков экрана: http://www.webhostingtalk.com/showthread.php?t=403531
Вы можете использовать команду notify для записи файла состояния.
# for ANY state transition.
# "notify" script is called AFTER the
# notify_* script(s) and is executed
# with 3 arguments provided by keepalived
# (ie don’t include parameters in the notify line).
# arguments
# $1 = "GROUP"|"INSTANCE"
# $2 = name of group or instance
# $3 = target state of transition
# ("MASTER"|"BACKUP"|"FAULT")
notify /path/notify.sh
Создать сценарий уведомления, например:
#!/bin/bash
# notify.sh
echo $1 $2 is in $3 state > /var/run/keepalive.$1.$2.state
И сценарий получения состояния, например:
#!/bin/bash
# getstate.sh
cat /var/run/keepalive.*.*.state
Дамп текущего состояния может быть сделан путем отправки USR2
сигнал к родительский процесс keepalived :
kill -USR2 `cat /var/run/keepalived.pid`
Посмотрите результат в /tmp/keepalived.stats
.
Примечание: , если SELinux используется ( CentOS 7), он не позволяет писать в этот файл. Это может быть обходное решение с этим:
touch /tmp/keepalived.stats
chmod go+w /tmp/keepalived.stats
semanage fcontext -a -t keepalived_var_run_t /tmp/keepalived.stats
restorecon /tmp/keepalived.stats
Считывание текущего статуса через SNMP оказалось для меня самым надежным. Чтобы включить это, вы должны запустить keepalived с поддержкой snmp:
и установить snmpd.
Затем вы можете надежно запросить статус через
snmpget -Oq -Ov -v2c -cpublic localhost KEEPALIVED-MIB::vrrpInstanceState.1
Это также можно сделать через скрипты уведомления, но они не всегда срабатывают, в результате чего файл состояния не синхронизируется с реальностью.
В версии 1.3.0 в keepalived добавлен интерфейс DBus, который можно включить с помощью параметра enable_dbus
в блоке global_defs
файла конфигурации. (Однако интерфейс должен быть включен с помощью параметра сборки - enable-dbus
во время configure
, что может быть не так, если вы используете двоичный пакет.)
Вы можете получить доступ к интерфейсу DBus с помощью любого клиента / библиотеки DBus (например, dbus-send
, gdbus
, qdbus
). В качестве примера я использую systemd busctl
, потому что у него очень хороший интерфейс:
# busctl tree org.keepalived.Vrrp1
└─/org
└─/org/keepalived
└─/org/keepalived/Vrrp1
├─/org/keepalived/Vrrp1/Instance
│ └─/org/keepalived/Vrrp1/Instance/eth0
│ └─/org/keepalived/Vrrp1/Instance/eth0/1
│ └─/org/keepalived/Vrrp1/Instance/eth0/1/IPv4
└─/org/keepalived/Vrrp1/Vrrp
Доступны два интерфейса, глобальный org.keepalived.Vrrp1.Vrrp
на / org / keepalived / Vrrp1 / Vrrp
:
# busctl introspect org.keepalived.Vrrp1 /org/keepalived/Vrrp1/Vrrp org.keepalived.Vrrp1.Vrrp
NAME TYPE SIGNATURE RESULT/VALUE FLAGS
.CreateInstance method ssuu - -
.DestroyInstance method s - -
.PrintData method - - -
.PrintStats method - - -
.ReloadConfig method - - -
.VrrpReloaded signal - - -
.VrrpStarted signal - - -
.VrrpStopped signal - - -
И для каждого экземпляра VRRP, интерфейс org.keepalived.Vrrp1.Instance
на путях согласно этому шаблону / org / keepalived / Vrrp1 / Instance /
. Для экземпляра IPv4 VRRP с идентификатором 1
на eth1
с именем my-instance
, мы получаем следующее:
# busctl introspect org.keepalived.Vrrp1 /org/keepalived/Vrrp1/Instance/eth0/1/IPv4 org.keepalived.Vrrp1.Instance
NAME TYPE SIGNATURE RESULT/VALUE FLAGS
.SendGarp method - - -
.Name property s "my-instance" emits-change
.State property (us) 2 "Master" emits-change
.VrrpStatusChange signal u - -
Чтобы получить состояние этого конкретного экземпляра, мы можем использовать следующую команду
# busctl get-property org.keepalived.Vrrp1 /org/keepalived/Vrrp1/Instance/br_vrrp/67/IPv4 org.keepalived.Vrrp1.Instance State
(us) 2 "Master"
. Возвращаемое свойство - СТРУКТУРА, с кодом состояния и понятным для человека именем. Состояния: 0 «Инициализация»
, 1 «Резервное копирование»
, 2 «Главный»
, 3 «Ошибка»
, 4 «Перейти к мастеру»
и 98 «Перейти к ошибке»
. Последние три состояния являются внутренними и официальными состояниями RFC 2338.
Если вы используете несколько процессов keepalived и устанавливаете параметр instance
, или если вы используете функцию сетевого пространства имен с пространством имен
префикс пути изменяется / org / keepalived / Vrrp1 /
.
Если вы введете команду:
journalctl -u keepalived
, у него будет перечисленное состояние:
Jul 12 13:45:52 vmt007 Keepalived_vrrp[14335]: VRRP_Instance(VI_INT) Entering MASTER STATE
на стороне ведомого вы увидите:
Jul 12 13:45:51 vmt008 Keepalived_vrrp[3569]: VRRP_Instance(VI_INT) Entering BACKUP STATE