【发布时间】:2018-05-10 21:05:23
【问题描述】:
在开发期间从本地计算机访问 Memorystore 的最佳方式是什么?我可以使用 Cloud SQL Proxy 之类的东西来设置隧道吗?
【问题讨论】:
-
不付费创建另一个中间实例就无法连接到这个云redis实例,这很令人失望
标签: google-cloud-platform google-cloud-memorystore
在开发期间从本地计算机访问 Memorystore 的最佳方式是什么?我可以使用 Cloud SQL Proxy 之类的东西来设置隧道吗?
【问题讨论】:
标签: google-cloud-platform google-cloud-memorystore
您可以启动 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
【讨论】:
我在谷歌云上创建了一个虚拟机
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 映像 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 实例相同的区域(以及安全区域)中创建虚拟机。在这台机器上:
SSH 到这个machine 并安装 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
现在创建一个防火墙rule,允许 VM 上端口 6379 上的流量。确保:
现在您应该可以像这样远程连接了:
redis-cli -h [VM IP] -p 6379
【讨论】:
Memorystore 不允许从本地机器连接,从 CE、GAE 等其他方式很昂贵,特别是您的项目很小或处于开发阶段,我建议您创建一个云功能来执行 memorystore,它是无服务器服务,这意味着费用较低执行。我为此写了小tool,结果类似于在本地机器上运行。您可以查看是否对您有帮助。
【讨论】: