Docker的负载均衡

运行Web应用程序时,通常希望充分利用资源,而不必转换软件以使用多线程或复杂事件循环。但是,Docker确实为您提供了一种简单的方法,可让您在内部对应用程序进行负载平衡以充分利用服务器资源。本文将向您展示如何使用Nginx在CentOS上使用Docker平衡Web应用程序。

步骤1:创建一个简单的应用程序

我们将使用rust构建这个简单的应用程序。假设您已经安装了rust,请运行cargo new webapp –bin。成功后,您将看到一个名为的目录webapp。在其中webapp,您会看到一个名为的文件Cargo.toml。在其上附加以下几行:

[dependencies.iron]
version = "*"

接下来,在src/main.rs文件内部,删除所有内容并使用以下内容进行填充:

extern crate iron;

use iron::prelude::*;
use iron::status;

fn main() {
    Iron::new(|_: &mut Request| {
        Ok(Response::with((status::Ok, "Hello Vultr :)")))
    }).http("0.0.0.0:3000").unwrap();
}

注意:请勿在应用程序中更改IP。对其进行配置,以便Docker可以侦听您的应用程序。

完成后,通过执行编译应用程序cargo build –release。根据您的服务器,可能需要几分钟。如果没有错误,请按照以下步骤测试应用程序:

  • 运行target/release/webapp
  • http://0.0.0.0:3000/在浏览器中导航到。替换0.0.0.0为服务器的IP地址。

如果一切正常,您将在页面上看到“ Hello Vultr :)”。

步骤2:建立Docker容器

创建一个Dockerfile,并用以下内容填充它:

FROM centos:latest
MAINTAINER User <user@localhost>
RUN yum update -y
COPY ./webapp/target/release/webapp /opt/
EXPOSE 3000
WORKDIR /opt
CMD ./webapp

保存文件。然后创建一个名为的文件deploy.sh,并使用以下内容进行填充:

DEFAULT_PORT=45710
APP_PORT=3000
DEPLOY=5
NAME="webapp"
docker build -t webapp:example . 

for ((i=0; i<DEPLOY; i++)); do
        docker kill $NAME$i ; docker rm $NAME$i
        docker run --name $NAME$i -p 127.0.0.1:$(((i * 1000) + DEFAULT_PORT)):$APP_PORT -d webapp:example
done

运行此脚本时,它将生成映像并根据您设置的数量(默认值为5)部署容器。如果该容器存在,它将在再次部署之前将其杀死并从注册表中删除。

步骤3:配置Nginx

现在,创建一个Nginx配置文件,并用以下内容填充它:

upstream application {
    server localhost:45710;
    server localhost:46710;
    server localhost:47710;
    server localhost:48710;
    server localhost:49710;
}

server {
    listen 0.0.0.0:80;    
    location / {
    expires 1w;
        proxy_pass http://application;
        proxy_redirect off;
        proxy_http_version 1.1;
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

替换0.0.0.0为服务器的IP地址。

通过执行重启Nginx systemctl restart nginx。解决所有错误,然后继续下一步。

步骤4:部署应用程序

通过运行部署应用程序bash ./deploy.sh

您可以使用docker ps- 检查应用程序的状态-将创建5个以开头的图像webapp。现在,http://0.0.0.0:3000/在浏览器中导航到,您将再次看到“ Hello,Vultr :)”消息。

那么,这到底有什么不同?

如果针对负载均衡器配置运行基准测试,则会注意到您正在使用更多的服务器资源,这正是您想要的,特别是如果您的应用程序是使用Node之类的语言构建的,则该语言通常是单线程的。如果您需要升级应用程序,则可以这样做,然后重新运行deploy.sh来重建映像并部署容器。

留下評論

在Arch Linux上使用Makepkg

在Arch Linux上使用Makepkg

在Arch Linux上使用Makepkg可以避免系统污染,确保仅安装必要的依赖关系。

如何在Ubuntu 16.04上安装OpenSIPS控制面板

如何在Ubuntu 16.04上安装OpenSIPS控制面板

快速学习如何在Ubuntu 16.04上安装OpenSIPS控制面板,为VoIP提供商提供支持的功能。

在Fedora 28上安装Akaunting

在Fedora 28上安装Akaunting

学习如何在Fedora 28上安装Akaunting,一款适合小型企业和自由职业者的开源会计软件。

如何在CentOS 7上安装Mailtrain新闻通讯应用程序

如何在CentOS 7上安装Mailtrain新闻通讯应用程序

使用其他系统?Mailtrain是一个基于Node.js和MySQL / MariaDB构建的开源自托管新闻通讯应用程序。

诊断Minecraft服务器延迟和低TPS

诊断Minecraft服务器延迟和低TPS

了解導致Minecraft延遲的原因和解決方案,包括優化伺服器性能和減少滯後的步驟。

AI 能否應對越來越多的勒索軟件攻擊?

AI 能否應對越來越多的勒索軟件攻擊?

勒索軟件攻擊呈上升趨勢,但人工智能能否幫助應對最新的計算機病毒?AI 是答案嗎?在這裡閱讀知道是 AI 布恩還是禍根

ReactOS:這是 Windows 的未來嗎?

ReactOS:這是 Windows 的未來嗎?

ReactOS,一個開源和免費的操作系統,這裡有最新版本。它能否滿足現代 Windows 用戶的需求並打倒微軟?讓我們更多地了解這種老式但更新的操作系統體驗。

通過 WhatsApp 桌面應用程序 24*7 保持聯繫

通過 WhatsApp 桌面應用程序 24*7 保持聯繫

Whatsapp 終於為 Mac 和 Windows 用戶推出了桌面應用程序。現在您可以輕鬆地從 Windows 或 Mac 訪問 Whatsapp。適用於 Windows 8+ 和 Mac OS 10.9+

人工智能如何將流程自動化提升到新的水平?

人工智能如何將流程自動化提升到新的水平?

閱讀本文以了解人工智能如何在小型公司中變得流行,以及它如何增加使它們成長並為競爭對手提供優勢的可能性。

macOS Catalina 10.15.4 補充更新引發的問題多於解決

macOS Catalina 10.15.4 補充更新引發的問題多於解決

最近,Apple 發布了 macOS Catalina 10.15.4 補充更新以修復問題,但似乎該更新引起了更多問題,導致 mac 機器變磚。閱讀這篇文章以了解更多信息