Я пытаюсь использовать GCP Memorystore для обработки идентификаторов сеансов для задания потоковой передачи событий, выполняемого в GCP Dataflow. Задание завершается ошибкой с тайм-аутом при попытке подключиться к Memorystore:
redis.clients.jedis.exceptions.JedisConnectionException: Failed connecting to host 10.0.0.4:6379
at redis.clients.jedis.Connection.connect(Connection.java:207)
at redis.clients.jedis.BinaryClient.connect(BinaryClient.java:101)
at redis.clients.jedis.Connection.sendCommand(Connection.java:126)
at redis.clients.jedis.Connection.sendCommand(Connection.java:117)
at redis.clients.jedis.Jedis.get(Jedis.java:155)
Мой экземпляр Memorystore имеет следующие свойства:
Version is 4.0
Authorized network is default-auto
Master is in us-central1-b. Replica is in us-central1-a.
Connection properties: IP address: 10.0.0.4, Port number: 6379
> gcloud redis instances list --region us-central1
INSTANCE_NAME VERSION REGION TIER SIZE_GB HOST PORT NETWORK RESERVED_IP STATUS CREATE_TIME
memorystore REDISName: default-auto-internal
Type: Ingress
Targets: Apply to all
Filters: IP ranges: 10.0.0.0/20
Protocols/ports:
tcp:0-65535
udp:0-65535
icmp
Action: Allow
Priority: 65534
0 us-central1 STANDARD_HA 1 10.0.0.4 6379 default-auto 10.0.0.0/29 READY 2019-07-15T11:43:14
Моя работа Dataflow имеет следующие свойства:
runner: org.apache.beam.runners.dataflow.DataflowRunner
zone: us-central1-b
network: default-auto
> gcloud dataflow jobs list
JOB_ID NAME TYPE CREATION_TIME STATE REGION
2019-06-17_02_01_36-3308621933676080017 eventflow Streaming 2019-06-17 09:01:37 Running us-central1
Моя сеть «по умолчанию» не может быть использована, так как это устаревшая сеть, которую Memorystore не принимает. Мне не удалось найти способ обновить сеть по умолчанию с устаревшей до автоматической, и я не хотел удалять существующую сеть по умолчанию, поскольку это потребовало бы возиться с производственными службами. Вместо этого я создал новую сеть default-auto типа auto с теми же правилами брандмауэра, что и сеть по умолчанию. Я считаю, что для моей работы Dataflow имеет отношение следующее:
Name: default-auto-internal
Type: Ingress
Targets: Apply to all
Filters: IP ranges: 10.0.0.0/20
Protocols/ports:
tcp:0-65535
udp:0-65535
icmp
Action: Allow
Priority: 65534
Я могу подключиться к Memorystore с помощью telnet 10.0.0.4 6379 из экземпляра Compute Engine.
То, что я пробовал, ничего не изменило: - Переключена библиотека Redis с Jedis 2.9.3 на Lettuce 5.1.7 - Удален и заново создан экземпляр Memorystore
Предполагается, что Dataflow не может подключаться к Memorystore, или мне что-то не хватает?