consulのdatacenter間接続
consulをいろいろと検証してみているので、分かったことをまとめます。
consulのversionは0.5.2です。
consulとは
consulとはservice検出、healthcheck機能やkey/value store機能を持ったクラスタリングソフトです。
公式によると以下。
- サービス検出
- ヘルスチェック
- Key/Valueストア
- マルチデータセンタ
consul接続イメージ
今回構築しているのは以下のようなイメージです。
- dc1,dc2の2つのデータセンタがあり、それぞれにconsulサーバ1台、consulクライアント1台が属する
- dc1とdc2間は接続されている
このようなときに、どのような見え方になるのか?を確認してみます。
構築
dc1 server
consul agent -config-file=/etc/consul/conf.d/dc1_server.json
/etc/consul/conf.d/dc1_server.json
{ "datacenter": "dc1", "data_dir": "/tmp/consul", "server": true, "bootstrap_expect": 1 }
dc1 client
consul agent -config-file=/etc/consul/conf.d/dc1_client.json -join=dc1server
/etc/consul/conf.d/dc1_client.json
{ "datacenter": "dc1", "data_dir": "/tmp/consul", "server": false }
dc2 server
consul agent -config-file=/etc/consul/conf.d/dc2_server.json -join-wan=dc1server
/etc/consul/conf.d/dc2_server.json
{ "datacenter": "dc2", "data_dir": "/tmp/consul", "server": true, "bootstrap_expect": 1 }
dc2 client
consul agent -config-file=/etc/consul/conf.d/dc2_client.json -join=dc2server
/etc/consul/conf.d/dc2_client.json
{ "datacenter": "dc2", "data_dir": "/tmp/consul", "server": false }
consul membersでの見え方
dc1 serverから見た場合
[root@dc1server /]# consul members Node Address Status Type Build Protocol DC dc1client 172.17.0.58:8301 alive client 0.5.2 2 dc1 dc1server 172.17.0.57:8301 alive server 0.5.2 2 dc1 [root@dc1server /]# consul members -wan Node Address Status Type Build Protocol DC dc1server.dc1 172.17.0.57:8302 alive server 0.5.2 2 dc1 dc2server.dc2 172.17.0.59:8302 alive server 0.5.2 2 dc2
dc1 clientから見た場合
[root@dc1client /]# consul members Node Address Status Type Build Protocol DC dc1server 172.17.0.57:8301 alive server 0.5.2 2 dc1 dc1client 172.17.0.58:8301 alive client 0.5.2 2 dc1 [root@dc1client /]# consul members -wan
このことから、以下のことが分かります。
consul members
では、自dc内のメンバを確認できる-wan
オプションを付与することで、dc同士のサーバ間接続については確認可能。clientからは確認不可。
consul execでの発行先
dc1 serverから実行した場合
[root@dc1server /]# consul exec hostname dc1server: dc1server dc1server: ==> dc1server: finished with exit code 0 dc1client: dc1client dc1client: ==> dc1client: finished with exit code 0 2 / 2 node(s) completed / acknowledged [root@dc1server /]# consul exec -datacenter="dc2" hostname dc2server: dc2server dc2server: ==> dc2server: finished with exit code 0 dc2client: dc2client dc2client: ==> dc2client: finished with exit code 0 2 / 2 node(s) completed / acknowledged
dc1 clientから実行した場合
[root@dc1client /]# consul exec hostname dc1client: dc1client dc1client: ==> dc1client: finished with exit code 0 dc1server: dc1server dc1server: ==> dc1server: finished with exit code 0 2 / 2 node(s) completed / acknowledged [root@dc1client /]# consul exec -datacenter="dc2" hostname dc2server: dc2server dc2server: ==> dc2server: finished with exit code 0 dc2client: dc2client dc2client: ==> dc2client: finished with exit code 0 2 / 2 node(s) completed / acknowledged
このことから、以下のことが分かります。
- serverでもclientでも
exec
コマンドは実行可能。 - clientから見て
members -wan
コマンドで他dcが見えなかったとしても、コマンド自体は発行できる。