英文:
Laravel Workers - AWS Beanstalkd Instance Termination
问题
我目前在AWS Beanstalk上运行我的Laravel应用程序,并配置了负载均衡器。这个设置允许最少1个和最多2个实例同时运行。到目前为止,一切都按预期运行,负载均衡器在第一个实例的负载过高时会添加第二个实例。
然而,当第二个实例被终止时,我的担忧就出现了。在我的.platform配置中,监管程序已经设置好,因此第二个实例也开始运行工作进程。当这些工作进程在其实例被终止时仍在处理任务时会发生什么情况?将工作进程分离到另一个实例中是否更可行?
不幸的是,我尚未能测试或复制这种情况。然而,我假设系统应该等待监管程序完成其进程,然后再终止实例。
英文:
I am currently running my Laravel application on AWS Beanstalk with a load balancer configured. The setup allows for a minimum of 1 and a maximum of 2 instances to be running. So far, everything functions as expected, with the load balancer adding a second instance when the load on the first one becomes too high.
However, my concern arises when the second instance gets terminated. In my .platform configuration, the supervisor is set up and consequently, the second instance also starts running the workers. What will happen to these workers that are still processing jobs when their instance gets terminated? Would it be more feasible to separate the workers into another instance?
Unfortunately, I have not been able to test or replicate this situation. However, my assumption is that the system should wait for the supervisor to complete its processes before terminating the instance.
答案1
得分: 0
我已经为手头的问题实现了一个解决方案。然而,我并不完全确定这是否是最佳方法。
最初,我为HTTP_SERVER创建了两个环境属性。然而,其中一个将用于HTTP_SERVER,另一个用于工作环境。然后,从环境设置中,我设置了两个"环境属性"。这些属性将决定当前部署是在生产环境还是测试环境,并且是一个HTTP服务器还是一个工作进程。
依据这些设置,我创建了bash脚本来控制操作。
以下是我为预构建准备的脚本中的一部分:
SERVER_VER=$(/opt/elasticbeanstalk/bin/get-config environment -k SERVER_VER); # RELEASE, LIVE
SERVER_TYPE=$(/opt/elasticbeanstalk/bin/get-config environment -k SERVER_TYPE); # WORKER, HTTP
if [[ $SERVER_TYPE == "WORKER" ]]; then
# 安装 supervisor
APP=$(yum info supervisor 2>/dev/null | grep Repo | awk '{ print $3 }')
# 检查 supervisor 是否已安装
if [[ $APP == "installed" ]]; then
sudo supervisorctl stop all # 停止所有 supervisor 进程
else
sudo amazon-linux-extras enable epel
sudo yum install -y epel-release
sudo yum -y update
sudo yum -y install supervisor
sudo systemctl start supervisord
sudo systemctl enable supervisord
fi
# Supervisor 配置
sudo cp .platform/files/supervisor.ini /etc/supervisord.d/laravel.ini
sudo supervisorctl reread
sudo supervisorctl update
# 重启 supervisor
sudo supervisorctl stop all # 停止所有 supervisor 进程
fi
你可以使用 /opt/elasticbeanstalk/bin/get-config environment
命令检索你定义的环境属性。如果你想获取特定的属性,可以使用 /opt/elasticbeanstalk/bin/get-config environment -k SERVER_VER
命令。
英文:
I have implemented a solution for the problem at hand. However, I'm not completely certain if this is the best approach.
Initially, I created two environment properties for HTTP_SERVER. However, one of these will be used for HTTP_SERVER and the other for the Worker Environment. Then, from the environment settings, I set up two "Environment Properties". These properties will determine whether the current deployment is live or in a test environment, and whether it's an HTTP server or a worker.
Depending on these settings, I've created bash scripts to control the operations.
Here's a snippet from the script I prepared for prebuild:
SERVER_VER=$(/opt/elasticbeanstalk/bin/get-config environment -k SERVER_VER); # RELEASE, LIVE
SERVER_TYPE=$(/opt/elasticbeanstalk/bin/get-config environment -k SERVER_TYPE); # WORKER, HTTP
if [[ $SERVER_TYPE == "WORKER" ]]; then
# Install supervisor
APP=$(yum info supervisor 2>/dev/null | grep Repo | awk '{ print $3 }')
# Check if supervisor is installed
if [[ $APP == "installed" ]]; then
sudo supervisorctl stop all # Stop all supervisor processes
else
sudo amazon-linux-extras enable epel
sudo yum install -y epel-release
sudo yum -y update
sudo yum -y install supervisor
sudo systemctl start supervisord
sudo systemctl enable supervisord
fi
# Supervisor config
sudo cp .platform/files/supervisor.ini /etc/supervisord.d/laravel.ini
sudo supervisorctl reread
sudo supervisorctl update
# Restart supervisor
sudo supervisorctl stop all # Stop all supervisor processes
fi
You can retrieve the Environment Properties you have defined with the /opt/elasticbeanstalk/bin/get-config environment
command. If you want to get a specific one, you can use the /opt/elasticbeanstalk/bin/get-config environment -k SERVER_VER
command.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论