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  www.nginx1.com;			//設置域名
    
     #charset koi8-r;
    
     #access_log  logs/host.access.log  main;
    
     location / {
         root   html;
         index  index.html index.htm;
     	}
     }
     
     nginx2修改內容如下:
      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指令用來轉發請求到後端一般指定在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用來停止對此服務器的轉發
        ......省略其他配置
    }
    server{
		location / {
			proxy_pass http://nginx;		#http://nginx爲轉發那個組的後端服務器
			......省略其他配置
		}
		......省略其他配置
	}
}

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爲轉發那個組的後端服務器
   		......省略其他配置
   	}
   	......省略其他配置
   }
}
  • 最少連接

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

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

從客戶端IP地址確定向其發送請求的服務器。在這種情況下,可以使用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爲轉發那個組的後端服務器
   		......省略其他配置
   	}
   	......省略其他配置
   }
}
  • hash

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

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爲轉發那個組的後端服務器
  		......省略其他配置
  	}
  	......省略其他配置
  }
}
發佈了25 篇原創文章 · 獲贊 45 · 訪問量 7180
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章