实现负载均衡

架构图

架构图

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

步骤

安装负载均衡服务器

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

1
2
3
4
5
6
7
8
9
10
11
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 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 服务器为负载均衡服务器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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 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 服务

1
2
sudo nginx -t
sudo nginx -t
sudo service nginx reload

安装应用服务器 APP1

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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 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 的方式访问对应的服务器」
1
2
3
4
5
6
7
8
9
@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 /@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 ,如果输出内容没有错误的话,就表示部署成功,就可以在负载均衡服务器上进行查看了。

实现负载均衡
http://blog.xiangdangnian.net.cn/2019/01/27/实现负载均衡/
作者
chenggx
发布于
2019年1月27日
许可协议