01. 準備好lb01 10.0.0.5 安裝好nginx 1.10.3 編譯參數和web01上面同樣html
02. 準備好三臺web服務器,三臺web服務器安裝好nginx便可nginx
web01(10.0.0.8) web02(10.0.0.7) web03(10.0.0.9)web
03. 安裝好wireshark軟件(羣文件中wireshark-win64-2.2.2)算法
集羣概念介紹說明:一堆幹相同事情的服務器,稱爲集羣windows
集羣概念的特色說明:高可用 高性能 (核心特色說明)後端
集羣的分類說明:負載均衡集羣 高可用集羣瀏覽器
負載均衡集羣概念說明:前面是負載均衡器,後面是集羣的節點緩存
負載均衡集羣:會出現雪崩效應服務器
高可用集羣:利用keepalived實現,一個機器宕機了,另外一個機器能夠頂替上架構
反向代理實現軟件爲:nginx(7層http https )層次進行回顧---Nginx支持7層,1.9之後也支持4層了
LVS支持4層,負載均衡架構學習haproxy(4層和7層 屬於反向代理軟件)
硬件負載均衡設備說明:
硬件和軟件使用場景(企業中軟硬件選型),中小型場景;
門戶網站 (LVS Tnginx)大型企業網站;
授課選擇Nginx進行負載均衡學習便可
nginx經常使用的模塊:
upstream 實現負載均衡和反向代理
proxy
rewrite
①. 安裝部署nginx過程(一鍵自動化安裝腳本)
yum install -y pcre-devel openssl-devel
mkdir -p /server/tools
cd /server/tools
wget -q http://nginx.org/download/nginx-1.10.2.tar.gz
ls -l nginx-1.10.2.tar.gz
useradd nginx -s /sbin/nologin -M
tar xf nginx-1.10.2.tar.gz
cd nginx-1.10.2
./configure --user=nginx --group=nginx --prefix=/application/nginx-1.10.2 --with-http_stub_status_module --with-http_ssl_module
make
make install
ln -s /application/nginx-1.10.2 /application/nginx
# 安裝部署完成進行檢查
/application/nginx/sbin/nginx -t
/application/nginx/sbin/nginx
curl localhost
# ②. 統一編寫nginx配置(web服務器端)
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
server {
listen 80;
server_name bbs.etiantian.org;
location / {
root html/bbs;
index index.html index.htm;
}
access_log logs/access_bbs.log main;
}
server {
listen 80;
server_name www.etiantian.org;
location / {
root html/www;
index index.html index.htm;
}
access_log logs/access_www.log main;
}
}
# ③. 統一nginx測試環境(web服務器端)
mkdir -p /application/nginx/html/{www,bbs}
for name in www bbs; do echo $name `hostname` >/application/nginx/html/$name/xiaoxinxin.html;done
for name in www bbs; do cat /application/nginx/html/$name/xiaoxinxin.html;done
說明:在瀏覽器測試前,重啓或啓動nginx服務程序(lb01 web01 web02)
# ④. 瀏覽器測試web服務(利用IP地址進行訪問)
curl www.etiantian.org/xiaoxinxin.html
curl bbs.etiantian.org/xiaoxinxin.html
curl -H host:www.etiantian.org 10.0.0.7/xiaoxinxin.html
curl -H host:bbs.etiantian.org 10.0.0.7/xiaoxinxin.html
curl -H host:www.etiantian.org 10.0.0.9/xiaoxinxin.html
curl -H host:bbs.etiantian.org 10.0.0.9/xiaoxinxin.html
# ⑤. 編輯配置負載服務文件
upstream模塊: 相似於一個池塘,將nginx節點放置到池塘中
至關於ansible的hosts文件定義
[www]
172.16.1.41
172.16.1.31
proxy模塊: 用池塘裏面的nginx節點,利用proxy進行調用
proxy_pass == ansible劇本中 - hosts:
- hosts: www
# 配置文件編寫內容
####lb01 nginx.conf
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream server_pools {
server 10.0.0.7:80;
server 10.0.0.8:80;
server 10.0.0.9:80;
}
server {
listen 80;
server_name bbs.etiantian.org;
location / {
proxy_pass http://server_pools;
}
}
}
## 負載均衡配置完畢後,進行負載測試
[root@lb01 ~]# curl 10.0.0.5/oldboy.html
01. 在lb01上訪問後端節點進行測試(curl)
02. 在lb01上訪問本地地址進行測試 (curl -H host:www.etiantian.org 10.0.0.5/xiaoxinxin.html)
03. 在瀏覽器上進行測試
a 緩存 b 域名解析
########lb01 nginx.conf multi hosts
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
upstream server_pools {
server 10.0.0.7 weight=1 max_fails=3 fail_timeout=10s;
server 10.0.0.8 weight=1 max_fails=3 fail_timeout=10s;
server 10.0.0.9 weight=1 max_fails=3 fail_timeout=10s;
}
server {
listen 80;
server_name www.etiantian.org;
location / {
proxy_pass http://server_pools;
}
access_log logs/access_www.log main;
}
server {
listen 80;
server_name blog.etiantian.org;
location / {
proxy_pass http://server_pools;
}
access_log logs/access_blog.log main;
}
}
## 說明:負載配置信息能夠參見官方說明 http://nginx.org/en/docs/http/load_balancing.html
####lb01 nginx.conf
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream server_pools {
server 10.0.0.7:80;
server 10.0.0.8:80;
}
server {
listen 80;
server_name bbs.etiantian.org
location / {
proxy_pass http://server_pools;
proxy_set_header Host $host
}
}
server {
listen 80;
server_name www.etiantian.org
location / {
proxy_pass http://server_pools;
proxy_set_header Host $host
}
}
}
說明:多虛擬主機信息配置完畢,須要修改windows的hosts文件進行域名映射
01. rr算法(默認調度算法)
輪循調度算法
02. wrr算法
權重調度算法--weight
03. ip_hash算法(靜態調度算法)
已經登陸的用戶,就分配到同一臺服務器,從而避免須要從新登陸,但會形成負載不均的結果
04. fair算法(動態調度算法)
哪臺服務器處理請求能力強,就優先分配給哪臺服務器
05. lest_conn算法
根據後端節點的鏈接數來決定分配狀況,哪一個機器鏈接數少,就分配給哪臺服務器。
更多的Nginx upstream模塊參數請參考:
http://nginx.org/en/docs/http/ngx_http_ups-tream_module.html
upstream模塊內參數 |
參數說明 |
server 10.0.10.8:80 |
負載均衡後面的 RS配置,能夠是 IP或域名,若是端□不寫,默認是80端口。 高併發場景下,ip可換成域名,經過 DNS作負載均衡 |
weigth = l |
表明服務器的權重,默認值是1。權重數字越大表示接受的清求比例越大 |
max_ fails=5 |
Nginx嘗試鏈接後端主機失敗的次數,這個值是配合 proxy_next_upstream、 fastcgi_next_upstreann 和 memcached_next_upstream 這三個參數來使用的。 當nginx接收後端服務器返回這三個參數定義的狀態碼時,會將這個請求轉發給正常工做的後端服務器,例如40四、50二、50三、 Max_ fails的默認值是1 ; 企業場景下建議 2-3次。如京東 1次,藍汛 10次,根據業物需求去配置 |
fail_ timeout=10s |
在max_ fails定義的失敗次數後,距離下次檢查的間隔時間,默認是10s ;若是 max_ fails是5 ,它就檢測5次,若是5次都是502 ,那麼,它就會根據 fail_timeout 的值,等待10s再去檢查,仍是隻檢查一次,若是持續502 ,在不從新加載 Nginx 配置的狀況下,每隔 10s都只檢查一次。常規業務2~3秒比較合理,好比京東3 秒,藍汛3秒,可根據業務需求去配置 |
backup |
熱備配置( RS芍點的高可用),當前面激活的 RS都失敗後會自動後用熱備 RS 這標誌着這個服務器做爲備份服務器,若主服務器所有宕機了,就會向它轉發請求 注意:當負載調度算法爲 ip_hash時,後端服務器在負載均衡調度中的狀態不能是 weight 和 backup |
down==# |
這標誌着服務器永遠不可用,這個參數可配合 ip_hash使用;相似註釋效果 |
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream server_pools {
server 10.0.0.7 weight=1 max_fails=3 fail_timeout=10s;
server 10.0.0.8 weight=1 max_fails=3 fail_timeout=10s;
server 10.0.0.9 weight=1 max_fails=3 fail_timeout=10s;
}
server {
listen 80;
server_name bbs.etiantian.org
location / {
proxy_pass http://server_pools;
proxy_set_header Host $host; 顯示主機信息
proxy_set_header X-Forwarded-For $remote_addr; 顯示訪問端地址
}
}
第一個里程碑: 規劃 分類
/upload 10.0.0.8:80 html/www/upload upload服務器
/static 10.0.0.7:80 html/www/static static靜態服務器
/ 10.0.0.9:80 html/www 默認
第二個里程碑: 建立/設置
upstream upload_pools {
server 10.0.0.8:80;
}
upstream static_pools {
server 10.0.0.7:80;
}
upstream default_pools {
server 10.0.0.9:80;
}
第三個里程碑:如何調用upstream信息
location /static/ {
proxy_pass http://static_pools;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
location /upload/ {
proxy_pass http://upload_pools;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
location / {
proxy_pass http://default_pools;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
第四個里程碑:配置lb負載均衡集羣的配置文件
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
upstream upload_pools {
server 10.0.0.8:80;
}
upstream static_pools {
server 10.0.0.7:80;
}
upstream default_pools {
server 10.0.0.9:80;
}
server {
listen 80;
server_name www.etiantian.org;
location /static/ {
proxy_pass http://static_pools;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
location /upload/ {
proxy_pass http://upload_pools;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
location / {
proxy_pass http://default_pools;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
access_log logs/access_www.log main;
}
}
第五個里程碑-建立環境
www.etiantian.org/nana.html
www.etiantian.org/upload/nana.html
www.etiantian.org/static/nana.html
##web01
mkdir -p /application/nginx/html/www/upload
echo "web01 upload" >/application/nginx/html/www/upload/xxx.html
##web02
mkdir -p /application/nginx/html/www/static
echo "web02 static" >/application/nginx/html/www/static/xxx.html
##web03
echo "web03 default" >/application/nginx/html/www/xxx.html
第六個里程碑-進行測試
[root@lb01 conf]# curl www.etiantian.org/nana.html
web03 default
[root@lb01 conf]# curl www.etiantian.org/static/nana.html
web02 static
[root@lb01 conf]# curl www.etiantian.org/upload/nana.html
web01 upload
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
upstream upload_pools {
server 10.0.0.8:80;
}
upstream static_pools {
server 10.0.0.7:80;
}
upstream default_pools {
server 10.0.0.9:80;
}
server {
listen 80;
server_name www.etiantian.org;
location / {
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
if ($http_user_agent ~* "iphone")
{
proxy_pass http://static_pools;
}
if ($http_user_agent ~* "Chrome")
{
proxy_pass http://upload_pools;
}
proxy_pass http://default_pools;
}
access_log logs/access_www.log main;
}
}