GDNSD-PLUGIN-METAFO(8) gdnsd GDNSD-PLUGIN-METAFO(8) (NAME) gdnsd-plugin-metafo - gdnsd (meta-failover) (SYNOPSIS) gdnsd : plugins => { metafo => { resources => { prod_www => { datacenters => [ dc-01, dc-02, dc-03 ] dcmap => { dc-01 => 192.0.2.1 dc-02 => { lb01 => 192.0.2.2, lb02 => 192.0.2.3 } dc-03 => [ 192.0.2.4, 192.0.2.5, 192.0.2.6 ] } }, prod_foo => { datacenters => [ dc-01, dc-02, dc-bk ] dcmap => { dc-01 => { lb01 => 192.0.1.1, lb02 => 192.0.1.2 } dc-02 => [ 192.0.5.1, 192.0.5.2, 192.0.5.3 ] dc-bk => fallback.static.cname.example.org. } } } } } (RR) zonefile example.com: www 600 DYNA metafo!prod_www www-dc01 600 DYNA metafo!prod_www/dc-01 foo 700 DYNC metafo!prod_foo (DESCRIPTION) gdnsd-plugin-metafo / (meta-plugin) . (failover) "datacenter" ( ) . "multifo" "weighted" . - (CONFIGURATION - TOP-LEVEL) metafo ( "plugins => { metafo => { ... } }") : "resources" (hash) . "resources" . "resources" . - (CONFIGURATION - RESOURCES) resources "DYNA" zonefile ( "www DYNA metafo!resource_name"). - . : plugins => { metafo => { resources => { resA => { ... }, resB => { ... } } } } : "datacenters = [ A, B, C, ... ]" . (failover) . "dcmap = { ... }" . "dcmap" - "datacenters" . : plugins => { metafo => { resources => { resA => { datacenters => [ dc01, dc02 ], dcmap => { dc01 => ??? dc02 => ??? } } } } } ("???" ) . "skip_first = true" (resolver) . geoip . "datacenters" "dcmap" "dcmap" . (PER-DATACENTER RESOLUTION) "dcmap" . plugin_metafo . metafo metafo . "%plugin!resource" : plugins => { metafo => { resources => { resA => { datacenters => [ dc1, dc2 ], dcmap => { dc1 => %multifo!res_mfo1 dc2 => %multifo!res_mfo2 } } } } multifo => { res_mfo1 => { lb01 => 192.0.2.1, lb02 => 192.0.2.3 } res_mfo2 => { lb01 => 192.0.2.111, lb02 => 192.0.2.113 } } } plugin_metafo () : plugins => { metafo => { resources => { resA => { datacenters => [ dc1, dc2 ], dcmap => { dc1 => { plugin => multifo, lb01 => 192.0.2.1, lb02 => 192.0.2.3 } dc2 => { lb01 => 192.0.2.111, lb02 => 192.0.2.113 } # : # dc1 => %multifo!metafo_resA_dc1 # dc2 => %multifo!metafo_resA_dc2 } } } } # plugin_metafo # : #multifo => { # metafo_resA_dc1 => { lb01 => 192.0.2.1, lb02 => 192.0.2.3 } # metafo_resA_dc2 => { lb01 => 192.0.2.111, lb02 => 192.0.2.113 } #} } "plugin" . "plugin" "multifo" . "plugin" ( "resA") "dcmap" ( "metafo") . "plugin" "%plugin!resource" . "!resource" . - ( -> -> ) () . "service_types" . ( service_types) "%multifo!foo" . : CNAME . IP IP plugin_metafo "multifo" ( ) 1 2 . CNAME CNAME . "DYNC" "DYNA" ( CNAME ). : plugins => { metafo => { plugin => multifo # service_types => [ bar ] # service_types resources => { resA => { plugin => multifo # service_types => [foo, bar] # service_types : datacenters => [ dc1, dc2, dc3, dc4, dc5, dc6, dc7, dc8 ], dcmap => { dc1 => { plugin => multifo, lb01 => 192.0.2.1, lb02 => 192.0.2.3 } dc2 => { lb01 => 192.0.2.111, lb02 => 192.0.2.113 } dc3 => %simplefo!foo dc4 => { plugin => simplefo, primary => 192.0.2.100, secondary => 192.0.2.101 } dc5 => !bar dc6 => 192.0.2.150 dc7 => [ 192.0.2.180, 192.0.2.181 ] dc8 => last.resort.example.com. } } } } # plugin_metafo # : multifo => { # metafo_resA_dc1 => { lb01 => 192.0.2.1, lb02 => 192.0.2.3, service_types => [foo, bar] } # metafo_resA_dc2 => { lb01 => 192.0.2.111, lb02 => 192.0.2.113, service_types => [foo, bar] } bar => { asd => 192.0.2.77, xyz => 192.0.2.88 } # metafo_resA_dc6 => { 1 => 192.0.2.150, service_types => [foo, bar] } # metafo_resA_dc7 => { 1 => 192.0.2.180, 2 => 192.0.2.181, service_types => [foo, bar] } } simplefo => { foo => { primary => 192.0.2.80, secondary => 192.0.2.81 } # metafo_resA_dc4 => { primary => 192.0.2.100, secondary => 192.0.2.101, service_types => [foo, bar] } } } "%multifo!bar" "%simplefo!foo" metafo "service_types = up" . service_types . (SYNTHETIC PER-DATACENTER RESOURCES) . "resname/dcname" . metafo "prodwww" "[ pri, sec ]" "prodwww/pri" "prodwww/sec" zonefile : www-backup 300 DYNA metafo!prodwww/sec (failover) . (SEE ALSO) gdnsd.config(5), gdnsd.zonefile(5), gdnsd(8) gdnsd. (COPYRIGHT AND LICENSE) (c) 2012 Brandon L Black gdnsd . gdnsd : << >> (GNU General Public License) ( ) / . gdnsd . . gdnsd . . gdnsd 3.8.3 2026-04-04 GDNSD-PLUGIN-METAFO(8)