1.1 集群是什麼 簡單地說,集群就是指一組(若幹個)相互獨立的電腦,利用高速通信網路組成的一個較大的電腦服務系統,每個集群節點(即集群中的每台電腦)都是運行各自服務的獨立服器。這些伺服器之間可以彼此通信,協同向用戶提供應用程式、系統資源和數據,並以單一系統的模式加以管理。當用戶客戶機請求集群 ...
1.1 集群是什麼
簡單地說,集群就是指一組(若幹個)相互獨立的電腦,利用高速通信網路組成的一個較大的電腦服務系統,每個集群節點(即集群中的每台電腦)都是運行各自服務的獨立服器。這些伺服器之間可以彼此通信,協同向用戶提供應用程式、系統資源和數據,並以單一系統的模式加以管理。當用戶客戶機請求集群系統時,集群給用戶的感覺就是一個單一獨立的伺服器,而實際上用戶請求的是一組集群伺服器。
打開谷歌、百度的頁面,看起來好簡單,也許你覺得用幾分鐘就可以製作出相似的網頁,而實際上,這個頁面的背後是由成千上萬台伺服器集群協同工作的結果。而這麼多的伺服器維護和管理,以及相互協調工作也許就是讀者你未來的工作職責了。
若要用一句話描述集群,即一堆伺服器合作做同一件事,這些機器可能需要整個技術團隊架構、設計和統一協調管理,這些機器可以分佈在一個機房,也可以分佈在全國全球各個地區的多個機房。
1.2 為什麼要有集群
高性能、價格有效性、可伸縮性、高可用性
透明性、可管理性、可編輯性
1.2.1 集群種類
負載均衡集群 LB 解決調度問題
高可用集群 HA 解決單點故障問題(keeplived)
高性能計算集群 HP 、網路計算集群 GC
1.2.2 硬體設備
F5 設備 A10
1.2.3 軟體
nginx (7層 1.9版本之後支持4層)、LVS (4層)、HAproxy (4層 7層)
1.2.4 負載均衡概念說明
對用戶的訪問請求進行調度管理
對用戶的訪問請求進行壓力分擔
1.2.5 反向代理
接收用戶請求代替用戶向後端訪問
反向代理與數據轉發的區別
1.2.6 壓力測試的方式
ab (apache里的命令)
通過 yum install httpd-tools 獲得
1.3 nginx反向代理實踐
1.3.1 地址規劃說明
HOSTNAME |
IP |
說明 |
lb01 |
10.0.0.5 |
Nginx 主負載伺服器 |
lb02 |
10.0.0.6 |
nginx 輔負載伺服器 |
web01 |
10.0.0.8 |
web01伺服器 |
web02 |
10.0.0.7 |
web02伺服器 |
web03 |
10.0.0.9 |
web03伺服器 |
說明:以上為實際生產架構負載實現規劃內容 |
ip命令說明
ip address show 查看ip地址
ip route show 查看路由信息
1.3.2 反向代理與數據轉發的區別
1.3.3 安裝部署nginx過程(安裝命令集)
yum install -y pcre-devel openssl-devel mkdir -p /server/tools cd /server/tools wget -q http://nginx.org/download/nginx-1.10.3.tar.gz ls -l nginx-1.10.3.tar.gz useradd www -s /sbin/nologin -M tar xf nginx-1.10.3.tar.gz cd nginx-1.10.3 ./configure --user=nginx --group=nginx --prefix=/application/nginx-1.10.3 --with-http_stub_status_module --with-http_ssl_module make make install ln -s /application/nginx-1.10.3 /application/ngin
1.3.4 編寫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; } }
1.3.5 統一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
1.3.6 測試
[root@lb01 ~]# curl -H host:bbs.etiantian.org 10.0.0.8/xiaoxinxin.html bbs web01 [root@lb01 ~]# curl -H host:bbs.etiantian.org 10.0.0.7/xiaoxinxin.html bbs web02 [root@lb01 ~]# curl -H host:bbs.etiantian.org 10.0.0.9/xiaoxinxin.html bbs web03 [root@lb01 ~]# curl -H host:www.etiantian.org 10.0.0.8/xiaoxinxin.html www web01 [root@lb01 ~]# curl -H host:www.etiantian.org 10.0.0.7/xiaoxinxin.html www web02 [root@lb01 ~]# curl -H host:www.etiantian.org 10.0.0.9/xiaoxinxin.html www web03
1.3.7 配置負載服務文件
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; } }
1.3.8 測試訪問
[root@lb01 conf]# curl -H host:bbs.etiantian.org 10.0.0.5/xiaoxinxin.html bbs web03 [root@lb01 conf]# curl -H host:bbs.etiantian.org 10.0.0.5/xiaoxinxin.html bbs web02 [root@lb01 conf]# curl -H host:bbs.etiantian.org 10.0.0.5/xiaoxinxin.html bbs web01
1.4 nginx中常用模塊說明
ngx_http_status_module
ngx_http_ssl_module
ngx_http_log_module
ngx_http_upstream_module
ngx_http_proxy_module
1.4.1 模塊調度演算法
①. 定義輪詢調度演算法-rr-預設調度演算法
②. 定義權重調度演算法-wrr
③. 定義靜態調度演算法-ip_hash
④. 定義最小的連接數-least_conn
1.4.2 nginx反向代理相關兩個模塊
upstream 模塊 類似與一個池塘,將nginx節點放置到池塘中
proxy模塊 用池塘裡面的nginx節點,利用pr oxy進行調用
1.4.3 upstream模塊核心參數簡介
weight 權重
max_fails 拋得次數
fail_timeout 失敗的超時時間
backup 備份
1.4.4 weight 參數實踐 (權重)
upstream 模塊只能在http區塊里
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 weight=1; server 10.0.0.8:80 weight=2; } server{ listen 80; server_name bbs.etiantian.org; location / { proxy_pass http://server_pools; } } }
測試
[root@test tools]# curl 10.0.0.5 web01 www [root@test tools]# curl 10.0.0.5 web01 www [root@test tools]# curl 10.0.0.5 web02 www [root@test tools]# curl 10.0.0.5 web01 www [root@test tools]# curl 10.0.0.5 web01 www [root@test tools]# curl 10.0.0.5 web02 www
1.4.5 其他的參數說明
max_fails 失敗的嘗試次數
fail_timeout 失敗後的再次嘗試時間
backup 備份節點:所有的節點都掛掉後數據才會請求web01
server 10.0.0.7:80 weight=1 max_fails=3 fail_timeout=10 ; server 10.0.0.8:80 weight=2 max_fails=3 fail_timeout=10 backup;
測試,將web02停掉
[root@test tools]# curl 10.0.0.5 web02 www [root@test tools]# curl 10.0.0.5 web02 www
停掉web02後
[root@test tools]# curl 10.0.0.5 web01 www [root@test tools]# curl 10.0.0.5 web01 www [root@test tools]# curl 10.0.0.5
1.4.6 訪問抓包
用戶請求報文
負載均衡請求報文
說明:
hosts 主機頭不同,未配置proxy_set_header Host $host 參數,在負載均衡訪問的時候會不帶hosts信息。
1.4.7 upsrteam參數詳細說明
upstream模塊內參數 |
參數說明 |
server 10.0.10.8:80 |
負載均衡後面的RS配置,可以是IP或功能變數名稱,如果埠不寫,預設是80埠。 高併發場景下, IP可換成功能變數名稱,通過 DNS做負載均衡。 |
weigth=1 |
代表伺服器的權重,預設值是1。權重數字越大表示接受的請求比例越大。 |
max_fails=3 |
Nginx嘗試連接後端主機失敗的次數,這個值是配合 proxy_next_upstream、fastcgi_next_upstream和memcached_next_upstream 這三個參數來使用的。當nginx接收後端伺服器返回這三個參數定義的狀態碼時,會將這個請求轉發給正常工作的後端伺服器,例如404、502、503、 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使用;類似與註釋。 |
weight :調節伺服器的請求分配權重。1.4.8 上述命令的說明如下: