在开发过程中从本地机器访问 Memorystore 的最佳方式是什么?我可以使用 Cloud SQL Proxy 之类的东西来设置隧道吗?
5 回答
您可以启动 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
我在谷歌云上创建了一个虚拟机
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
然后我能够从本地机器连接到内存存储进行开发
您可以使用以下 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 地址。
希望可以帮助您解决您的问题。
这篇文章建立在早期文章的基础上,应该可以帮助您绕过防火墙问题。
在与您的 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
Memorystore 不允许从本地机器连接,从 CE、GAE 等其他方式很昂贵,特别是您的项目很小或处于开发阶段,我建议您创建一个云功能来执行 memorystore,它是无服务器服务,这意味着执行费用较低。我为此写了一个小工具,结果类似于在本地机器上运行。您可以检查是否对您有帮助。