34

在开发过程中从本地机器访问 Memorystore 的最佳方式是什么?我可以使用 Cloud SQL Proxy 之类的东西来设置隧道吗?

4

5 回答 5

54

您可以启动 Compute Engine 实例并使用端口转发连接到您的 Redis 机器。

例如,如果您的 Redis 机器的内部 IP 地址为 10.0.0.3,您会这样做:

gcloud compute instances create redis-forwarder --machine-type=f1-micro
gcloud compute ssh redis-forwarder -- -N -L 6379:10.0.0.3:6379

只要您保持 ssh 隧道打开,您就可以连接到 localhost:6379

更新:现已正式记录: https ://cloud.google.com/memorystore/docs/redis/connecting-redis-instance#connecting_from_a_local_machine_with_port_forwarding

于 2018-07-31T13:13:06.087 回答
13

我在谷歌云上创建了一个虚拟机

gcloud compute instances create redis-forwarder --machine-type=f1-micro

然后 ssh 进入并安装 haproxy

sudo su
apt-get install haproxy

然后更新了配置文件

/etc/haproxy/haproxy.cfg

....existing file contents
frontend redis_frontend
  bind *:6379
  mode tcp
  option tcplog
  timeout client  1m
  default_backend redis_backend

 backend redis_backend
   mode tcp
   option tcplog
   option log-health-checks
   option redispatch
   log global
   balance roundrobin
   timeout connect 10s
   timeout server 1m
   server redis_server [MEMORYSTORE IP]:6379 check

重启 haproxy

/etc/init.d/haproxy restart

然后我能够从本地机器连接到内存存储进行开发

于 2018-10-05T14:50:14.057 回答
6

您可以使用以下 docker image haproxy docker image启动 Compute Engine 实例并设置 haproxy,然后 haproxy 会将您的 tcp 请求转发到 memorystore。

例如,我想使用 ip 10.0.0.12 访问 memorystore 实例,因此添加了以下 haproxy 配置:

frontend redis_frontend
   bind *:6379
   mode tcp
   option tcplog
   timeout client  1m
   default_backend redis_backend

backend redis_backend
   mode tcp
   option tcplog
   option log-health-checks
   option redispatch
   log global
   balance roundrobin
   timeout connect 10s
   timeout server 1m
   server redis_server 10.0.0.12:6379 check

因此,现在您可以使用以下命令从本地计算机访问 memorystore:

redis-cli -h <your-haproxy-public-ipaddress> -p 6379

注意:替换为您的实际 haproxy ip 地址。

希望可以帮助您解决您的问题。

于 2018-09-01T06:36:31.553 回答
4

这篇文章建立在早期文章的基础上,应该可以帮助您绕过防火墙问题。

在与您的 Memorystore 实例相同的区域(和安全区域)中创建虚拟机。在这台机器上:

  • 添加一个网络标签,我们将使用该标签创建防火墙规则以允许端口 6379 上的流量
  • 添加用于访问此 VM 的外部 IP

SSH进入这台机器并安装haproxy

sudo su
apt-get install haproxy

在 /etc/haproxy/haproxy.cfg 文件中的现有配置下方添加以下内容

frontend redis_frontend
   bind *:6379
   mode tcp
   option tcplog
   timeout client  1m
   default_backend redis_backend

backend redis_backend
   mode tcp
   option tcplog
   option log-health-checks
   option redispatch
   log global
   balance roundrobin
   timeout connect 10s
   timeout server 1m
   server redis_server [MEMORYSTORE IP]:6379 check

重启 haproxy

/etc/init.d/haproxy restart

现在创建一个防火墙规则,允许 VM 上端口 6379 上的流量。确保:

  • 它与我们在 VM 上创建的网络标签具有相同的目标标签。
  • 它允许 TCP 协议在端口 6379 上的流量。

现在您应该能够像这样远程连接:

redis-cli -h [VM IP] -p 6379
于 2021-01-14T22:04:23.280 回答
0

Memorystore 不允许从本地机器连接,从 CE、GAE 等其他方式很昂贵,特别是您的项目很小或处于开发阶段,我建议您创建一个云功能来执行 memorystore,它是无服务器服务,这意味着执行费用较低。我为此写了一个小工具,结果类似于在本地机器上运行。您可以检查是否对您有帮助。

于 2020-08-19T05:23:20.413 回答