成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

使用Nginx、Keepalived構建文藝負載均衡

原創
系統 Linux
對于一個訪問量日益增加的網站架構而言,從單機到集群、從集群到分布式,架構演化是必然的。筆者現在的環境在剛接手時算是單機LAMP環境。在單機LAMP環境時,由于訪問量逐漸變大,網站會經常出現打不開的情況,到后來為了滿足業務訪問需求,將架構改為CDN+Nginx負載均衡+LNMP+代碼層緩存+MySQL主從,從而將網站整體負載性能提升15倍。

【51CTO獨家特稿】面對網站服務器端負載增大的問題,是“拿15萬¥買一臺服務器”來解決,還是靠“加三倍服務器”來解決?還是用其它一些辦法?

對于一個訪問量日益增加的網站架構而言,從單機到集群、從集群到分布式,架構演化是必然的。

接手環境,分析瓶頸,擴展架構

筆者現在的環境在剛接手時算是單機LAMP環境。在單機LAMP環境時,由于訪問量逐漸變大,網站會經常出現打不開的情況,為了解決這個問題在LAMP前端臨時加了一臺vanish來緩存一些靜態文件,從而減輕了web服務器的負載。再到后來為了滿足業務訪問需求,將架構改為CDN+Nginx負載均衡(反向代理)+LNMP+代碼層緩存+MySQL主從,從而將網站整體負載性能提升15倍,且訪問速度也得到很大提升。

負載均衡為什么要選擇使用Nginx呢?

普通負載均衡用LVS,文藝負載均衡用Nginx/F5/HAproxy,XX負載均衡用NLB

LVS:四層負載均衡的典型代表,目前已經被添加到linux發行版的內核。LVS用于較為成熟,因此不再做類述,在此推薦一篇不錯的LVS文章:《互聯網運營智慧》第六章負載均衡及服務器集群(LVS)

Nginx/F5/HAproxy:均為七層負載均衡,F5為商業設備,功能強大,但價格不菲,所以在此不做討論;HAproxy為重量級的七層負載均衡/反向代理程序,一般應用于大中型站點;而Nginx雖然屬于輕量級產品,但是功能毫不遜色與HAproxy,如可以對靜態文件可以實現緩存、可以通過URL、目錄結構、靜動分離對網站實現分流,還可以實現對后端服務器狀態碼健康檢測、對網絡依賴較小、對虛擬主機支持友好等等,這也是筆者選擇Nginx來做負載均衡的原因。

NLB:windows下的東東,性能、可操作性可想而知。在此也提醒一下各位同仁,針對HTTP類的應用千萬不要選擇使用windows,如同樣的業務放linux上只需兩臺服務器,而放windows上可能會需要三臺甚至更多,運維/硬件采購成本也會增加,同時license也是一筆不小的費用。國內較大的一些web站點后端架構為windows的分別有京東商城、當當網、凡客誠品、麥包包。

使用Nginx構建負載均衡時需要注意的幾個問題

Session同步:由于筆者所維護的架構硬件預算受限,所以在整個架構中沒有共享存儲,針對于session處理,筆者使用ip_hash來解決后端服務器session問題。另外,關于存儲session,推薦使用redis或memcached(感謝小衛小灰狼 兩位兄弟的建議)。

網站代碼存儲:還是由于沒有共享存儲,所以筆者每臺web服務器本地均存放一份代碼,為了保證多臺web服務器的代碼數據一致性,使用rsync+inotify實現動態同步(具體實現方法會在后面的文章中介紹)。倘若硬件條件允許的情況下,推薦使用NFS來存儲;若考慮到NFS無法滿足性能需求,可以將NFS的硬盤換成SSD或者使用分布式文件系統來解決。

負載均衡模式選擇:在不受session困擾的情況下,負載均衡模式可以使用weight,因為ip_hash會有導致后端服務器負載不均的情況出現。

開始部署Nginx和Keepalived

為了避免負載均衡出現單點故障,所以使用keepalived對Nginx負載均衡做了HA,也就是說當主負載均衡發生軟硬件故障時,負載均衡服務將有備用負載均衡服務器自動接管服務,環境拓撲如下:

Vip:192.168.1.100

Nginx-proxy-master:192.168.1.101

Nginx-proxy-backup:192.168.1.102

安裝Nginx與Keepalived

在Nginx-proxy-master和Nginx-proxy-backup上分別安裝Nginx、Keepalived,兩臺主機安裝步驟相同

安裝Nginx

#yum -y install pcre pcre-devel
#useradd www -s /sbin/nologin
#tar zxvf nginx-0.7.62.tar.gz
#cd nginx-0.7.62
#./configure \
--prefix=/usr/local/nginx \
--user=www \
--group=www \
--with-http_stub_status_module \
--with-http_ssl_module
#make && make install

安裝Keepalived

#tar zxvf keepalived-1.1.17.tar.gz
#cd cd keepalived-1.1.17
#./configure --prefix=/usr/local/keepalived
#make && make install
#rm -rf /usr/local/keepalived/etc/keepalived/keepalived.conf
#mkdir /etc/keepalived 

配置Nginx

注:Nginx-proxy-master和Nginx-proxy-backup的Nginx配置相同

#more /usr/local/nginx/conf/nginx.conf
user  www www;
worker_processes 4;
error_log  logs/error.log  crit;
pid        logs/nginx.pid;
worker_rlimit_nofile 51200;
 
events {
       use epoll;
       worker_connections 51200;
       }
 
http  {
      include       mime.types;
      default_type  application/octet-stream;
      server_names_hash_bucket_size 256;
      client_header_buffer_size 256k;
      large_client_header_buffers 4 256k;
      keepalive_timeout  120;
      client_max_body_size  50m;
      client_body_buffer_size  256k;
      server_tokens      off;
     
      gzip               on;
      gzip_min_length    1k;
      gzip_buffers  4 1024k;
      gzip_http_version 1.1;
      gzip_comp_level     6;
      gzip_types        text/plain application/x-javascript text/css application/xml;

      #gzip_vary          on;
      proxy_hide_header Vary;
 
      proxy_connect_timeout    600;
      proxy_read_timeout       600;
      proxy_send_timeout       600;
      proxy_buffer_size        16k;
      proxy_buffers            4 64k;
      proxy_busy_buffers_size 128k;
      proxy_temp_file_write_size 128k;
 
      sendfile on;
      tcp_nodelay on;
    # add_header Cache-Control no-cache;
 
upstream blog.luwenju.com  {

                ip_hash;
                server   192.168.1.201:80;
                server   192.168.1.202:80;
                server   192.168.1.203:80;
                }
 
server  {
         listen  80;
         server_name  blog.luwenju.com;
         location / {
         index        index.php;
              proxy_pass         http://blog.luwenju.com;
              proxy_set_header   Host             $host;
              proxy_next_upstream error timeout invalid_header http_500 http_502 http_504;

              proxy_set_header   X-Forwarded-For        $remote_addr;
                     }
         location /NginxStatus {
                  stub_status    on;
                  allow 192.168.1.0/24;
                  }
              log_format  blog.luwenju.com  '$remote_addr - $remote_user [$time_local] $upstream_addr $upstream_status $request'

                                '"$status" $body_bytes_sent "$http_referer"'

                                '"$http_user_agent" "$http_x_forwarded_for"';

              access_log /usr/local/nginx/logs/blog.luwenju.com_access.log  blog.luwenju.com;
         }
}

說明:upstream為服務器池。以本配置文件為例,upstream中共包含三臺web服務器,負載均衡方式為ip_hash。server為主機,用于為upstream內的三臺web服務器實現反向代理,從而到達負載均衡的目的。在本配置文件中只設置了一個主機(server),如果要實現虛擬主機,將一個server分別對應一個upstream即可。

另外,還有兩個關于日志設置的問題:

負載均衡上是否需要開啟access_log:系統/程序剛上線時需要開啟,用于Nginx調試,后期運行穩定后建議將日志打印關閉,因為對于訪問量較大的網站來說大量日志寫入磁盤也會導致磁盤性能下降。

如何設置日志格式:可能使用Nginx部署過負載均衡的朋友都知道,當把Nginx反向代理服務器部署在web前端時,web服務器的access_log就無法獲取用戶的真實ip地址了,針對這個問題的解決辦法會放到后面的文章中<Nginx日志設置及日志分析>

在Nginx-proxy-master服務器上配置Keepalived

#more /etc/keepalived/keepalived.conf
! Configuration File for keepalived

     global_defs {
     router_id nginx-proxy-ha
     }
 
vrrp_script check_nginx {
     script "/etc/keepalived/check_nginx.sh"
     interval 2
     weight 2
     }
 
vrrp_instance VI_1 {
     state MASTER
     interface eth0
     virtual_router_id 51
     priority 200
     advert_int 1
     authentication {
     auth_type PASS
     auth_pass 1234
     }
 
track_interface { 
     eth0  

     } 

 
track_script {
     check_nginx
     }
 
virtual_ipaddress {
     192.168.1.100
     }
}

有關check_nginx.sh的說明:如果Nginx-proxy-master上的nginx進程由于某種原因停止了,但是keepalived進程還正常運行著,這時候Nginx-proxy-backup上的keepalived會認為Nginx-proxy-master是正常的(因為master檢測到backup的keepalived進程還存在),所以在這種情況下當Nginx進程死亡的時候Keepalived也不會發生故障轉移。那么這個腳本的作用就是讓keepalived實時監控Nginx進程,當發現Nginx進程不存在的時候自動將本機的keepalived進程殺死,從而實現故障轉移,腳本內容如下(注:Nginx-proxy-master和Nginx-proxy-backup上此腳本內容均一樣)

#more /etc/keepalived/check_nginx.sh
#!/bin/bash
if [ "$(ps -ef | grep "nginx: master process"| grep -v grep )" == "" ]

 then
  killall -9  keepalived

fi 

在Nginx-proxy-backup服務器上配置Keepalived

注:Nginx-proxy-backup上keepalived的配置與Nnginx-proxy-master只有兩處不同,state為BACKUP、優先級低于master

#more /etc/keepalived/keepalived.conf
! Configuration File for keepalived

     global_defs {
     router_id nginx-proxy-ha
     }
 
vrrp_script check_nginx {
     script "/etc/keepalived/check_nginx.sh"

     interval 2
     weight 2
     }
 
vrrp_instance VI_1 {
     state BACKUP
     interface eth0
     virtual_router_id 51
     priority 180
     advert_int 1
     authentication {
     auth_type PASS
     auth_pass 1234
     }
 
track_interface { 
     eth0  

     } 

 
track_script {
     check_nginx
     }
 
virtual_ipaddress {
     192.168.1.100
     }
}

啟動Nginx和Keepalived

#/usr/local/nginx/sbin/nginx
#/usr/local/keepalived/sbin/keepalived –D

#echo “/usr/local/nginx/sbin/nginx”>>/etc/rc.local
#echo “/usr/local/keepalived/sbin/keepalived –D” >>/etc/rc.local

測試負載均衡是否正常工作

1、打開瀏覽器,分別訪問Nginx-proxy-master、Nginx-proxy-backup、vip,如都能訪問到后端web內容,則說明如上所有配置正確

2、殺死Nginx-proxy-master服務器上的Nginx進程,觀察keepalived進程是否自動消失、觀察vip是否已經轉移到了Nginx-proxy-backup服務器上,如殺死Nginx進程后,keepalived進程也隨之消失,且vip已經轉移到Nginx-proxy-backup服務器,則說明Nginx-proxy-master可正常實現故障轉移

3、依次啟動 Nginx-proxy-master的Nginx、Keepalived(必須先啟動Nginx后啟動Keepalived。如果先啟動Keepalived,Keepalived檢測到Nginx沒有啟動還是會執行殺死自己進程的腳本),然后將Nginx-proxy-backup的Nginx進程殺死,看vip是否會自動轉移到Nginx-proxy-master服務器上,如殺死Nginx進程后,keepalived進程也隨之消失,且vip已經轉移到Nginx-proxy-master服務器,則說明Nginx-proxy-backup可正常實現故障轉移

至此,Nginx負載均衡配置完畢。另外,Nginx非常穩定,筆者的Nginx負載均衡運行在HP DL380服務器上(一顆至強E5620CPU,16G內存,萬轉SAS硬盤),運行四個月以來,從未出現過任何問題。在負載性能上,2000并發情況下load average:僅為0.02, 0.01, 0.00,CPU使用率僅為3%,內存使用為1G(算上linux系統本身使用,系統為64bit)。

作者簡介:陸文舉(微博),85后,一個整天跟機器打交道的山東人。 

責任編輯:yangsai 來源: 51CTO.com
相關推薦

2012-02-15 00:01:34

2015-04-13 09:44:14

Nginxkeepalived負載均衡

2019-12-24 14:28:00

KeepalivedNginxTomcat

2011-01-07 11:14:17

Nginx負載均衡負載均衡

2012-07-31 09:25:42

nginx負載均衡反向代理

2013-04-22 11:29:14

Nginx

2019-07-02 08:38:45

NginxTomcatKeepalived

2015-03-18 14:56:58

負載均衡服務器集群

2020-01-14 09:40:00

Nginx負載均衡正向代理

2011-12-02 22:51:46

Nginx負載均衡

2010-05-06 10:01:26

nginx負載均衡

2011-09-01 10:23:47

Nginx負載均衡器負載均衡

2010-05-07 12:23:23

nginx負載均衡

2014-07-28 11:37:49

NginxTomcat

2013-08-27 13:48:12

Nginx stickNginx負載均衡

2021-03-01 06:15:53

nginx

2010-05-07 12:32:04

Apachetomact負載均衡

2024-11-11 09:51:46

Nginx部署負載

2017-11-09 10:42:11

Nginx負載均衡策略

2019-09-18 10:39:08

負載均衡反向代理TCP
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美日韩亚洲一区 | 农村妇女毛片精品久久久 | 色爱综合网 | 午夜日韩精品 | 国产污视频在线 | 九一视频在线观看 | 久久精彩视频 | 亚洲欧美日韩国产 | 天天插天天操 | 亚洲一区二区三区四区五区午夜 | 亚洲一区二区三区观看 | 成人在线精品视频 | 午夜免费在线 | 国产精品入口麻豆www | 欧美日韩a | 国产精品婷婷 | 亚洲网站在线观看 | 欧美激情久久久 | 成人毛片视频免费 | 日日操av | 精品成人免费一区二区在线播放 | 免费在线视频一区二区 | 一区二区精品在线 | 国产精品1| 99久久久久国产精品免费 | 欧美日韩中文在线观看 | 久久久视频在线 | 欧美一区二区免费在线 | 久久99这里只有精品 | 日韩av在线中文字幕 | 欧美国产日韩在线 | 91操操操 | 最近日韩中文字幕 | 亚洲免费成人av | 亚洲性视频| 亚洲视频一区 | 一区二视频| 国产区精品在线观看 | 日韩中文字幕高清 | 日韩亚洲欧美综合 | 国产999精品久久久 午夜天堂精品久久久久 |