AWS エラスティック キャッシュ クラスターに定期的にデータを書き込む Python アプリケーションがあります。
これは、私のアプリケーションの機能をシミュレートするサンプル スクリプトです。また、私が直面しているエラーを再現します。
from datetime import datetime
import redis
import time
import sys
import random
class Config:
default_host = "localhost"
master_host = "xxx.xx.0001.xxxx.cache.amazonaws.com"
replica_host = "xxx.xx.0001.xxxx.cache.amazonaws.com"
redis_db = 8
socket_conn_timeout = 10
request_delay_sec = 0.1
def get_redis_client():
return redis.Redis(
host=Config.master_host,
db=Config.redis_db,
socket_connect_timeout=Config.socket_conn_timeout,
)
def get_random_key_value():
val = time.time()
key = "test_key_" + str(random.randint(0, 100))
return key, val
r = get_redis_client()
r.flushdb()
flag = False
while True:
try:
if flag:
print("beat:", time.time())
r.set(*get_random_key_value())
time.sleep(Config.request_delay_sec)
except redis.RedisError as re:
print(datetime.now(), "Error:", type(re), re)
flag = True
# sys.exit()
except KeyboardInterrupt:
print("Stopping loop execution")
sys.exit()
これが私のアプリケーションの環境の詳細です
- パイソン(v 3.7.0)
- Redis-py(v 3.5.3)
- AWS エラスティック キャッシュ (クラスター モードが無効、1 つのマスター ノード、1 つのリード レプリカ)
AWS エラスティック キャッシュ クラスターを垂直方向にスケーリングし、上記のスクリプトを実行すると、クラスターのスケールアップの処理中に次のエラーが数秒間発生し、その後消えます。
<class 'redis.exceptions.ReadOnlyError'> You can't write against a read only replica.
AWS ドキュメントには、垂直スケーリング プロセス中に、データの同期が原因で不整合が発生する可能性があることも記載されています ( https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/redis-cluster-vertical-scaling.html ) 。
誰かが同様の問題に直面したことがありますか、またはスケールアッププロセス中にこのエラーが発生する理由を説明できますか? どうすれば修正できますか?
編集: golang スクリプトで同じことを試してみましたが、完全に正常に動作します。