如何在GCP配置可自动扩缩容的Redis并对接App Engine?
关于GCP部署自动扩缩容Redis并对接App Engine的问题解答
首先聊第一个问题:Cloud Launcher(现在也叫Cloud Marketplace)的非Bitnami一键Redis部署确实能用来启动Redis服务,但如果你的核心需求是自动扩缩容,其实GCP官方的Memorystore for Redis托管服务会更省心——它原生支持自动扩缩容、备份、监控这些运维功能,不用自己折腾底层虚拟机。不过既然你已经完成了Cloud Launcher的部署,下面就针对这个自管Redis实例,一步步讲后续要做的配置:
一、把Redis设置成仅允许GCP内部访问
要确保只有GCP内部的服务(比如你的App Engine应用)能访问Redis,得做这几步:
- 配置VPC防火墙规则:
- 打开GCP控制台的「VPC网络 > 防火墙」页面
- 新建一条入站防火墙规则,目标选「指定的目标标签」,输入你Redis虚拟机的标签(比如部署时设的
redis-server) - 来源IP范围填GCP的私有IP段:
10.0.0.0/8、172.16.0.0/12、192.168.0.0/16——这些都是GCP内部VPC的IP范围 - 允许的端口填Redis默认的
6379(如果部署时改了端口就填对应的) - 优先级设得比默认允许规则高(比如1000),确保这条规则优先生效
- 修改Redis的绑定地址:
- 通过GCP控制台的SSH按钮或者
gcloud compute ssh命令登录到Redis虚拟机 - 编辑Redis配置文件,一般路径是
/etc/redis/redis.conf - 找到
bind项,把原来的0.0.0.0改成虚拟机的内部IP(比如10.128.0.5),这样Redis就只会监听内部IP的请求 - 重启Redis服务:
sudo systemctl restart redis-server
- 通过GCP控制台的SSH按钮或者
- 可选:移除公网IP:如果完全不需要公网访问,直接在虚拟机详情页把公网IP删掉,这样实例就只有内部IP,彻底和公网隔绝
二、配置Redis的自动扩缩容
因为是部署在Compute Engine上的自管Redis,自动扩缩容得自己搭机制,推荐两种方式:
- 用托管实例组+负载均衡(适合集群模式):
- 先把Redis搭成集群模式(至少3主3从,保证数据分片和高可用)
- 将集群节点加入托管实例组,然后配置自动扩缩容策略:
- 可以基于CPU、内存使用率设阈值(比如CPU超过70%加实例,低于30%减实例)
- 也可以用Redis的自定义指标(比如
used_memory)来触发扩缩容,需要先把Redis的指标导入Cloud Monitoring
- 注意:单节点Redis不适合扩缩容:如果是单节点Redis,扩缩容会丢失数据,所以一定要先搭集群再搞自动扩缩容
三、把Redis和App Engine应用对接(通过app.yml)
要让App Engine能访问Redis,得打通网络并配置连接信息:
- 打通App Engine和VPC的网络:
如果你的App Engine是标准环境,需要启用Serverless VPC Access——这是让无服务器应用访问VPC内部资源的必要组件。在App Engine的服务设置里,关联到Redis所在的VPC和子网就行。 - 在app.yml里配置Redis连接参数:
在你的应用的app.yml文件中添加环境变量,把Redis的内部IP和端口存进去:env_variables: REDIS_HOST: "10.128.0.5" # 替换成你的Redis实例内部IP REDIS_PORT: 6379 - 代码里用这些变量连接Redis:比如Python代码示例:
import redis import os redis_client = redis.Redis( host=os.environ.get('REDIS_HOST'), port=int(os.environ.get('REDIS_PORT')), db=0 )
四、其他必做的配置
- 设置Redis密码:编辑
redis.conf,找到requirepass项,设置一个强密码,然后重启Redis——防止未授权的内部服务乱访问 - 开启持久化:在
redis.conf里配置RDB(save参数)或者AOF(appendonly yes),这样虚拟机重启后数据不会丢失 - 配置监控:把Redis的指标导入Cloud Monitoring,比如内存使用率、连接数、缓存命中率,方便及时发现问题
内容的提问来源于stack exchange,提问作者Arturo Aviles
相关产品推荐
相关产品推荐

