Dnsmasqは.consul
へのDnsへの問い合わせ(port 53)をConsul DNS(127.0.0.1#8600)に問い合わせるために使っている。
通常、DnsはUDPポートの53を使うが、rootアクセスを必要とする。consulを特権ユーザーで動さずに使うために、適切にクエリをconsulにフォワーディングする。 https://www.consul.io/docs/guides/forwarding.html
より詳しくは、
consul は DNS形式でノード情報を提供しますが、この時のアクセスポートが 8600番なのでそのままでは DNS リゾルバが行えません。 dnsmasq を利用することで、マシンローカル(127.0.0.1)のリクエストを別ポートにプロキシすることができるので、それで consul の DNS を利用できるようになりますがマシン 1台内で閉じています。
https://qiita.com/rerofumi/items/237c971ed100db6385d2
とのこと。
設定としては、ドキュメントにある通り、
# /etc/resolv.conf nameserver 127.0.0.1
# /etc/dnsmasq.d/10-consul server=/consul/127.0.0.1#8600
とすれば良い。これでdns問い合わせを自身の8600番ポートへフォワーディングできる。
基本として/etc/hosts
になければresolve.conf
に記載されている順でnameserverに問い合わせる(strict-orderがtrueなら)ので、このような設定でフォワーディングできる。
ところで、address=
の設定値でIPアドレスを直打ちでき、設定されたルール、curl -s localhost:8500/v1/catalog/nodes
とかしてゴニョゴニョしてaddress
の値に設定すると、nodeの入れ替えが少ないもの(例えば検証環境とか)に関してはdns問い合わせを行わないことも可能。
manページの--address=
の項を参照。/etc/dnsmasq.d/
に設定ファイルを置く。
他の参考 https://www.infiniteloop.co.jp/blog/2015/04/how_to_use_dnsmasq/ https://server.etutsplus.com/dnsmasq-setup-internal-dns-with-resolver-cache/ https://wiki.archlinux.jp/index.php/Dnsmasq http://www.thekelleys.org.uk/dnsmasq/doc.html
ところで、DNSと関係ないけどleader election時、3台のserverが存在するケースでleaderが落ちserversの台数が2台になった場合はどうなるんだろう。 あと、同様にleaderが落ちて4台になってしまった場合もどうなるんだろう(raftについて調べてないのでこのようなケースに対応できるか知らない)。