26
25

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Serfで実装するHigh Availability NAT

Last updated at Posted at 2015-04-20

#Serf

障害の検知と、イベントハンドラーを行えるhashicorpのツール。

概要はこちらがわかりやすいです。
http://gihyo.jp/admin/feature/01/serf-consul

#NAT冗長化

最近はAutoScalingによる冗長化もあるが、
切り替わり時間を短くしたいためActive/Standbyによる冗長化を実装。

Serfにより障害を検知し、APIを使用しRouteTableを切り替える。

ha-nat.png

#Serf実装

Active側が正常であれば、常に経路を寄せるようにする。
Standby側はActive側の障害を検知した際にRouteTableを書き換える。
また、疎通間隔を4秒とし、タイムアウト12秒設定することで最長の障害時間を12秒にする。

オプション等は以下が参考になります。
https://www.serfdom.io/docs/agent/options.html
http://qiita.com/zembutsu/items/1e2cddd0a424ef7a4895

##Serf Active

{
  "node_name": "nat1",
  "enable_syslog": true,
  "tags": {
    "role": "nat"
  },
  "reconnect_interval": "4s",←疎通間隔は4秒
  "reconnect_timeout": "12s",←タイムアウト検知12秒
  "tombstone_timeout": "12s",←タイムアウト検知12秒
  "event_handlers": [
    "member-join=ha-nat -R [変更するRouteTableのTagName] -N 0.0.0.0/0 -r ap-northeast-1 >> /var/log/ha-nat.log 2>&1"
  ]
}

##Serf Standby

{
  "node_name": "nat2",
  "enable_syslog": true,
  "tags": {
    "role": "nat"
  },
  "reconnect_interval": "4s",
  "reconnect_timeout": "12s",
  "tombstone_timeout": "12s",
  "start_join": [
    "Active側のPrivateIP"
  ],
  "event_handlers": [
    "member-failed,member-leave=ha-nat -R [変更するRouteTableのTagName] -N 0.0.0.0/0 -r ap-northeast-1 >> /var/log/ha-nat.log 2>&1"
  ]
}

##initスクリプト

zembutsuさんのスクリプトを使わせて頂きました。
lockfile等をちょこっと直して使ってます。
https://gist.github.com/zembutsu/7640108

##RouteTable書き換えスクリプト

BotoによるRouteTable操作を実装しました。
理由としては、AWSで提供するNATインスタンスはAmazonLinuxのため、
botoであればすでに環境は整っているので追加のインストールは必要なくなります。

ha-nat -R [変更するRouteTableのTagName] -N [書き換える経路(Cidr込み)] -r [リージョン]

#起動

Active側のサービスを先に上げる。
その後、Standby側のサービスも上げる。

$ sudo /etc/init.d/ha-serf start

#障害試験

数回試験しましたが最長で、
Ping1秒間隔の障害試験で切り替わり時に8パケットロスとなり8秒ダウン。

--- 8.8.8.8 ping statistics ---
42 packets transmitted, 34 received, 19% packet loss, time 42087ms
rtt min/avg/max/mdev = 2.181/2.454/2.867/0.176 ms

その他、タイミングによりますがこれよい短い場合もあります。
尚、両方が正常である場合のStandbyからActiveへ戻す際のパケロスはなし。

26
25
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
26
25

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?