使用集羣是網站解決高併發、海量數據問題的經常使用手段。當一臺服務器的處理能力、存儲空間不足時,不要企圖去換更強大的服務器,對大型網站而言,無論多麼強大的服務器,都知足不了網站持續增加的業務需求。這種狀況下,更恰當的作法是增長一臺服務器分擔原有服務器的訪問及存儲壓力。經過負載均衡調度服務器,未來自瀏覽器的訪問請求分發到應用服務器集羣中的任何一臺服務器上,若是有更多的用戶,就在集羣中加入更多的應用服務器,使應用服務器的負載壓力再也不成爲整個網站的瓶頸。 摘自《大型網站技術架構_核心原理與案例分析》javascript
127.12.19.121 : nginx+keepalived mastercss
127.12.19.131 : nginx+keepalived backuphtml
127.12.89.23 : 虛擬ip(VIP) 對外提供服務的IP,也可稱作浮動IP.java
127.17.124.13 : 後端服務Anode
127.17.124.14 : 後端服務Blinux
三,Nginx主要實現及配置nginx
1,經過反向代理,實現用戶對後臺服務器的訪問,而且也能夠實現對一些靜態文件的緩存,提搞性能。後端
nginx-master的 nginx.conf配置以下:centos
user root; #運行用戶 worker_processes 1; #啓動進程,一般設置成和cpu的數量相等 #全局錯誤日誌及PID文件 error_log /usr/local/nginx/logs/error.log; error_log /usr/local/nginx/logs/error.log notice; error_log /usr/local/nginx/logs/error.log info; pid /usr/local/nginx/logs/nginx.pid; # 工做模式及鏈接數上線 events { use epoll; #epoll是多路複用IO(I/O Multiplexing)中的一種方式,可是僅用於linux2.6以上內核,能夠大大提升nginx的性能 worker_connections 1024; #單個後臺worker process進程的最大併發連接數 } #設定http服務器,利用它的反向代理功能提供負載均衡支持 http { include mime.types; default_type application/octet-stream; #設定請求緩衝 server_names_hash_bucket_size 128; client_header_buffer_size 32K; large_client_header_buffers 4 32k; # client_max_body_size 8m; #sendfile 指令指定 nginx 是否調用 sendfile 函數(zero copy 方式)來輸出文件,對於普通應用, #必須設爲 on,若是用來進行下載等應用磁盤IO重負載應用,可設置爲 off,以平衡磁盤與網絡I/O處理速度,下降系統的uptime. sendfile on; tcp_nopush on; tcp_nodelay on; #鏈接超時時間 keepalive_timeout 65; #開啓gzip壓縮,下降傳輸流量 gzip on; gzip_min_length 1k; gzip_buffers 4 16k; gzip_http_version 1.1; gzip_comp_level 2; gzip_types text/plain application/x-javascript text/css application/xml; gzip_vary on; #添加tomcat列表,真實應用服務器都放在這 upstream tomcat_pool { #server tomcat地址:端口號 weight表示權值,權值越大,被分配的概率越大; server 127.17.124.13:8080 weight=4 max_fails=2 fail_timeout=30s; server 127.17.124.14:8080 weight=4 max_fails=2 fail_timeout=30s; } server { listen 80; #監聽端口 server_name localhost; #默認請求設置 location / { proxy_pass http://tomcat_pool; #轉向tomcat處理 } #全部的jsp頁面均由tomcat處理 location ~ \.(jsp|jspx|dp)?$ { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_pass http://tomcat_pool; #轉向tomcat處理 } #全部的靜態文件直接讀取不通過tomcat,nginx本身處理 location ~ .*\.(htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$ { expires 30d; } location ~ .*\.(js|css)?$ { expires 1h; } #定義錯誤提示頁面 error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } }
注:nginx-back 的配置同上。瀏覽器
一、實現VIP本地映射,即VIP配置在keepalived中。
二、檢測nginx的狀態,即若是主機宕機,會自動切換到備機。
service keepalived stop #執行此命令,能夠驗證主備切換。
三、keepalived.conf配置以下:
global_defs { notification_email { 365788843@qq.com } notification_email_from sns-lvs@gmail.com smtp_server 127.12.19.121 smtp_connection_timeout 30 router_id nginx_backup # 設置nginx backup的id,在一個網絡應該是惟一的 } vrrp_script chk_http_port { script "/usr/local/src/check_nginx_pid.sh" interval 2 #(檢測腳本執行的間隔) weight 2 } vrrp_instance VI_1 { state BACKUP # 指定keepalived的角色,MASTER爲主,BACKUP爲備 interface eth0 # 當前進行vrrp通信的網絡接口卡(當前centos的網卡) virtual_router_id 66 # 虛擬路由編號,主從要一直 priority 99 # 優先級,數值越大,獲取處理請求的優先級越高 advert_int 1 # 檢查間隔,默認爲1s(vrrp組播週期秒數) authentication { auth_type PASS auth_pass 1111 } track_script { chk_http_port #(調用檢測腳本) } virtual_ipaddress { 127.12.89.23 # 定義虛擬ip(VIP),可多設,每行一個 } }
注:nginx-backup的keepalived配置同上,不一樣點爲 smtp_server爲:127.12.19.131。
浮動IP至關於一個動態的IP,經過Keepalived分別綁定在不一樣的主備節點(nginx master,nginx backup),若是其中一臺節點掛掉,浮動IP經過keepalived自動綁定到另一個節點,而用戶是沒有感知的。
浮動IP能夠是動態生成的,也能夠是固定寫死的。
如上圖的流程架構中體現了nginx支持https,可是在nginx.conf配置中尚未實現,這個後續另設章節專門講解。
以上內容算是拋磚引玉,若有不妥,敬請指正。