サービス検出を使った自動化を行うために,
サービスの可用性を高めるConsul
複数台のサーバ構成によって,
クラウド技術の普及により,
このような課題を簡単に解決すべく登場したのがConsulです。Consulが持つ機能の1つにサービス検出
また,
Consulは,
このConsulの機能を使えば,
Nginxの負荷分散にConsulを使うには
それでは,
同一ネットワーク上で,
- Consulサーバ:HTTP・
DNSインターフェースを持つ。1台 (192. 168. 39. 3) のみ。 - Consulクライアント:サービスが稼働する環境を想定。2台
(192. 168. 39. 11, 192. 168. 39. 12) で構成。
Consulサーバのセットアップ
Consulのセットアップの他に,
まず,
$ wget -O 0.5.0_linux_amd64.zip https://dl.bintray.com/mitchellh/consul/0.5.0_linux_amd64.zip $ unzip 0.5.0_linux_amd64.zip $ sudo cp consul /usr/bin/consul
セットアップ後は,nohup
を使ってバックグラウンドでConsulサーバを起動するのは,
$ nohup consul agent -server -bootstrap-expect=1 -data-dir=/tmp/consul -bind=192.168.39.3 -node=server -ui-dir=/opt/consul/dist &
正常に起動したかどうかは,consul members
コマンドでも確認できます。
# consul members Node Address Status Type Build Protocol server 192.168.39.3:8301 alive server 0.5.0 2
次にdnsmasqの設定を行います。ConsulのDNSインターフェースはポート8600を使用するため,dig
等のコマンドでConsulの名前解決を行う場合は,curl
やping
等のツールで名前解決を手軽に行うのがdnsmasqです。
以下はCentOSにおけるセットアップ例です。
# yum -y install dnsmasq # cp -p /etc/dnsmasq.conf /etc/dnsmasq.conf.orig # echo "server=/consul/127.0.0.1#8600" >> /etc/dnsmasq.conf # echo "strict-order" >> /etc/dnsmasq.conf
必要に応じて/etc/
も書き換えます。自分自身で名前解決を行うためnameserver 127.
を既存の指定よりも前の行に記述します。
nameserver 127.0.0.1
nameserver 8.8.8.8
それからdnsmasqを起動します。
# chkconfig dnsmasq on # service dnsmasq start
正常に名前解決を行えるか確認します。host
コマンドを使い,server
というノード名称を持つIPアドレスを確認します。
$ host server.node.consul server.node.consul has address 192.168.39.3
名前解決の確認ができれば,ping
などコマンドライン上から利用できることがわかります。
$ ping -c 3 server.node.consul PING server.node.consul (192.168.39.3) 56(84) bytes of data. 64 bytes from consul-server (192.168.39.3): icmp_seq=1 ttl=64 time=0.008 ms 64 bytes from consul-server (192.168.39.3): icmp_seq=2 ttl=64 time=0.042 ms 64 bytes from consul-server (192.168.39.3): icmp_seq=3 ttl=64 time=0.035 ms --- server.node.consul ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 1999ms rtt min/avg/max/mdev = 0.008/0.028/0.042/0.015 ms
これでConsulサーバー側の準備が完了しました。