nginx + ngx_mruby + redisでredis制御でサーバを切り替えてみる
サーバを緊急メンテ状態にしたいとき、
・バックエンド最前段の実装で設定を読んで動きを変える
・フロントエンドにメンテ設定送り込んで再起動
色々対応方法を考えたけど、redisに設定を入れ込んでフロントエンド側で 判断して動き変えられたら面白いかなと思ってやってみた。
# -*- coding: utf-8 -*- worker_processes 1; daemon off; master_process off; events { worker_connections 1024; } http { mruby_init_code ' userdata = Userdata.new "redis_data_key" userdata.redis = Redis.new "127.0.0.1", 6379 '; server { listen 7777; location / { echo "port 7777 test"; } } server { listen 57777; location /mruby { mruby_set_code $maint ' userdata = Userdata.new "redis_data_key" redis = userdata.redis redis.get "ngx_maint" '; if ($maint = "TRUE") { mruby_set_code $res_maint ' JSON::stringify({"result"=>"ERR", "time"=>Time.now.to_i}) '; echo $res_maint; } if ($maint != "TRUE") { proxy_pass http://127.0.0.1:7777; } } } }
問題はredis getのコストか。要調査。