実運用を見据えたRedisの導入ならばAmazon ElastiCacheが簡単なのでオススメといえます。
サーバーのコマンド操作に慣れてなくてもAWSの管理画面を操作するだけで、Redisのインストール、さらに、クラスタリング、レプリケーション、死活監視などの設定までできてしまいます。
このブログでは、Amazon ElastiCacheを使ったRedisの導入方法、導入後の動作チェック方法を解説します。
Amazon ElastiCacheの導入背景
私は、ゲーム開発のエンジニアをしている。
普段はUnityでゲームアプリを開発しているが、サーバーサイドのPGを担当しています。
さらに、インフラ担当者が居なくなってしまったため、インフラ側(主に、本番サーバーの管理、障害対応)の対応もする機会も増えてきました。
DBの負荷対策でRedisを導入を検討することになりました。しかし、運用を見据えたRedisの導入は、インフラ担当者でないエンジニアにとっては難しいものでした。
Redisを一つのサーバーで動作させるだけならば、設定ファイルを書いて起動するだけなので簡単です。しかし、実際の運用を考えるとレプリケーション(マスター、スレーブの設定)、死活監視/通知、フェイルオーバーなどの検討も必要になるため難易度が急に上がります。
私は、Redisのドキュメント、Redis Sentinelの英語ドキュメントを読んでみたが、理解できませんでした。時間に追われていると、集中できず、余計に理解が困難になります。
そんなときに教えてもらったのが、Amazon ElastiCacheです。
Amazon ElastiCacheのメリット、デメリット
メリット
・サーバー1台1台にRedisインストール、設定をしなくてよい。
・レプリケーション、死活監視する場合は、複数台のサーバーにRedis(Sentinel含む)をインストールする必要があるが、その必要がない。
・設定作業、モニタリング、障害復旧、バックアップも管理画面の操作だけでできる。
・管理画面でCPU使用率、メモリーなどグラフで見ることができて運用が楽です。
デメリット:
・月額の料金がかかる
Amazon ElastiCacheでRedisを設定する
Amazon ElastiCacheを使ってRedisの導入をしてみます。
Amazon ElastiCacheの管理画面でElastiCacheを選択する
サブネットグループの作成をする
サブネットグループを作るには、事前にVPCの設定が必要になります。
「VPC ID」を選択して項目が一つの出てこないときは、VPCを最低一つ作る必要があります。
「Amazon ElastiCache クラスターの作成」を作成する。
画面左横で「Redis」を選択したあと「作成」ボタンをクリックします。
「作成」ボタンを押して画面の指示に従って入力していきます。
その際、注意すべき箇所を記載します。
- 「サブネットグループ」は、「サブネットグループの作成」で作成したものを選択します。
- 自動フェイルオーバーを使う場合はマルチAZにチェックします。
-
その場合、「アベイラビリティーゾーン」はプライマリとレプリカは別々のゾーンにします。
- プライマリのゾーンで障害が起きると、レプリカも道連れになり動かなくなってしまうため、予め分けておく必要があります。
すべての項目を入力後、「作成」ボタンをクリックします。
入力に間違えがなければ、Redis環境が作成されます。環境作成が終わるまで15分〜30分ほどの時間がかかります。
本当にRedisが使えるか確認する
redis-cliを使ってRedisにアクセスできるか確認する
redis-cliをインストールしたサーバー、もしくはPCにてredis-cliコマンドでredisにアクセスできるか確認します。
$ ./redis-cli -h hogehoge.host(ホスト名を書く)
$ redis hogehoge.host:6379> info
その結果、以下の様に出力されれば成功です
# Server
redis_version:5.0.0
redis_git_sha1:0
以下、省略
上記のコマンドを打っても反応しない場合は、設定を間違えていることがほとんどです。
特に、「サブネットグループ」「参加しているVPC」が正しいかチェックしてみます。
PR:Redisについて詳しく知りたいならば「Redis入門 インメモリKVSによる高速データ管理」
php redisadminを使ってみる
redis-cliがない場合は、もしくは「redis-cli 」の操作に難がある場合、
php redisadminを使ってRedisが使えるか確認してみても良いでしょう。
こちらはPHPおよびRedisプラグインを入れる必要があるが、redis-cliを使わなくてよいです。
尚、redisadminの導入方法についてはここでは扱いません。
php redisadminについて
https://github.com/erikdubbelboer/phpRedisAdmin
まとめ
いかがでしょうか?
サーバーの負荷対策にRedisを導入するのは良いですが、本番環境で運用させるのは、複数のサーバを注視していないといけないため意外に大変です。
運用の手間を減らすという意味でもAmazon ElastiCacheの導入を検討してみてはいかがでしょうか?
手間を減らすことができ、空いた時間を他のことに使うことができます。