Estou tendo problemas para fazer com que um cluster funcione usando o marca-passo e o corosync. Aqui está minha configuração de hardware:
- Rede: 192.168.3.0/255.255.255.0
- Gateway: 192.168.3.1
- node1 (servidor do Ubuntu 12.04 x64) IP estático: 192.168.3.34
- node2 (Ubuntu Server 12.04 x64) IP estático: 192.168.3.35
Esta rede está por trás de um firewall.
Eu tenho dois recursos que se comunicam com dispositivos externos por meio do udp:
- resource1 - > porta udp 16500
- resource2 - > porta udp 16501
O comando do pacemaker que usei:
crm configure primitive res1-srv upstart:resource1 \
op monitor interval=10s timeout=120 on-fail="restart" \
meta is-managed="true" failure-timeout=300 migration-threshold=5 allow-migrate=true
crm configure primitive res2-srv upstart:resource2 \
op monitor interval=10s timeout=120 on-fail="restart" \
meta is-managed="true" failure-timeout=300 migration-threshold=5 allow-migrate=true
resource1 e resource2 não estão relacionados entre si e deve haver apenas uma instância ativa de cada um deles no cluster (no node1 ou no node2).
Eu criei 2 endereços IP flutuantes, um para cada processo:
- res1-ipin - > 192.168.3.130
- res2-ipin - > 192.168.3.131
Eu fiz isso usando:
crm configure primitive res1-ipin ocf:heartbeat:IPaddr2 \
params ip="192.168.3.130" cidr_netmask="24" op monitor interval="10s" meta is-managed="true"
crm configure primitive res2-ipin ocf:heartbeat:IPaddr2 \
params ip="192.168.3.131" cidr_netmask="24" op monitor interval="10s" meta is-managed="true"
No firewall, o administrador configurou duas regras de NAT:
- [PUBLIC IP]: 16500 - > 192.168.3.130:16500
- [IP PÚBLICO]: 16501 - > 192.168.3.130:16501
Eu fiz um grupo para cada um deles:
crm configure group resource1 res1-ipin res1-srv
crm configure group resource2 res2-ipin res2-srv
Para que eu possa ter cada recurso em nós diferentes. O marcapasso gerencia esses recursos sem problemas.
Os pacotes udp de entrada funcionam perfeitamente, ambos os recursos processam-nos sem problemas.
No entanto, os pacotes udp de saída não passam pelo firewall porque o endereço IP de origem é o estático do nó. Aqui está um exemplo:
- resource1 está sendo executado no node1 - > o endereço IP de saída e porta é 192.168.3.34:16500
- o resource2 está sendo executado no node2 - > o endereço IP de saída e porta é 192.168.3.35:16501
Ambos estão bloqueados pelo firewall. E eu não tenho privilégios para configurar novas regras no firewall (não posso pedir ao administrador para configurá-las, ele argumenta que o firewall não permite isso).
Eu tentei configurar o NAT em cada nó usando o iptables:
iptables -t nat -A POSTROUTING -p udp --sport 16500 -j SNAT --to-source 192.168.3.130:16500
iptables -t nat -A POSTROUTING -p udp --sport 16501 -j SNAT --to-source 192.168.3.131:16501
Quando eu fiz isso, o resource1 e o resource2 escrevem em seus logs que não podem enviar o pacote:
Client ERROR *** Terminal nro:XXX writing 1Operation not permitted
Eu não sei o que fazer. Eu também tentei adicionar o recurso ocf: heartbeat: IPsrcaddr mas ele falha com:
IPsrcaddr[6200]: ERROR: command 'ip route replace 192.168.3.0/24 dev eth0 src 192.168.3.130' failed
Eu entendo que usar 2 endereços IP flutuantes não fará nenhum bem.
Se alguém puder apontar para mim o que estou fazendo de errado, ficarei muito grato.
Obrigado antecipadamente