Как настроить кластер AWS ElastiCache в Rails? (проблема с ответом MOVED) - PullRequest
0 голосов
/ 17 апреля 2019

Я использую:

  • рельсы (5.2.2)
  • redis (4.1.0)

И у меня есть кластер Elasticache в AWS.

AWS дал мне самодостаточную запись DNS:

$ dig ec-cluster-test.44cbxh.clustercfg.euw1.cache.amazonaws.com

; <<>> DiG 9.10.6 <<>> ec-cluster-test.44cbxh.clustercfg.euw1.cache.amazonaws.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 1728
;; flags: qr rd ra; QUERY: 1, ANSWER: 6, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;ec-cluster-test.44cbxh.clustercfg.euw1.cache.amazonaws.com. IN A

;; ANSWER SECTION:
ec-cluster-test.44cbxh.clustercfg.euw1.cache.amazonaws.com. 15 IN A 10.30.130.70
ec-cluster-test.44cbxh.clustercfg.euw1.cache.amazonaws.com. 15 IN A 10.30.129.116
ec-cluster-test.44cbxh.clustercfg.euw1.cache.amazonaws.com. 15 IN A 10.30.130.76
ec-cluster-test.44cbxh.clustercfg.euw1.cache.amazonaws.com. 15 IN A 10.30.128.168
ec-cluster-test.44cbxh.clustercfg.euw1.cache.amazonaws.com. 15 IN A 10.30.130.130
ec-cluster-test.44cbxh.clustercfg.euw1.cache.amazonaws.com. 15 IN A 10.30.129.105

;; Query time: 6 msec
;; SERVER: 192.168.200.1#53(192.168.200.1)
;; WHEN: Wed Apr 17 12:28:00 CEST 2019
;; MSG SIZE  rcvd: 183

Но когда я пытаюсь использовать его в приложении Rails, оно не работает:

irb(main):002:0> redis = Redis.new(url: "redis://ec-cluster-test.44cbxh.clustercfg.euw1.cache.amazonaws.com:6379/0")
=> #<Redis client v4.1.0 for redis://ec-cluster-test.44cbxh.clustercfg.euw1.cache.amazonaws.com:6379/0>
irb(main):003:0> redis.get("test")
Traceback (most recent call last):
        1: from (irb):3
Redis::CommandError (MOVED 6918 10.30.129.116:6379)

Как мне настроить конфигурацию redis для управления MOVED ответами?

1 Ответ

0 голосов
/ 17 апреля 2019

Мне пришлось использовать атрибут cluster:

irb(main):004:0> redis = Redis.new(cluster: ["redis://ec-cluster-test.44cbxh.clustercfg.euw1.cache.amazonaws.com:6379/0"])
=> #<Redis client v4.1.0 for redis://10.30.128.168:6379/0 redis://10.30.129.116:6379/0 redis://10.30.130.76:6379/0>
irb(main):005:0> redis.get("test")
=> nil
irb(main):006:0> redis.set("test", "test001")
=> "OK"
irb(main):007:0> redis.get("test")
=> "test001"

И убедитесь, что я передаю массив

...