0

使用的服务:

  • Google Compute Engine (GCE)(永远在线或抢占式)
  • Ubuntu 16.04 LTS
  • PHP
  • 谷歌云 SQL
  • 谷歌云 SQL 代理

问题:Google Cloud SQL 代理连接在 Google 关闭脚本启动之前关闭。

问题原因:关闭期间 PHP 中出现“MySQL 服务器已消失”和类似错误消息。

经过大量调查后,似乎在关闭实例期间,在 Google Cloud Startup 脚本期间启动的数据库连接在 Shutdown Script 启动之前关闭。

我试图更改systemctl服务的顺序,但我无法找到正确的加载顺序。

在创建映像期间,此内容被插入到/lib/systemd/system/google-shutdown-scripts.service.d/bizzycloud.conf

[Unit]
After=apache2.service haproxy.service
Wants=apache2.service haproxy.service google-startup-scripts.service

启动脚本片段:

sudo /cloud_sql_proxy -dir=/cloudsql -instances_metadata /project/attributes/DB_Connections &

关机脚本片段

echo "Shutting Down"
curl "http://localhost/run/shutdowntest.php" # < This reports database errors
sudo /cloud_sql_proxy -dir=/cloudsql -instances_metadata /project/attributes/DB_Connections & # < Reconnect back to the database
curl "http://localhost/run/shutdowntest.php" # < This reports database is ok

服务器启动时数据库没有问题,但是一旦它们开始关闭,我们就会开始注意到问题。

我的google-shutdown-scripts.service.d/bizzycloud.conf文件似乎没有改变启动和关闭脚本的顺序。

这很可能与人们在“运行状况检查恢复”期间遇到的随机 Cloud SQL 错误或服务器关闭时遇到的类似问题有关。

是否有人能够帮助提出解决方案,因为我们的设置非常不稳定,服务器一直在扩大和缩小,所以我们遇到了很多这些错误。

谢谢

4

1 回答 1

0

很抱歉发布我自己的答案,但这可能对某人有用。

因此,我没有尝试更改 Google 启动和关闭脚本的顺序,而是选择了创建自己的服务(一开始听起来很吓人)。

使用内容创建了一个名为/cloudsqlservice/cloudsql-startup.sh的文件

#!/bin/bash

echo "Starting up Google Cloud SQL"
sudo /cloud_sql_proxy -dir=/cloudsql -instances_metadata /project/attributes/DB_Connections

通过创建一个名为/lib/systemd/system/bizzycloud-sql.service的文件创建了一个 systemd 服务

[Install]
WantedBy=multi-user.target

[Unit]
Description=Google Cloud Compute Engine SQL Proxy
After=networking.service
Before=google-shutdown-scripts.service

[Service]
Type=simple
WorkingDirectory=/cloudsqlservice
ExecStart=/cloudsqlservice/cloudsql-startup.sh
StandardOutput=journal
User=root

注意::Before=虽然这看起来是在告诉它在关闭脚本之前运行,但实际上,在系统关闭期间,前后设置是相反的,因此该服务的关闭应该在关闭脚本之后运行

修改自:将代理作为服务运行

sudo chmod 0644 /lib/systemd/system/bizzycloud-sql.service
sudo systemctl start bizzycloud-sql.service

希望这可以帮助遇到同样问题的其他人。

于 2017-06-09T13:48:58.513 回答