LINUX.ORG.RU

float ip своими руками

 ,


0

1

CARP/UCARP - отличное решение, но мне нужно при наступлении некоторых событий менять мастера в пределах > 3 машин

поясню по говно-скрипту Суть:

для задач кластеризации использую consul;
очень удобная штука, умеет dns, helth-check, агенты, итд...
НО, иСкаропки не умеет vrrp
задача - определить CONSUL-leader и выставить на машине плавающий адрес
#!/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
Интерфейс поднимается, но трафик начинает из/в него течь/вытекать спустя ~10-20секунд(WTF?????????????) если пульнуть:
ifup eth1
все случается в ~<1сек
Что я делаю не так?


Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.