Created
May 17, 2012 08:58
-
-
Save yssk22/2717535 to your computer and use it in GitHub Desktop.
MLで盛り上がったNATSについて #cfcrjp #6
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
盛り上がったスレ | |
======================= | |
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