Rumah  >  Artikel  >  Operasi dan penyelenggaraan  >  Bagaimana untuk memasang pelayan nginx dan mengkonfigurasi pengimbangan beban di bawah Linux

Bagaimana untuk memasang pelayan nginx dan mengkonfigurasi pengimbangan beban di bawah Linux

WBOY
WBOYke hadapan
2023-05-13 23:19:04962semak imbas

1. Sediakan persekitaran ujian

Persekitaran ujian di sini ialah dua mesin maya lubuntu 19.04 yang dipasang melalui kotak maya Kaedah pemasangan sistem Linux tidak akan diterangkan secara terperinci.

Untuk memastikan akses bersama antara dua mesin maya Linux, sebagai tambahan kepada kaedah nat lalai, konfigurasi rangkaian mesin maya juga menggunakan kaedah rangkaian rangkaian dalaman (dalaman) yang disediakan oleh perisian kotak maya.

Selain itu, kad rangkaian yang dikaitkan dengan "rangkaian dalaman" dalam dua mesin maya perlu diikat ke alamat IP statik segmen rangkaian yang sama, kemudian kedua-dua hos membentuk rangkaian kawasan setempat dan boleh berkomunikasi secara langsung antara satu sama lain.

Konfigurasi rangkaian

Buka perisian kotak maya, masukkan antara muka tetapan dua mesin maya dan tambah sambungan rangkaian dengan kaedah sambungan rangkaian dalaman seperti berikut (dua Buat konfigurasi yang sama untuk setiap mesin maya):

Bagaimana untuk memasang pelayan nginx dan mengkonfigurasi pengimbangan beban di bawah Linux

Rangkaian dalaman

Log masuk ke sistem mesin maya dan gunakan arahan ip addr untuk melihat maklumat sambungan Rangkaian semasa:

$ ip addr
...
2: enp0s3: <broadcast,multicast,up,lower_up> mtu 1500 qdisc fq_codel state up group default qlen 1000
 link/ether 08:00:27:38:65:a8 brd ff:ff:ff:ff:ff:ff
 inet 10.0.2.15/24 brd 10.0.2.255 scope global dynamic noprefixroute enp0s3
  valid_lft 86390sec preferred_lft 86390sec
 inet6 fe80::9a49:54d3:2ea6:1b50/64 scope link noprefixroute
  valid_lft forever preferred_lft forever
3: enp0s8: <broadcast,multicast,up,lower_up> mtu 1500 qdisc fq_codel state up group default qlen 1000
 link/ether 08:00:27:0d:0b:de brd ff:ff:ff:ff:ff:ff
 inet6 fe80::2329:85bd:937e:c484/64 scope link noprefixroute
  valid_lft forever preferred_lft forever

Anda boleh melihat bahawa kad rangkaian enp0s8 belum terikat pada alamat ipv4 pada masa ini, dan anda perlu menentukan IP statik secara manual untuk itu.

Perlu diambil perhatian bahawa bermula dari versi ubuntu 17.10, alat baharu yang dipanggil netplan diperkenalkan dan fail konfigurasi rangkaian asal /etc/network/interfaces tidak lagi sah.

Jadi apabila menetapkan IP statik untuk kad rangkaian, anda perlu mengubah suai fail konfigurasi /etc/netplan/01-network-manager-all.yaml contohnya seperti berikut:

network:
 version: 2
 renderer: networkmanager
  ethernets:
  enp0s8:
   dhcp4: no
   dhcp6: no
   addresses: [192.168.1.101/24]
#   gateway4: 192.168.1.101
#   nameservers:
#     addresses: [192.168.1.101, 8.8.8.8]

Memandangkan kedua-dua hos berada dalam subnet yang sama , get laluan dan pelayan dns masih boleh mengakses satu sama lain walaupun ia tidak dikonfigurasikan. Komen item konfigurasi yang sepadan buat masa ini (anda boleh cuba membina pelayan dns anda sendiri kemudian).

Selepas pengeditan selesai, jalankan arahan sudo netplan apply  dan IP statik yang dikonfigurasikan sebelum ini akan berkuat kuasa.

$ ip addr
...
3: enp0s8: <broadcast,multicast,up,lower_up> mtu 1500 qdisc fq_codel state up group default qlen 1000
  link/ether 08:00:27:0d:0b:de brd ff:ff:ff:ff:ff:ff
  inet 192.168.1.101/24 brd 192.168.1.255 scope global noprefixroute enp0s8
    valid_lft forever preferred_lft forever
  inet6 fe80::a00:27ff:fe0d:bde/64 scope link
    valid_lft forever preferred_lft forever

Log masuk ke mesin maya lain dan lakukan operasi yang sama (perhatikan bahawa item alamat dalam fail konfigurasi ditukar kepada [192.168.1.102/24]). Konfigurasi rangkaian kedua-dua mesin maya telah selesai.

Pada masa ini, terdapat pelayan mesin maya Linux1 dengan alamat IP 192.168.1.101; pelayan mesin maya Linux2 dengan alamat IP 192.168.1.102. Kedua-dua hos boleh mengakses satu sama lain. Ujiannya adalah seperti berikut:

starky@server1:~$ ping 192.168.1.102 -c 2
ping 192.168.1.102 (192.168.1.102) 56(84) bytes of data.
64 bytes from 192.168.1.102: icmp_seq=1 ttl=64 time=0.951 ms
64 bytes from 192.168.1.102: icmp_seq=2 ttl=64 time=0.330 ms
--- 192.168.1.102 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 2ms
rtt min/avg/max/mdev = 0.330/0.640/0.951/0.311 ms
skitar@server2:~$ ping 192.168.1.101 -c 2
ping 192.168.1.101 (192.168.1.101) 56(84) bytes of data.
64 bytes from 192.168.1.101: icmp_seq=1 ttl=64 time=0.223 ms
64 bytes from 192.168.1.101: icmp_seq=2 ttl=64 time=0.249 ms
--- 192.168.1.101 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 29ms
rtt min/avg/max/mdev = 0.223/0.236/0.249/0.013 ms

2. Pasang pelayan nginx

Terdapat dua cara utama untuk memasang nginx:

  • Program binari pra-penyusunan. Ini adalah kaedah pemasangan yang paling mudah dan terpantas Semua sistem pengendalian arus perdana boleh dipasang melalui pengurus pakej (seperti apt-get ubuntu). Kaedah ini akan memasang hampir semua modul rasmi atau pemalam.

  • Kompil dan pasang daripada kod sumber. Kaedah ini lebih fleksibel daripada yang pertama, dan anda boleh memilih modul atau pemalam pihak ketiga yang perlu dipasang.

Contoh ini tidak mempunyai keperluan khas, jadi pilih kaedah pemasangan pertama secara langsung. Perintahnya adalah seperti berikut:

$ sudo apt-get update
$ sudo apt-get install nginx

Selepas pemasangan berjaya, gunakan perintah  systemctl status nginx  untuk menyemak status berjalan perkhidmatan nginx:

$ systemctl status nginx
● nginx.service - a high performance web server and a reverse proxy server
  loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: en
  active: active (running) since tue 2019-07-02 01:22:07 cst; 26s ago
   docs: man:nginx(8)
 main pid: 3748 (nginx)
  tasks: 2 (limit: 1092)
  memory: 4.9m
  cgroup: /system.slice/nginx.service
      ├─3748 nginx: master process /usr/sbin/nginx -g daemon on; master_pro
      └─3749 nginx: worker process

Gunakan perintah curl -i 127.0.0.1  untuk mengesahkan sama ada pelayan web boleh diakses seperti biasa:

$ curl -i 127.0.0.1
http/1.1 200 ok
server: nginx/1.15.9 (ubuntu)
...

3 Konfigurasi pengimbangan beban

Pengimbangan beban (load-balancing) bermaksud untuk memperuntukkan beban kepada beberapa unit operasi mengikut tertentu. peraturan untuk meningkatkan ketersediaan dan kelajuan perkhidmatan.

Gambar rajah contoh mudah adalah seperti berikut:

Bagaimana untuk memasang pelayan nginx dan mengkonfigurasi pengimbangan beban di bawah Linux

imbangan beban

Sebagai contoh, aplikasi tapak web digunakan pada kelompok pelayan terdiri daripada berbilang hos. Pelayan pengimbangan beban terletak di antara pengguna akhir dan kluster pelayan Ia bertanggungjawab untuk menerima trafik akses pengguna akhir dan mengedarkan akses pengguna kepada hos pelayan belakang mengikut peraturan tertentu. meningkatkan kelajuan tindak balas dalam keadaan konkurensi yang tinggi.

Pelayan pengimbangan beban

nginx boleh mengkonfigurasi pengimbangan beban melalui pilihan huluan. Di sini, pelayan mesin maya1 digunakan sebagai pelayan pengimbangan beban.

Ubah suai fail konfigurasi tapak lalai pada serve1 ( sudo vim /etc/nginx/sites-available/default ) kepada kandungan berikut:

upstream backend {
  server 192.168.1.102:8000;
  server 192.168.1.102;
}
server {
  listen 80;

  location / {
    proxy_pass http://backend;
  }
}

Untuk tujuan ujian, pada masa ini hanya terdapat dua mesin maya. pelayan1 (192.168.1.101) telah digunakan sebagai pelayan pengimbangan beban, jadi pelayan2 (192.168.1.102) digunakan sebagai pelayan aplikasi.

Di sini kami menggunakan fungsi hos maya nginx untuk "mensimulasikan" 192.168.1.102 dan 192.168.1.102:8000 sebagai dua pelayan aplikasi yang berbeza.

Pelayan Aplikasi

Ubah suai fail konfigurasi tapak lalai pada pelayan2 ( sudo vim /etc/nginx/sites-available/default ) kepada kandungan berikut:

server {
    listen 80;

    root /var/www/html;

    index index.html index.htm index.nginx-debian.html;

    server_name 192.168.1.102;

    location / {
        try_files $uri $uri/ =404;
    }
}

Buat fail index.html dalam direktori /var/www/html sebagai halaman indeks tapak lalai Kandungannya adalah seperti berikut:

<html>
  <head>
    <title>index page from server1</title>
  </head>
  <body>
    <h1>this is server1, address 192.168.1.102.</h1>
  </body>
</html>

Jalankan arahan sudo systemctl restart nginx  untuk. mulakan semula perkhidmatan nginx Pada masa ini, akses Anda boleh mendapatkan halaman index.html yang baru anda buat:

$ curl 192.168.1.102
<html>
  <head>
    <title>index page from server1</title>
  </head>
  <body>
    <h1>this is server1, address 192.168.1.102.</h1>
  </body>
</html>

配置“另一台主机”上的站点,在 server2 上创建 /etc/nginx/sites-available/server2 配置文件,内容如下:

server {
    listen 8000;

    root /var/www/html;

    index index2.html index.htm index.nginx-debian.html;

    server_name 192.168.1.102;

    location / {
        try_files $uri $uri/ =404;
    }
}

注意监听端口和 index 页面的配置变化。在 /var/www/html 目录下创建 index2.html 文件,作为 server2 站点的 index 页面,内容如下:

<html>
  <head>
    <title>index page from server2</title>
  </head>
  <body>
    <h1>this is server2, address 192.168.1.102:8000.</h1>
  </body>
</html>

ps:为了测试目的,default 站点和 server2 站点配置在同一个主机 server2 上,且页面稍有不同。实际环境中通常将这两个站点配置在不同的主机上,且内容一致。

运行 sudo ln -s /etc/nginx/sites-available/server2 /etc/nginx/sites-enabled/ 命令启用刚刚创建的 server2 站点。

重启 nginx 服务,此时访问  即可获取刚刚创建的 index2.html 页面:

$ curl 192.168.1.102:8000
<html>
  <head>
    <title>index page from server2</title>
  </head>
  <body>
    <h1>this is server2, address 192.168.1.102:8000.</h1>
  </body>
</html>

负载均衡测试

回到负载均衡服务器即虚拟机 server1 上,其配置文件中设置的 反向代理 url 为  。

由于未曾配置域名解析服务,无法将 urlhttp://backend 定位到正确的位置。

可以修改 server1 上的 /etc/hosts 文件,添加如下一条记录:

127.0.0.1 backend

即可将该域名解析到本地 ip ,完成对负载均衡服务器的访问。

重启 nginx 服务,在 server1 上访问 ,效果如下:

$ curl http://backend
<html>
  <head>
    <title>index page from server1</title>
  </head>
  <body>
    <h1>this is server1, address 192.168.1.102.</h1>
  </body>
</html>
$ curl http://backend
<html>
  <head>
    <title>index page from server2</title>
  </head>
  <body>
    <h1>this is server2, address 192.168.1.102:8000.</h1>
  </body>
</html>
$ curl http://backend
<html>
  <head>
    <title>index page from server1</title>
  </head>
  <body>
    <h1>this is server1, address 192.168.1.102.</h1>
  </body>
</html>
$ curl http://backend
<html>
  <head>
    <title>index page from server2</title>
  </head>
  <body>
    <h1>this is server2, address 192.168.1.102:8000.</h1>
  </body>
</html>

从输出中可以看出,server1 对负载均衡服务器 的访问,完成了对应用服务器 server2 上两个 web 站点的 轮询 ,起到负载均衡的作用。

四、负载均衡方法

nginx 开源版本提供四种负载均衡的实现方式,简单介绍如下。

1. round robin

用户请求 均匀 地分配给后端服务器集群(可以通过 weight 选项设置轮询的 权重 ),这是 nginx 默认使用的负载均衡方式:

upstream backend {
  server backend1.example.com weight=5;
  server backend2.example.com;
}

2. least connections

用户请求会优先转发给集群中当前活跃连接数最少的服务器。同样支持 weight 选项。

upstream backend {
  least_conn;
  server backend1.example.com;
  server backend2.example.com;
}

3. ip hash

用户请求会根据 客户端 ip 地址 进行转发。即该方式意图保证某个特定的客户端最终会访问 同一个 服务器主机。

upstream backend {
  ip_hash;
  server backend1.example.com;
  server backend2.example.com;
}

4. generic hash

用户请求会根据一个 自定义键值 确定最终转发的目的地,该键值可以是字符串、变量或者组合(如源 ip 和端口号)。

upstream backend {
  hash $request_uri consistent;
  server backend1.example.com;
  server backend2.example.com;
}

权重

参考下面的示例配置:

upstream backend {
  server backend1.example.com weight=5;
  server backend2.example.com;
  server 192.0.0.1 backup;
}

默认权重(weight)为 1 。 backup 服务器 只有在所有其他服务器全部宕机的情况下才会接收请求。

如上面的示例,每 6 个请求会有 5 个转发给 backend1.example.com,1 个转发给 backend2.example.com。只有当 backend1 和 backend2 全部宕机时,192.0.0.1 才会接收并处理请求。

Atas ialah kandungan terperinci Bagaimana untuk memasang pelayan nginx dan mengkonfigurasi pengimbangan beban di bawah Linux. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam