实现负载均衡

架构图

架构图

简介: 用户访问负载均衡服务器,负载均衡服务器将相应的请求转发至应用服务器APP1或APP2。当前其中一台应用服务器down调的时候,负载均衡服务器将会把请求转发至另一台正常的服务器上。

步骤

安装负载均衡服务器

安装并启动 nginx (或使用 jellybool 的 sh 脚本)

sudo apt-get update

sudo LC_ALL=en_US.UTF-8 add-apt-repository ppa:nginx/development -y

sudo apt-get update

sudo apt-get -y install nginx

sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/default.bak

sudo service nginx start

配置 nginx 服务器为负载均衡服务器

upstream backend {
    server pravite-ip-address-1;  #应用服务器ip地址
    server pravite-ip-address-2;  #应用服务器ip地址
}

server {
    listen 80 default_server;
    listen [::]:80 default_server;
    server_name nuli.io www.nuli.io;

    location / {
        add_header X-Content-Type-Options nosniff;
        proxy_set_header X-Scheme $scheme;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-NginX-Proxy true;
        proxy_hide_header X-Powered-By;
        proxy_hide_header Vary;

        proxy_pass http://backend;
        proxy_redirect off;
    }

}

检测 nginx 配置并重启 nginx 服务

sudo nginx -t
sudo service nginx reload

安装应用服务器 APP1

安装 nginx 和 php 以及 php 扩展 或使用 jellybool 的 sh 脚本

sudo apt-get update

sudo apt-get -y install zsh htop zip unzip composer

sudo LC_ALL=en_US.UTF-8 add-apt-repository ppa:nginx/development -y
sudo apt-get update
sudo apt-get -y install nginx
sudo service nginx start

sudo LC_ALL=en_US.UTF-8 add-apt-repository ppa:ondrej/php -y
sudo apt-get update

sudo apt-get -y install php7.2
sudo apt-get -y install php7.2-mysql
sudo apt-get -y install php7.2-fpm
sudo apt-get -y install php7.2-curl php7.2-xml php7.2-json php7.2-gd php7.2-mbstring php7.2-bcmath

sudo service php7.2-fpm restart

sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/default.bak

安装应用服务器 APP2 (同 APP1)

测试负载均衡

  1. 在 APP1 服务器上的 /var/www/html 目录下将 index.html文件内容更改为 APP1。
  2. 在 APP2 服务器上的 /var/www/html 目录下将 index.html文件内容更改为 APP2。
  3. 访问负载均衡服务器 ip 地址或配置的域名。此时页面将交替显示 APP1 和 APP2 。~~~成功。

使用 Envoy 将 Laravel 项目同时部署在所有负载均衡的机器上

  1. 在本机上创建 Laravel 项目
  2. 将项目提交到 coding 或 github 上
  3. 配置 coding 或 github 的ssh (可选)
  4. 使用 ssh 或 https 的方式将项目部署到 APP1 和 APP2 服务器上
  5. 配置两台服务器的 .env 文件 保证两台服务器的 APP_KEY 要一直
  6. 测试——访问负载均衡服务器可以看到 Laravel 欢迎语
  7. 在本机中的 Laravel 项目中安装 Envoy 扩展 参考文档
  8. 在项目根目录新增 Envoy.blade.php 文件并在文件中增加如下内容。「需要注意的是:本机可以通过 ssh 的方式访问对应的服务器」
@servers(['web-1'  =>  'ssh root@192.168.3.11', 'web-2'  =>  'ssh root@192.168.3.11'])

@task('deploy', ['on'  => ['web-1', 'web-2'], 'parallel'  =>  true])

cd /var/www/laravel-deploy   

sudo git pull origin master

@endtask
  1. 运行部署命令 envoy run deploy,如果输出内容没有错误的话,就表示部署成功,就可以在负载均衡服务器上进行查看了。

文章作者: chenggx
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 chenggx !
评论
 上一篇
MySQL 各种锁的理解 MySQL 各种锁的理解
之前总是听说 MySQL 中的锁,一直没有具体的看过,晚上抽了空看了一点就先记录了下来,后面有机会在补充。 为什么需要锁因为数据库是一个多用户共享的资源,也就是任何人都可以访问数据。当有一个商品表库存为1,当一个用户购买该商品的时候,首
2019-02-14
下一篇 
CGI, Fast-CGI,PHP-CGI,PHP-FPM 几个概念的总结 CGI, Fast-CGI,PHP-CGI,PHP-FPM 几个概念的总结
2020-2-6 更新 最近又看到一篇文章,讲解的非常到位,在更正一下之前的结论 cgi、fast-cgi 都是协议,规定了 web server 需要传递那些数据给 php 解释器。他们的区别是 cgi 每次都需要加载配置文件
2019-01-24
  目录