【nginx】ロードバランサー
HTTP
weight に指定されたサーバが応答不可になると backup に流れる
code:nginx
upstream backend {
server 192.168.0.1:80 weight=1;
server 192.168.0.2:80 weight=2;
server 192.168.0.3:80 backup;
}
server {
location / {
}
}
TCP
stream モジュールを利用
code:nginx
stream {
upstream mysql_read {
server 192.168.0.1:3306 weight=1;
server 192.168.0.2:3306 weight=2;
server 192.168.0.3:3306 backup;
}
server {
listen 3306;
proxy_pass mysql_read;
}
}
UDP
ntp の例
code:nginx
stream {
upstream ntp {
server 192.168.0.1:123;
server 192.168.0.2:123;
}
server {
listen 123 udp;
proxy_pass ntp;
}
}
バランシング対象となるサービスでクライアントとサーバ間で複数のパケットを前後に送信する必要がある場合には、 reuseport を指定する OpenVPN とか
code:nginx
stream {
server {
listen 1195 udp reuseport;
proxy_pass 127.0.0.1:1194;
}
}
パッシブチェック
アップストリームサーバの健全性チェック
クライアントからの要求に応じて nginx を通過する際に、失敗した接続やタイムアウトした接続を監視
あくまで受動監視
code:nginx
upstream backend {
server 192.168.0.1:80 max_fails=3 fail_timeout=3s;
server 192.168.0.2:80 max_fails=3 fail_timeout=3s;
}