Black Belt Online Seminar ElastiCache
P.20
redis-rb
ElastiCache(Redis) クラスターの configuration エンドポイントに対応している。
そして、以下試した所いけた!嬉しかった!
Redis.New(cluster: ["rediss://<configuration endpoint>:6379"])ruby で ElastiCache Redis (クラスターモード有効) 利用でハマった所 - 長生村本郷Engineers'Blog
クラスターモード使用時は複数キーにアクセスする mget はエラーになる可能性があるので、使わないでおきましょうと言う話。キーでシャーディングしているので、そらそうでしょうね。
ruby で ElastiCache Redis (クラスターモード有効) 利用でハマった所 - 長生村本郷Engineers'Blogクラスターモード使用時の注意
クラスターモード有効時に https://redis.io/commands/mget:titleredis.mget を使用した際に CROSSSLOT Keys in request don't hash to the same slot のエラーが確認されました。
redis = Redis.new(cluster: ["rediss://<elasticache configuration endpoint>:6379"]) redis.set('key1', 'hogehoge') redis.set('key2', 'mogemoge') p redis.get('key1') # => hogehoge p redis.mget('key1', 'key2') # => Redis::CommandError (CROSSSLOT Keys in request don't hash to the same slot)以下にサンプルもあり、呼び出しコマンドで クロススロットコマンドは避けてね、とあります。
https://github.com/redis/redis-rb#cluster-supportThe calling code is responsible for avoiding cross slot commands.
この方がスケールアウト/イン、スケールアップ/ダウン時の検証を行った結果は以下の通りだったらしい。
ruby で ElastiCache Redis (クラスターモード有効) 利用でハマった所 - 長生村本郷Engineers'Blogスケーリング中のアクセスは本当に処理され続けるのか?
実際に以下実施しながら、 set, get を実行しましたが、特に問題なくリクエストは処理され続けられました。
- 水平スケール
- シャード追加 Add shards
- シャード削除 Delete shards
- レプリカ追加 Add Replicas
- レプリカ削除 Delete Replicas
- 垂直スケール
- インスタンスのスペックアップ・ダウン
メンテに強い、Redis クラスターモード!