CARP/UCARP - отличное решение, но мне нужно при наступлении некоторых событий менять мастера в пределах > 3 машин
поясню по говно-скрипту Суть:
для задач кластеризации использую consul;
очень удобная штука, умеет dns, helth-check, агенты, итд...
НО, иСкаропки не умеет vrrp
#!/usr/bin/python
import netifaces as ni
import StringIO
import pycurl
import time
import os
ip=ni.ifaddresses('eth0')[ni.AF_INET][0]['addr']
while True:
#Получаю лидера:
response=StringIO.StringIO()
consul=pycurl.Curl()
consul.setopt(consul.URL, "http://10.0.1.9:8500/v1/status/leader")
#"10.0.1.10:8300"
consul.setopt(consul.WRITEFUNCTION, response.write)
consul.perform()
consul.close()
consul_socket=response.getvalue()
print "c_socket "+consul_socket
#Отрезаю не нужное
consul_ip=consul_socket.split(":")[0]
c_ip=consul_ip.split("\"")[1]
addr=ni.ifaddresses('eth1')
ifstate=ni.AF_INET in addr
#Сравниваю - если адрес машины=адресу consul-лидела
if ip == c_ip:
#Если интерфейс не поднят
if ifstate != True:
os.system('/sbin/ip addr add 10.0.1.12 dev eth1')
continue
elif ip != c_ip and ifstate == True:
os.system('/sbin/ip addr del 10.0.1.12 dev eth1')
continue
else:
continue
ifup eth1
Что я делаю не так?