MacにSentinelをインストールする


背景

JavaxSpringで開発中のWebシステムではRedisの冗長化のためにRedis-Sentinelを利用している
開発環境だけは設定をかえて〜という回避策は、共通の部分でSession管理にRedis-Sentinelを使うように設定していたため、書き換えるのも難しいかった。
そこで、開発環境でもSentinel動かせばいいじゃない!ということで調査しました。

方法

brew install redis
brew services start redis
redis-sentinel /usr/local/etc/redis-sentinel.conf

注意

  • 上記だけではSentinelはログイン時に起動はしません(Redisだけ)
  • redid-sentinel /usr〜で、フォアグラウンドで動作しますが、ターミナル閉じると停止しちゃいます

構築される環境

Redis
IP:127.0.0.1
PORT:6379

Sentinel
IP:127.0.0.1
PORT:6379
Master名:mymaster

動作確認方法

Sentinelへ接続
redis-cli -p 26379

Redisのmasterの情報を取得
sentinel masters

Sentinelと接続解除
quit

Redisへ接続
redis-cli -p 6379

Redisの全key情報を取得
keys *

cloud portal-wwwのTomcatを起動して、ブラウザでアクセス&ログイン

Redisの全key情報を取得して、値が帰ってきていればOK
keys *

後述

最初はDockerを使って構築すればと考えていましたが
仮想ネットワーク(Macだとdocker0?)のために、Sentinelが回答するIPが
仮想のIPとなるためあきらめました。
解決のヒントとしては「Sentinelの設定値のANNOUNCE_IP」「Dockerのネットワークのhost network」あたりかなとは思ったのですが。。。
どなたかMac x DockerでSentinel構築したよというかたいれば教えてください。

追記

ログイン時にSentinelを自動起動させるには、以下のファイルを設置すれば可能となりました。
デフォルトインストールした場合に限ります。

~/Library/LaunchAgents/homebrew.mxcl.redis-sentinel.plist

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>KeepAlive</key>
    <dict>
      <key>SuccessfulExit</key>
      <false/>
    </dict>
    <key>Label</key>
    <string>homebrew.mxcl.redis-sentinel</string>
    <key>ProgramArguments</key>
    <array>
      <string>/usr/local/opt/redis/bin/redis-sentinel</string>
      <string>/usr/local/etc/redis-sentinel.conf</string>
      <string>--daemonize no</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>WorkingDirectory</key>
    <string>/usr/local/var</string>
    <key>StandardErrorPath</key>
    <string>/usr/local/var/log/redis-sentinel.log</string>
    <key>StandardOutPath</key>
    <string>/usr/local/var/log/redis-sentinel.log</string>
  </dict>
</plist>