Skip to content

Instantly share code, notes, and snippets.

@yssk22
Created May 17, 2012 08:58
Show Gist options
  • Save yssk22/2717536 to your computer and use it in GitHub Desktop.
Save yssk22/2717536 to your computer and use it in GitHub Desktop.
MLで盛り上がったNATSについて #cfcrjp #6
盛り上がったスレ
====================================
abc https://groups.google.com/a/cloudfoundry.org/group/vcap-dev/browse_thread/thread/2302e34dc37343d4
きっかけ
====================================
NATSのSPoFどうするよ??
NATSのSPoFとは?
====================================
- CloudFoundry は2種類のNATSが必要
- CloudController, DEA, Router, Health Manager を制御するNATS.
- ServiceNode, ServiceGateway を制御するNATS
- いずれのコンポーネントでも mbus: nats://user:pass@host:port/ の形で利用するNATSのURIを指定する。
- NATSのURIとの接続(EventMachine)が落ちる(エラーを起こす)と、それぞれのコンポーネントは自律的に exit するようになっている。
- NATS自体には High Availability 機能がない(絶賛開発中)
[想定される障害]
NATSを動かしているHW/OSが落ちた
[想定される回復方法]
- NATS を別の場所で、IP, PORT を変えずに起動する (クライアントの設定ファイルを書き換えるのは面倒)
- それぞれのコンポーネント(CloudControllerとかDEAとか)を起動する
MLに投稿した内容
----------------------------------------------------------------
[一発目]
まずは事実関係を整理.
- All of components except for CloudController would exit if NATS
raise an error (like connection errors).
- If a DEA exits with the NATS error, applications on the DEA still
work and can respond the requests.
- After a while DEA exits, routers unregister applications on the dead
DEA because heartbeats fail. (*A)
で、ワークアラウンドはこれだ。
1. if nats server is down, then the IP address of NATS should be moved
to another server, where NATS is restarted.
# I use heartbeat&pacemaker to do this
2. DEAs can reconnect the new NATS server because the IP is not
changed.
# I tuned 'NATS_MAX_RECONNECT_ATTEMPTS' and 'NATS_RECONNECT_TIME_WAIT' environment variable for clients to reconnect.
3. DEAs or other components will exit with 'Authorization is required'
error when they send a command after reconnecting NATS server.
4. Restart DEAs and they check the application processes which have
already been running on them.
[人々の反応]
- nats は簡単に落ちないよ。SPoF を取り除くよりも、一時的に落ちても大丈夫なようになってる。
- だがな、一時的に落ちたのをどうやって検知して回復するかが問題なんだ。夜中の3時に起こされるのとかごめんだぜ。
- ソフトウェアが簡単に落ちないことと、ハードウェア/ネットワークが落ちないことは別問題だぜ。。。
- reconnect のときに authorization error になるのはバグだよねー
- 俺らkeepalivedとfloating IPで対処したぜ(でも、これって、EC2 Friendlyじゃないんだよね)
- queue group さえ使ってなければ簡単にHAできるんだけどなぁ、vcap はどうなの? queue group 使ってるの?
- HealthManager と CloudController が使ってる < queue group
- nats なんか使わずに RPC にしよーぜ!
- ....
- NATS がダウンして、コンポーネント群が落ちるのはその通り。
- IP Failover で auth が失敗するのもその通り
- Cluster の難しさは subscription をどう管理するか。
- NATS の master implementation は Ruby。
- pub/sub を RPC にすると、コストが馬鹿にならない。
- NATSのGoogle Groupは natsio。
結論
----------------------------------------------------------------
- NATSのClusterまだ。
- NATSのソース読んで必要な環境変数を自分好みに設定する
- あとは heartbeat なり keepalived なりでどうぞ。
- router が落ちるので、traffic drop は避けられない? nginx で backend の retry をどうぞ。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment