Bekijk Volledige Versie : pdns nameserver master/slave
fndanielnl
23/02/10, 20:28
Ik probeer een master & slave nameserver op te zetten met powerdns. Nu is het geval dat zodra ik met de hand op de master bijvoorbeeld demo.com neerzet. Moet ik dit zelf ook met de hand op de slave doen voordat hij een axfr stuurt en gaat updaten.
Als het goed is kan je toch instellen dat zodra je het domein aanmaakt hij een notificatie naar de slave server stuurt en de slave server het domein ook automatisch toevoegt als slave zone?
stuk van de supermaster doorlopen ?
En kijk even naar de: slave-cycle-interval
fndanielnl
23/02/10, 22:52
De supermasters stonden wel goed, en heb ook even met de slave cycle gespeeld. Hoe dan ook heb ik nu mysql replication ingesteld.
je moet supermaster (op de slave) en master functionaliteit ook uitdrukkelijk aanzetten.
Ik probeer een master & slave nameserver op te zetten met powerdns. Nu is het geval dat zodra ik met de hand op de master bijvoorbeeld demo.com neerzet. Moet ik dit zelf ook met de hand op de slave doen voordat hij een axfr stuurt en gaat updaten.
Als het goed is kan je toch instellen dat zodra je het domein aanmaakt hij een notificatie naar de slave server stuurt en de slave server het domein ook automatisch toevoegt als slave zone?
Wat je beschrijft heb ik al tijden draaien, met veel plezier zelfs.
Feb 24 06:30:50 ns3 pdns[8326]: Notification request for domain '-----.nl' received from operator
Feb 24 06:30:50 ns3 pdns[8326]: gmysql Connection succesful
Feb 24 06:30:50 ns3 pdns[8326]: Queued notification of domain '-----.nl' to 195.x.x.x
Feb 24 06:30:50 ns3 pdns[8326]: Queued notification of domain '-----.nl' to 89.x.x.x
Feb 24 06:30:50 ns3 pdns[8326]: Queued notification of domain '-----.nl' to 94.x.x.x
Feb 24 06:30:51 ns3 pdns[8326]: AXFR of domain 'vdong.nl' initiated by 89.x.x.x
Feb 24 06:30:51 ns3 pdns[8326]: TCP server is without backend connections in doAXFR, launching
Feb 24 06:30:51 ns3 pdns[8326]: gmysql Connection succesful
Feb 24 06:30:51 ns3 pdns[8326]: gmysql Connection succesful
Feb 24 06:30:51 ns3 pdns[8326]: AXFR of domain '-----.nl' to 89.x.x.x finished
Feb 24 06:30:51 ns3 pdns[8326]: Removed from notification list: '-----.nl' to 94..x.x.x
Feb 24 06:30:51 ns3 pdns[8326]: Removed from notification list: '------.nl' to 195.x.x.x. (was acknowledged)
Feb 24 06:30:51 ns3 pdns[8326]: Removed from notification list: '-----.nl' to 89.x.x.x (was acknowledged)
In dit geval is het domein toegevoegd aan 89.x.x.x zonder problemen.
Probleem van AXFR is wanneer je een domein verwijdert uit de master, dat dit domein op de slave blijft doordraaien. Je moet dus maatregelen nemen om te controleren of alle domeinen op de master overeenkomen met de domeinen op de slave. Iemand die hier een goede oplossing voor heeft? Voor zover ik weet voorziet het AXFR protocol hier niet in.
Aan de andere kant heeft de mysql replication methode ook weer nadelen. Database op master perongeluk verwijdert = geen data op de slave.
Op de slave geven domeinen die uit de master zijn meldingen in de logfile. Deze kun je eruit vissen en automatisch op laten ruimen.
Je zou ook op bepaalde periode's bvb 1x per week of per maand een flush op de tabel kunnen uitvoeren en daar direct na een request.
Dat is een oplossing, maar niet echt ideaal als het om heel veel domeinen gaat. Je slave is dan een tijdje not authoritive, en je zult zien dat je master een keer crashed wanneer je het niet wilt hebben en dan is je dns helemaal gaar.
Dat is ook weer waar, maar je moet ook niet allemaal je slave's op het zelfde moment dit laten uitvoeren he.
Andere mogelijkheid is om op de slave een programma te schrijven wat de tabel met domeinnamen doorloopt een nslookup doet op de master, geeft deze not authoritive terug dan delete je dit domein uit de tabel. Geeft die wel thuis op de master dan ga je naar het volgende domein.
tail -n 5000 /var/log/messages |grep Error\ trying\ to\ retrieve/refresh |cut -d' ' -f10 |sed 's/://g' |sed "s/'//g"| sort | uniq
systemdeveloper
24/02/10, 17:51
Probleem van AXFR is wanneer je een domein verwijdert uit de master, dat dit domein op de slave blijft doordraaien. Je moet dus maatregelen nemen om te controleren of alle domeinen op de master overeenkomen met de domeinen op de slave. Iemand die hier een goede oplossing voor heeft? Voor zover ik weet voorziet het AXFR protocol hier niet in.
Het is maar wat je een goede noemt... ik heb zelf op de master een tabel 'deleted_domeins' toegevoegd dat via een trigger gevuld wordt bij het verwijderen van een domein. In die tabel komt dan per relevante nameserver het domein te staan.
De slave heeft een cronjob die dan om de paar minuten kijkt of er een domein verwijderd moet worden.
Slaves zijn dan na een paar minuten al bijgewerkt (verwijderde domeinen hoeven toch niet zo snel weg te zijn van een slave)
Zoiets ongeveer:
CREATE TRIGGER `domain_before_delete` BEFORE DELETE ON `domains`
FOR EACH ROW BEGIN
INSERT INTO deleted_domains ( domain, nameserver, expdate )
SELECT records.name, records.content, NOW() FROM records WHERE records.name = OLD.name AND records.type = 'NS';
END
De cronscriptjes om het dan op te ruimen op de slave zijn peanuts.