溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎樣進行nginx部署基于http的負載均衡器

發(fā)布時間:2021-11-08 16:54:08 來源:億速云 閱讀:139 作者:柒染 欄目:建站服務器

怎樣進行nginx部署基于http的負載均衡器,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

nginx跨多個應用程序實例的負載平衡是一種用于優(yōu)化資源利用率,最大化吞吐量,減少延遲和確保容錯配置的常用技術。

環(huán)境介紹

配置nginx負載均衡器因會用到多臺服務器來進行,所以下面我會用到docker,具體docker的使用請移步 docker實戰(zhàn)

  • 系統(tǒng)環(huán)境:

     root@ubuntu:~# lsb_release  -a			#查看系統(tǒng)版本
     No LSB modules are available.
     Distributor ID:	Ubuntu
     Description:	Ubuntu 19.10
     Release:	19.10
     Codename:	eoan
     root@ubuntu:~# uname -a			#查看系統(tǒng)是多少位
     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版本和相關操作系統(tǒng)版本

     docker版本:
     root@ubuntu:~# docker --version			#查看docker版本
     Docker version 19.03.3, build a872fc2f86
     操作系統(tǒng)版本:
     [root@57b669db1de1 /]# cat /etc/redhat-release 		#查看系統(tǒng)版本
     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/		#創(chuàng)建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

  • 創(chuàng)建容器

     下載鏡像:
     root@ubuntu:~# docker pull registry.cn-beijing.aliyuncs.com/blxt/centos
     創(chuàng)建容器并啟動:
     root@ubuntu:~# 
     root@ubuntu:~# docker run -itd --name nginx1 --privileged  registry.cn-beijing.aliyuncs.com/blxt/centos /sbin/init
     root@ubuntu:~# docker ps -a		#查看容器是否創(chuàng)建并啟動
     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
     
     相同方法創(chuàng)建第二個容器:
     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		#查看是否已經(jīng)安裝
     啟動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
  • 修改網(wǎng)頁內(nèi)容

     查看網(wǎng)頁存在目錄:
     [root@nginx1 nginx]# more nginx.conf		#查看配置文件
     在配置文件中找到下面root行,后面目錄即網(wǎng)頁文件存放目錄
     root         /usr/share/nginx/html;
     [root@nginx1 html]# cd /usr/share/nginx/html/
     [root@nginx1 html]# ls		#列出目錄內(nèi)容
     404.html  50x.html  index.html	nginx-logo.png	poweredby.png
     [root@nginx1 html]# echo nginx1 > index.html		#清空nginx主頁文件內(nèi)容,并重新寫入內(nèi)容為nginx1
     nginx2如同,注意不要設置一樣的主頁內(nèi)容
     訪問nginx:
     [root@nginx1 html]# curl  127.0.0.1
     nginx1
     [root@nginx2 ~]# curl 127.0.0.1
     nginx2
  • 修改配置文件

     nginx1修改內(nèi)容如下:
      server {
     listen       80;
     server_name  www.nginx1.com;			//設置域名
     #charset koi8-r;
     #access_log  logs/host.access.log  main;
     location / {
         root   html;
         index  index.html index.htm;
     	}
     }
     
     nginx2修改內(nèi)容如下:
      server {
     listen       80;
     server_name  www.nginx2.com;			//設置域名
     #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指令用來轉發(fā)請求到后端一般指定在loction上下文中
基本配置方法:

http {
    upstream nginx {			#test為組名
        server www.nginx1.com ;		#server用來指定后端服務器的訪問地址,一般指定域名、ip、端口,域名和ip二選一,端口可忽略
        server www.nginx2.com weight=5;		#weight指定權重值
        server www.nginx3.com down;			#down用來停止對此服務器的轉發(fā)
        ......省略其他配置    }
    server{
		location / {
			proxy_pass http://nginx;		#http://nginx為轉發(fā)那個組的后端服務器
			......省略其他配置		}
		......省略其他配置	}}

nginx做負載均衡官方提供了4種方法,下面逐一介紹這四種方法:

  • Round Robin

請求在服務器之間平均分配,同時考慮了服務器權重。默認情況下使用此方法(沒有啟用它的指令)
默認配置就是Round Robin,配置方法:

http {
   upstream nginx {			#test為組名
       server www.nginx1.com ;		#server用來指定后端服務器的訪問地址
       server www.nginx2.com ;		#weight指定權重值
       ......省略其他配置   }
   server{
   	location / {
   		proxy_pass http://nginx;		#http://nginx為轉發(fā)那個組的后端服務器
   		......省略其他配置   	}
   	......省略其他配置   }}
  • 最少連接

將活動連接最少的請求發(fā)送到服務器,也是在考慮到服務器的權重問題才設置的這種方法
配置方法:

http {
   upstream nginx {			#test為組名
   	   less_conn ; 
       server www.nginx1.com ;		#server用來指定后端服務器的訪問地址
       server www.nginx2.com ;		#weight指定權重值
       ......省略其他配置   }
   server{
   	location / {
   		proxy_pass http://nginx;		#http:#nginx為轉發(fā)那個組的后端服務器
   		......省略其他配置   	}
   	......省略其他配置   }}
  • ip_hash

從客戶端IP地址確定向其發(fā)送請求的服務器。在這種情況下,可以使用IPv4地址的前三個八位位組或整個IPv6地址來計算哈希值。該方法保證了來自同一地址的請求將到達同一服務器,除非它不可用。
配置方法:

http {
   upstream nginx {			#test為組名
   	   ip_hash ; 
       server www.nginx1.com ;		#server用來指定后端服務器的訪問地址
       server www.nginx2.com ;		#weight指定權重值
       ......省略其他配置   }
   server{
   	location / {
   		proxy_pass http://nginx;		#http:#nginx為轉發(fā)那個組的后端服務器
   		......省略其他配置   	}
   	......省略其他配置   }}
  • hash

向其發(fā)送請求的服務器是根據(jù)用戶定義的鍵確定的,該鍵可以是文本字符串,變量或組合。
配置方法:

http {
  upstream nginx {			#test為組名
  	  hash $request_uri consistent;
      server www.nginx1.com ;		#server用來指定后端服務器的訪問地址
      server www.nginx2.com ;		#weight指定權重值
      ......省略其他配置  }
  server{
  	location / {
  		proxy_pass http://nginx;		#http://nginx為轉發(fā)那個組的后端服務器
  		......省略其他配置  	}
  	......省略其他配置  }}

看完上述內(nèi)容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業(yè)資訊頻道,感謝您對億速云的支持。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI