Я собираюсь настроить резервное аварийное переключение Redmine:
Поскольку они находятся в разных подсетях (192.168.3.x и 192.168.6.x), кажется, что VIPArip это единственный выбор.
/etc/ha.d/ha.cf
на узле 1
logfacility none
debug 1
debugfile /var/log/ha-debug
logfile /var/log/ha-log
autojoin none
warntime 3
deadtime 6
initdead 60
udpport 694
ucast eth1 node2.ip
keepalive 1
node node1
node node2
crm respawn
/etc/ha.d/ha.cf
на узле 2:
logfacility none
debug 1
debugfile /var/log/ha-debug
logfile /var/log/ha-log
autojoin none
warntime 3
deadtime 6
initdead 60
udpport 694
ucast eth0 node1.ip
keepalive 1
node node1
node node2
crm respawn
crm configure show
:
node $id="6c27077e-d718-4c82-b307-7dccaa027a72" node1
node $id="740d0726-e91d-40ed-9dc0-2368214a1f56" node2
primitive VIPArip ocf:heartbeat:VIPArip \
params ip="192.168.6.8" nic="lo:0" \
op start interval="0" timeout="20s" \
op monitor interval="5s" timeout="20s" depth="0" \
op stop interval="0" timeout="20s" \
meta is-managed="true"
property $id="cib-bootstrap-options" \
stonith-enabled="false" \
dc-version="1.0.12-unknown" \
cluster-infrastructure="Heartbeat" \
last-lrm-refresh="1338870303"
crm_mon -1
:
============
Last updated: Tue Jun 5 18:36:42 2012
Stack: Heartbeat
Current DC: node2 (740d0726-e91d-40ed-9dc0-2368214a1f56) - partition with quorum
Version: 1.0.12-unknown
2 Nodes configured, unknown expected votes
1 Resources configured.
============
Online: [ node1 node2 ]
VIPArip (ocf::heartbeat:VIPArip): Started node1
ip addr show lo
:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet 192.168.6.8/32 scope global lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
Я могу пинговать 192.168.6.8 с узла 1 (192.168.3.x):
# ping -c 4 192.168.6.8
PING 192.168.6.8 (192.168.6.8) 56(84) bytes of data.
64 bytes from 192.168.6.8: icmp_seq=1 ttl=64 time=0.062 ms
64 bytes from 192.168.6.8: icmp_seq=2 ttl=64 time=0.046 ms
64 bytes from 192.168.6.8: icmp_seq=3 ttl=64 time=0.059 ms
64 bytes from 192.168.6.8: icmp_seq=4 ttl=64 time=0.071 ms
--- 192.168.6.8 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3000ms
rtt min/avg/max/mdev = 0.046/0.059/0.071/0.011 ms
но не может пинговать виртуальный IP с узла 2 (192.168.6.x) и извне. Я что-то пропустил?
PS: вы, вероятно, захотите установить IP2UTIL=/sbin/ip
в /usr/lib/ocf/resource.d/heartbeat/VIPArip
сценарий агента ресурсов, если вы получите что-то вроде этого:
5 июня 11:08:10 node1 lrmd: [19832]: info: RA output: (VIPArip: stop: stderr) 2012/06/05_11: 08: 10 ОШИБКА: неверный OCF_RESK EY_ip [192.168.6.8]
http://www.clusterlabs.org/wiki/Debugging_Resource_Failures
Ответ @DukeLion:
Какой маршрутизатор получает обновления RIP?
Когда я начинаю VIPArip
ресурс, ripd был запущен с указанным ниже файлом конфигурации (на node1):
/var/run/resource-agents/VIPArip-ripd.conf
:
hostname ripd
password zebra
debug rip events
debug rip packet
debug rip zebra
log file /var/log/quagga/quagga.log
router rip
!nic_tag
no passive-interface lo:0
network lo:0
distribute-list private out lo:0
distribute-list private in lo:0
!metric_tag
redistribute connected metric 3
!ip_tag
access-list private permit 192.168.6.8/32
access-list private deny any
show ip route
:
Codes: K - kernel route, C - connected, S - static, R - RIP,
O - OSPF, I - IS-IS, B - BGP, A - Babel,
> - selected route, * - FIB route
K>* 0.0.0.0/0 via 192.168.3.1, eth1
C>* 127.0.0.0/8 is directly connected, lo
K>* 169.254.0.0/16 is directly connected, eth1
C>* 192.168.3.0/24 is directly connected, eth1
C>* 192.168.6.8/32 is directly connected, lo
sh ip rip status
:
Routing Protocol is "rip"
Sending updates every 30 seconds with +/-50%, next due in 7 seconds
Timeout after 180 seconds, garbage collect after 120 seconds
Outgoing update filter list for all interface is not set
lo:0 filtered by private
Incoming update filter list for all interface is not set
lo:0 filtered by private
Default redistribution metric is 1
Redistributing: connected
Default version control: send version 2, receive any version
Interface Send Recv Key-chain
Routing for Networks:
lo:0
Routing Information Sources:
Gateway BadPackets BadRoutes Distance Last Update
Distance: (default is 120)
Думаю, проблема не в конфигурации кластера, а в вашей архитектуре маршрутизации.
Агент ресурсов VIPArip управляет локальной кваггой для отправки обновлений маршрутизации. Но вам также необходимо использовать эти обновления маршрутизации, чтобы изменить маршруты, чтобы они указывали на активный сервер. Попробую объяснить, как это работает.
Посмотрите на картинку. HA1 и HA2 - это члены кластера linux-ha с запущенным quagga. Синий маршрутизатор прослушивает RIP с обоих сетевых каналов.
Когда vip поднимается на HA1, quagga отправляет обновление RIP на синий маршрутизатор. Он добавляет префикс vip в свою таблицу маршрутизации с 192.168.1.2 nexthop.
Когда происходит аварийное переключение, vip отключается на HA1 и quagga полностью останавливается, поэтому обновления не будут отправляться. Синий маршрутизатор удалит запись таблицы маршрутизации по истечении тайм-аута, даже если VIP не поднимется на HA2. И когда VIP переходит на HA2, он запускает quagga и отправляет обновления RIP. Синий маршрутизатор добавит запись в таблицу маршрутизации с адресом 192.168.2.2 nexthop.
Можно использовать viparip в более сложной топологии сети, просто убедитесь, что ваши пограничные маршрутизаторы получают обновления маршрутизации по всей сети.