nginx部署基於http負載均衡器
nginx跨多個應用程式例項的負載平衡是一種用於最佳化資源利用率,最大化吞吐量,減少延遲和確保容錯配置的常用技術。
環境介紹
配置nginx負載均衡器因會用到多臺伺服器來進行,所以下面我會用到docker,具體docker的使用請移步 docker實戰
-
系統環境:
root@ubuntu:~# lsb_release -a #檢視系統版本 No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 19.10 Release: 19.10 Codename: eoan root@ubuntu:~# uname -a #檢視系統是多少位 Linux ubuntu 5.3.0-18-generic #19-Ubuntu SMP Tue Oct 8 20:14:06 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
-
docker版本和相關作業系統版本
docker版本: root@ubuntu:~# docker --version #檢視docker版本 Docker version 19.03.3, build a872fc2f86 作業系統版本: [root@57b669db1de1 /]# cat /etc/redhat-release #檢視系統版本 CentOS Linux release 8.0.1905 (Core) [root@57b669db1de1 /]# uname -a Linux 57b669db1de1 5.3.0-18-generic #19-Ubuntu SMP Tue Oct 8 20:14:06 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
-
軟體版本:
nginx版本: root@ubuntu:~# nginx -v 檢視nginx版本 nginx version: nginx/1.16.1 (Ubuntu) docker中nginx版本: [root@57b669db1de1 /]# nginx -v #檢視nginx版本 nginx version: nginx/1.14.1
安裝nginx
具體nginx的安裝請參考 nginx安裝部署
-
安裝依賴軟體
更新軟體包: root@ubuntu:~# apt-get update 安裝依賴軟體: root@ubuntu:~# apt -y install openssl libssl-dev libpcre3 libpcre3-dev zlib1g-dev make gcc
-
編譯安裝nginx
下載nginx: root@ubuntu:~# wget http:#nginx.org/download/nginx-1.17.6.tar.gz 解壓: root@ubuntu:/opt# tar zxf nginx-1.17.6.tar.gz root@ubuntu:/opt# cd nginx-1.17.6/ root@ubuntu:/opt/nginx-1.17.6# ls #列出目錄 auto CHANGES CHANGES.ru conf configure contrib html LICENSE man README src root@ubuntu:/opt/nginx-1.17.6# 配置: root@ubuntu:/opt/nginx-1.17.6# ./configure --prefix=/usr/local/nginx 編譯以及部署: root@ubuntu:/opt/nginx-1.17.6# make && make install root@ubuntu:/opt/nginx-1.17.6# cd /usr/local/nginx/ root@ubuntu:/usr/local/nginx# ls conf html logs sbin 啟動: root@ubuntu:/usr/local/nginx# ln sbin/nginx /usr/local/sbin/ #建立nginx軟連線,設定為命令 root@ubuntu:/usr/local/nginx# nginx #啟動nginx root@ubuntu:/usr/local/nginx# netstat -anpl | grep nginx #檢視nginx埠是否開啟 root@ubuntu:/usr/local/nginx# lsof -i:80 #檢視80埠是否開啟
docker安裝nginx
-
建立容器
下載映象: root@ubuntu:~# docker pull registry.cn-beijing.aliyuncs.com/blxt/centos 建立容器並啟動: root@ubuntu:~# root@ubuntu:~# docker run -itd --name nginx1 --privileged registry.cn-beijing.aliyuncs.com/blxt/centos /sbin/init root@ubuntu:~# docker ps -a #檢視容器是否建立並啟動 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAME 6801d55682a3 registry.cn-beijing.aliyuncs.com/blxt/centos "/sbin/init" 5 minutes ago Up 5 minutes nginx1 相同方法建立第二個容器: root@ubuntu:~# docker run -itd --name nginx2 --privileged registry.cn-beijing.aliyuncs.com/blxt/centos /sbin/init root@ubuntu:~# docker ps -a root@ubuntu:~# root@ubuntu:~# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1d31d3fc0ec1 registry.cn-beijing.aliyuncs.com/blxt/centos "/sbin/init" 4 minutes ago Up 4 minutes nginx2 6801d55682a3 registry.cn-beijing.aliyuncs.com/blxt/centos "/sbin/init" 5 minutes ago Up 5 minutes nginx1 連線到容器: root@ubuntu:~# docker exec -it nginx1 /bin/bash root@ubuntu:~# docker exec -it nginx2 /bin/bash [root@6801d55682a3 /]# hostname nginx1 #更改主機名稱 [root@6801d55682a3 /]# bash #使更改的名稱生效 [root@1d31d3fc0ec1 /]# hostname nginx2 [root@1d31d3fc0ec1 /]# bash
-
安裝nginx
更新軟體包: [root@nginx1 /]# yum clean all #清空快取 [root@nginx1 /]# yum makecache #更新軟體包 安裝nginx: [root@nginx1 /]# yum -y install nginx [root@nginx1 /]# rpm -qa | grep nginx #檢視是否已經安裝 啟動nginx: [root@nginx1 /]# systemctl start nginx [root@nginx1 /]# netstat -anpl | grep nginx #檢視nginxnn埠是否開啟 [root@nginx1 /]# lsof -i:80 #檢視80埠是否開啟 安裝第二個nginx使用相同方法即可!此處省略!!! 訪問nginx: [root@nginx1 /]# curl 127.0.0.1
-
修改網頁內容
檢視網頁存在目錄: [root@nginx1 nginx]# more nginx.conf #檢視配置檔案 在配置檔案中找到下面root行,後面目錄即網頁檔案存放目錄 root /usr/share/nginx/html; [root@nginx1 html]# cd /usr/share/nginx/html/ [root@nginx1 html]# ls #列出目錄內容 404.html 50x.html index.html nginx-logo.png poweredby.png [root@nginx1 html]# echo nginx1 > index.html #清空nginx主頁檔案內容,並重新寫入內容為nginx1 nginx2如同,注意不要設定一樣的主頁內容 訪問nginx: [root@nginx1 html]# curl 127.0.0.1 nginx1 [root@nginx2 ~]# curl 127.0.0.1 nginx2
-
修改配置檔案
nginx1修改內容如下: server { listen 80; server_name //設定域名 #charset koi8-r; #access_log logs/host.access.log main; location / { root html; index index.html index.htm; } } nginx2修改內容如下: server { listen 80; server_name //設定域名 #charset koi8-r; #access_log logs/host.access.log main; location / { root html; index index.html index.htm; } }
配置http負載均衡器
要開始使用NGINX Plus或NGINX開源對一組伺服器的HTTP流量進行負載均衡,使用upstream指令定義該組,該指令放置在http上下文中,proxy_pass指令用來轉發請求到後端一般指定在loction上下文中
基本配置方法:
http { upstream nginx { #test為組名 server #server用來指定後端伺服器的訪問地址,一般指定域名、ip、埠,域名和ip二選一,埠可忽略 server #weight指定權重值 server #down用來停止對此伺服器的轉發 ......省略其他配置 } server{ location / { proxy_pass #為轉發那個組的後端伺服器 ......省略其他配置 } ......省略其他配置 }}
nginx做負載均衡官方提供了4種方法,下面逐一介紹這四種方法:
-
Round Robin
請求在伺服器之間平均分配,同時考慮了伺服器權重。預設情況下使用此方法(沒有啟用它的指令)
預設配置就是Round Robin,配置方法:
http { upstream nginx { #test為組名 server #server用來指定後端伺服器的訪問地址 server #weight指定權重值 ......省略其他配置 } server{ location / { proxy_pass #為轉發那個組的後端伺服器 ......省略其他配置 } ......省略其他配置 }}
-
最少連線
將活動連線最少的請求傳送到伺服器,也是在考慮到伺服器的權重問題才設定的這種方法
配置方法:
http { upstream nginx { #test為組名 less_conn ; server #server用來指定後端伺服器的訪問地址 server #weight指定權重值 ......省略其他配置 } server{ location / { proxy_pass #http:#nginx為轉發那個組的後端伺服器 ......省略其他配置 } ......省略其他配置 }}
-
ip_hash
從客戶端IP地址確定向其傳送請求的伺服器。在這種情況下,可以使用IPv4地址的前三個八位位組或整個IPv6地址來計算雜湊值。該方法保證了來自同一地址的請求將到達同一伺服器,除非它不可用。
配置方法:
http { upstream nginx { #test為組名 ip_hash ; server #server用來指定後端伺服器的訪問地址 server #weight指定權重值 ......省略其他配置 } server{ location / { proxy_pass #http:#nginx為轉發那個組的後端伺服器 ......省略其他配置 } ......省略其他配置 }}
-
hash
向其傳送請求的伺服器是根據使用者定義的鍵確定的,該鍵可以是文字字串,變數或組合。
配置方法:
http { upstream nginx { #test為組名 hash $request_uri consistent; server #server用來指定後端伺服器的訪問地址 server #weight指定權重值 ......省略其他配置 } server{ location / { proxy_pass #為轉發那個組的後端伺服器 ......省略其他配置 } ......省略其他配置 }}
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69956585/viewspace-2668730/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Kuberntes部署MetalLB負載均衡器負載
- nginx負載均衡原理分析到手動編寫簡易負載均衡器Nginx負載
- Nginx+Tomcat部署負載均衡NginxTomcat負載
- 理解 Nginx HTTP 代理, 負載均衡, Buffering, CachingNginxHTTP負載
- 微服務負載均衡器 Ribbon微服務負載
- 微服務負載均衡器 LoadBalancer微服務負載
- 做了反向代理和負載均衡的nginx配置檔案簡單示例(nginx.conf) HTTP負載均衡/TCP負載均衡負載NginxHTTPTCP
- 基於滴滴雲DC2+Nginx搭建負載均衡方案Nginx負載
- Nginx反向代理負載均衡的容器化部署Nginx負載
- DPVS - 小米高效能負載均衡器負載
- HAProxy高效能軟負載均衡器負載
- nginx 部署vue http、httpsNginxVueHTTP
- nginx負載均衡Nginx負載
- NGINX 負載均衡Nginx負載
- 【Nginx】負載均衡Nginx負載
- Nginx負載配置Nginx負載
- 基於 CentOS 7 + Nginx + Tomcat 的負載均衡伺服器的搭建CentOSNginxTomcat負載伺服器
- 基於MySQL Cluster + LVS + KeepAlived部署負載均衡高可用架構MySql負載架構
- docker初體驗:docker部署nginx負載均衡叢集DockerNginx負載
- Go實現了一個負載均衡器Go負載
- 用 Rust 編寫 eBPF/XDP 負載均衡器RusteBPF負載
- Lambda@edge 實現負載均衡器功能負載
- nginx Win下實現簡單的負載均衡(1)nginx搭建部署Nginx負載
- 基於Docker + Consul + Nginx + Consul-template的服務負載均衡實現DockerNginx負載
- Nginx負載均衡模式Nginx負載模式
- 「知行學院」一節課搞懂負載均衡器負載
- Golang負載均衡器Balancer的原始碼解讀Golang負載原始碼
- nginx轉發swoole以及nginx負載Nginx負載
- 基於linux離線部署nginx,使用rpmLinuxNginx
- Nginx基於TCP/UDP埠的四層負載均衡(stream模組)配置梳理NginxTCPUDP負載
- 基於滴滴雲部署 HAProxy 實現 7 層和 4 層負載均衡負載
- Nginx+Tomcat負載均衡,動靜分離群集部署解析NginxTomcat負載
- Django筆記四十四之Nginx+uWSGI部署Django以及Nginx負載均衡操作Django筆記Nginx負載
- Eureka詳解系列(一)--先談談負載均衡器負載
- Nginx負載均衡高可用Nginx負載
- 012.Nginx負載均衡Nginx負載
- Nginx負載均衡詳解Nginx負載
- nginx實現負載均衡Nginx負載