LoginSignup
13
15

More than 5 years have passed since last update.

socket.ioのnginxロードバランスで気づいたこと

Last updated at Posted at 2015-12-14

まとめるとip_hashはB2Cでしかロードバランスにならないので、stickyを使いましょうという話。

socket.ioのロードバランス

socket.ioのロードバランスにおける注意点といえばXHRですね。socket.ioさんはXHRで通信することがあり、XHRの向き先がリクエストごとに分散されてしまうと通信できなくなってしまいます。

socket.io公式の方法

公式にも複数node利用する場合の方法が書かれています。
http://socket.io/docs/using-multiple-nodes/
nginxをload balancerに使う場合はip_hashを使ってね。

めでたしめでたし

というわけで、複数nodeでload balanceすることができました。

と、いうわけはなく

ip_hashってproxyとかでNATされたアドレスが同じだと分散されないんじゃないの?と思ったら案の定でして。
http://nginx.org/en/docs/http/ngx_http_upstream_module.html#ip_hash
IP先頭3オクテットでやるよ!
って書いてあるのです。ってことは

192.168.0.xxx - 1号機
192.168.1.xxx - 2号機

なんていうレベルでしか分散されないわけです。
1大企業からの大量アクセスは全て同じサーバーに割り振られます。って、それは負荷分散になってない!

sticky機能

となると、sticky機能を使うという選択になってきます。cookieなどの方法で割り振ることができるようになりますnginx Plusならな!
https://www.nginx.com/products/session-persistence/

金がない場合

もちろん、お金がある場合はサポートも受けられるのでnginx plusを買ったほうが良いです。でも、お金がなければ仕方がない。OSSの同様なnginx moduleを利用させていただきましょう。
https://bitbucket.org/nginx-goodies/nginx-sticky-module-ng
作者さんありがとう!

めでたし、めでたし

というわけで、今度こそ分散されて幸せになれたのでした(まる)

13
15
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
13
15