本章從源碼安裝開始,如只看負載均衡部分,可以直接從第三節開始
將前端超高併發訪問轉發至後端多臺服務器進行處理,解決單個節點壓力過大,造成Web服務響應過慢,嚴重的情況下導致服務癱瘓,無法正常提供服務的問題。
負載均衡分爲四層負載均衡和七層負載均衡。
四層負載均衡
是工作在七層協議的第四層-傳輸層,主要工作是轉發。它在接收到客戶端的流量以後通過修改數據包的地址信息(目標地址和端口和源地址)將流量轉發到應用服務器。
七層負載均衡
是工作在七層協議的第七層-應用層,主要工作是代理。它首先會與客戶端建立一條完整的連接並將應用層的請求流量解析出來,再按照調度算法選擇一個應用服務器,並與應用服務器建立另外一條連接將請求發送過去。
一、環境
代理端:
IP:192.168.1.113
後端服務器:
IP:192.168.1.114
IP:192.168.1.115
系統:CentOS Linux release 7.7.1908 (Core)
二、源碼安裝nginx-1.18.0
1、使用國內阿里base與epel源
base源
[root@localhost ~]# curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
epel源
[root@localhost ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
[root@localhost ~]# yum clean all
[root@localhost ~]# yum makecache
2、安裝環境支持
[root@localhost ~]# yum install pcre-devel pcre gcc gcc-c++ openssl openssl-devel zlib-devel -y
3、下載源碼包
[root@localhost ~]# cd /usr/src/
[root@localhost src]# wget http://nginx.org/download/nginx-1.18.0.tar.gz
4、編譯安裝
創建用戶組
[root@localhost ~]# useradd -s /sbin/nologin -r www
預編譯
[root@localhost nginx-1.18.0]#./configure \
--user=www \
--group=www \
--prefix=/usr/local/nginx \
--with-http_stub_status_module \
--with-http_ssl_module \
--with-http_mp4_module \
--with-http_realip_module \
--with-pcre \
--with-http_gunzip_module \
--with-http_gzip_static_module \
--with-stream
編譯
[root@localhost nginx-1.18.0]#make
[root@localhost nginx-1.18.0]#make install
配置快捷啓動
[root@localhost nginx-1.18.0]# alias nginx="/usr/local/nginx/sbin/nginx"
啓動
[root@localhost nginx-1.18.0]# nginx
5、關閉selinux及配置防火牆
關閉selinux
[root@localhost nginx-1.18.0]# vim /etc/selinux/config
SELINUX=disabled
[root@localhost nginx-1.18.0]# setenforce 0
配置防火牆端口
[root@localhost nginx-1.18.0]# firewall-cmd --zone=public --add-port=80/tcp --permanent #永久開啓80端口
[root@localhost nginx-1.18.0]# firewall-cmd --reload #重新加載防火牆
[root@localhost nginx-1.18.0]# firewall-cmd --zone=public --list-ports #查看防火牆開啓了哪些端口
訪問192.168.1.113
三、配置負載均衡配置詳解-7層
環境
代理端:IP:192.168.1.113
後端服務器:
IP:192.168.1.114
IP:192.168.1.115
基礎配置
修改主網頁index.html內容
[root@localhost ~]# echo "This is 113_proxy" >/usr/local/nginx/html/index.html #113代理服務器,後端服務器這裏把113_proxy改成114與115
[root@localhost ~]# mkdir /usr/local/nginx/conf/vhost
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
include /usr/local/nginx/conf/vhost/*.conf;
並註釋掉server {}塊
192.168.1.114配置文件
[root@localhost nginx-1.18.0]# vim /usr/local/nginx/conf/vhost/114.yjy.com.conf
server {
listen 80;
server_name 114.yjy.com;
root html;
index index.html;
}
192.168.1.115配置文件
[root@localhost nginx-1.18.0]# vim /usr/local/nginx/conf/vhost/115.yjy.com.conf
server {
listen 80;
server_name 115.yjy.com;
root html;
index index.html;
}
1、nginx輪詢加權重
代理服務器113配置
[root@localhost ~]# vim /usr/local/nginx/conf/vhost/www.yjy.com.conf
upstream web {
server 192.168.1.114 weight=4;
server 192.168.1.115 weight=1;
}
server {
listen 80;
server_name www.yjy.com;
location /{
proxy_pass http://web;
}
}
效果:後端服務器被訪問的比例是4:1
[root@localhost ~]# while true;do curl www.yjy.com;sleep 1;done
注:當其中一臺後端服務器down機時,nginx默認跳轉至另一臺。
2、nginx -hash選擇
通過客戶端ip進行hash,再通過hash值選擇後端server,之後會一直訪問其中一臺,直至這一臺down機
[root@localhost ~]# vim /usr/local/nginx/conf/vhost/www.yjy.com.conf
upstream web {
ip_hash;
location /{
server 192.168.1.114 weight=1 max_fails=3 fail_timeout=10s; 3次失敗連接,10後重連,重連失敗後,將不會再次重連
server 192.168.1.115 weight=1;
}
server {
listen 80;
server_name www.yjy.com;
location /{
proxy_pass http://web;
proxy_next_upstream error http_404 http_502; 當出現404或502時,也會跳至另一臺
}
}
效果:通過hash值,單一訪問一臺
3、URL-hash
通過請求url進行hash,再通過hash值選擇後端server
[root@localhost ~]# vim /usr/local/nginx/conf/vhost/www.yjy.com.conf
server {
upstream web {
hash $repuest_uri consistent;
server 192.168.1.114 weight=1 max_fails=3 fail_timeout=10s;
server 192.168.1.115 weight=1;
}
server {
listen 80;
server_name www.yjy.com;
location /{
proxy_pass http://web;
}
}
效果
4、備用服務器
當後端服務器掛掉時,由備用服務器頂上
注:這裏不能與hash同用
upstream web {
server 192.168.1.114 weight=1 max_fails=3 fail_timeout=9s;
server 192.168.1.115 weight=1 backup;
}
server {
listen 80;
server_name www.yjy.com;
location /{
proxy_pass http://web;
}
}
效果:
四、配置負載均衡配置詳解-四層
工作在七層協議的第四層-傳輸層,主要工作是轉發。它在接收到客戶端的流量以後通過修改數據包的地址信息(目標地址和端口和源地址)將流量轉發到應用服務器,前端服務器主要配置stream{}和upstream
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
events {
worker_connections 1024;
}
stream {
upstream web {
server 192.168.1.114:80 weight=1 max_fails=3 fail_timeout=9s;
server 192.168.1.115:80 weight=1 backup;
}
server {
listen 80;
proxy_pass web;
}
}
效果:
---------------------end