nginx 高可用

tip:? ?nginx是一款高性能的http 服務器/反向代理服務器及電子郵件(IMAP/POP3)代理服務器?

nginx? 的應用場景 (

? ? ? ? ? ? ? ? ? ? ? ? ? ? http服務器,可以做網頁靜態(tài)服務器;

? ? ? ? ? ? ? ? ? ? ? ? ? ? 虛擬主機奸攻;

? ? ? ? ? ? ? ? ? ? ? ? ? ?反向代理,負載均衡典尾。當網站的訪問量達到一定程度后,單臺服務器不能滿足用戶的請求時邪蛔,需要用多臺服務器集群可以使用nginx做反向代理急黎。并且多臺服務器可以平均分擔負載扎狱,不會因為某臺服務器負載高宕機而某臺服務器閑置的情況。)

windows常用命令

nginx.exe -s stop –停止


nginx優(yōu)缺點

占內存小勃教,可以實現(xiàn)高并發(fā)連接淤击、處理響應快。

可以實現(xiàn)http服務器故源、虛擬主機污抬、反向代理、負載均衡绳军。

nginx配置簡單

可以不暴露真實服務器IP地址


一:反向代理


反向代理(Reverse Proxy)方式是指以代理服務器來接受internet上的連接請求印机,然后將請求轉發(fā)給內部網絡上的服務器,并將從服務器上得到的結果返回給internet上請求連接的客戶端门驾,此時代理服務器對外就表現(xiàn)為一個反向代理服務器射赛。


啟動一個Tomcat 127.0.0.1:8080

使用nginx反向代理 8080.zyhome.com 直接跳轉到127.0.0.1:8080

Host文件新增

127.0.0.1 8080.zyhome.com

127.0.0.1 8081.zyhome.com

?nginx.conf 配置

server {

? ? ? ? listen? ? ? 80;

? ? ? ? server_name? 8080.zyhome.com;

? ? ? ? location / {

? ? proxy_pass? http://127.0.0.1:8080;

index? index.html index.htm;

? ? ? ? }

? ? }

? ? server {

? ? ? ? listen? ? ? 80;

? ? ? ? server_name? 8081.zyhome.com;

? ? ? ? location / {

? ? proxy_pass? http://127.0.0.1:8081;

index? index.html index.htm;

? ? ? ? }

? ? }

二:負載均衡

負載均衡策略

輪詢(默認)

每個請求按時間順序逐一分配到不同的后端服務器,如果后端服務器down掉奶是,能自動剔除楣责。?

upstream backserver {?

server 192.168.0.14;?

server 192.168.0.15;?

}?

2、指定權重

指定輪詢幾率聂沙,weight和訪問比率成正比秆麸,用于后端服務器性能不均的情況。?

upstream backserver {?

server 192.168.0.14 weight=10;?

server 192.168.0.15 weight=10;?

}?

3及汉、IP綁定 ip_hash

每個請求按訪問ip的hash結果分配沮趣,這樣每個訪客固定訪問一個后端服務器,可以解決session的問題坷随。?

upstream backserver {?

ip_hash;?

server 192.168.0.14:88;?

server 192.168.0.15:80;?

}?

4房铭、fair(第三方)

按后端服務器的響應時間來分配請求,響應時間短的優(yōu)先分配甸箱。?

upstream backserver {?

server server1;?

server server2;?

fair;?

}?

5育叁、url_hash(第三方)

按訪問url的hash結果來分配請求,使每個url定向到同一個后端服務器芍殖,后端服務器為緩存時比較有效。?

upstream backserver {?

server squid1:3128;?

server squid2:3128;?

hash $request_uri;?

hash_method crc32;?

}?

配置代碼

upstream backserver {

???? server 127.0.0.1:8080;

???? server 127.0.0.1:8081;

??? }


??? server {

??????? listen?????? 80;

??????? server_name? www.zyhome.com;

??????? location / {

???????????????????? ??? proxy_pass? http://backserver;

???????????????????? ?????????? index? index.html index.htm;

??????? }

??? }

? ?宕機輪訓配置規(guī)則

server {

??????? listen?????? 80;

??????? server_name? www.zyhome.com;

??????? location / {

???????????????????? ??? proxy_pass? http://backserver;

??????????????????????????????? index? index.html index.htm;

??????????????????????????????? proxy_connect_timeout 1;

??????????? proxy_send_timeout 1;

??????????? proxy_read_timeout 1;

??????? }


???????????????????? }

三:配置DDOS

限制請求次數(shù)

設置Nginx谴蔑、Nginx Plus的連接請求在一個真實用戶請求的合理范圍內豌骏。比如,如果你覺得一個正常用戶每兩秒可以請求一次登錄頁面隐锭,你就可以設置Nginx每兩秒鐘接收一個客戶端IP的請求(大約等同于每分鐘個請求)窃躲。

limit_req_zone $binary_remote_addr zone=one:10m rate=2r/s;

server {

...

location /login.html {

limit_req zone=one;

...

}

}


`limit_req_zone`命令設置了一個叫one的共享內存區(qū)來存儲請求狀態(tài)的特定鍵值,在上面的例子中是客戶端IP($binary_remote_addr)钦睡。location塊中的`limit_req`通過引用one共享內存區(qū)來實現(xiàn)限制訪問/login.html的目的蒂窒。

四:nginx+keepalived? 實現(xiàn)高可用

linux操作nginx

Nginx是一款輕量級的網頁服務器、反向代理服務器。相較于Apache洒琢、lighttpd具有占有內存少秧秉,穩(wěn)定性高等優(yōu)勢。它最常的用途是提供反向代理服務衰抑。


linux安裝

在Centos下象迎,yum源不提供nginx的安裝,可以通過切換yum源的方法獲取安裝呛踊。也可以通過直接下載安裝包的方法砾淌,以下命令均需root權限執(zhí)行:

首先安裝必要的庫(nginx 中gzip模塊需要 zlib 庫,rewrite模塊需要 pcre 庫谭网,ssl 功能需要openssl庫)汪厨。選定/usr/local為安裝目錄,以下具體版本號根據(jù)實際改變愉择。

安裝PCRE庫

$ cd /usr/local/

$ wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.36.tar.gz

$ tar -zxvf pcre-8.36.tar.gz

$ cd pcre-8.36

$ ./configure

$ make

$ make install

./configure報錯

configure: error: You need a C++ compiler for C++ support.

解決辦法

yum install -y gcc gcc-c++


安裝zlib庫

$ cd /usr/local/

$ wget http://zlib.net/zlib-1.2.8.tar.gz

$ tar -zxvf zlib-1.2.8.tar.gz

$ cd zlib-1.2.8

$ ./configure

$ make

$ make install


安裝ssl

$ cd /usr/local/

$ wget http://www.openssl.org/source/openssl-1.0.1j.tar.gz

$ tar -zxvf openssl-1.0.1j.tar.gz

$ ./config

$ make

$ make install


安裝nginx

$ cd /usr/local/

$ wget http://nginx.org/download/nginx-1.8.0.tar.gz

$ tar -zxvf nginx-1.8.0.tar.gz

$ cd nginx-1.8.0?

$ ./configure --prefix=/usr/local/nginx

$ make

$ make install

安裝常見錯誤:

Nginx啟動提示找不到libpcre.so.1解決方法

如果是32位系統(tǒng)

[root@lee ~]# ?ln -s /usr/local/lib/libpcre.so.1 /lib

如果是64位系統(tǒng)

[root@lee ~]# ?ln -s /usr/local/lib/libpcre.so.1 /lib64

然后在啟動nginx就OK了

[root@lee ~]# /usr/local/webserver/nginx/sbin/nginx


啟動nginx

$ /usr/local/nginx/sbin/nginx

檢查是否啟動成功:打開瀏覽器訪問此機器的 IP骄崩,如果瀏覽器出現(xiàn) Welcome to nginx! 則表示 Nginx 已經安裝并運行成功。

常用命令

重啟:

$ /usr/local/nginx/sbin/nginx 啟動命令

重啟:

$ /usr/local/nginx/sbin/nginx –s reload

停止:

$ /usr/local/nginx/sbin/nginx –s stop

測試配置文件是否正常:

$ /usr/local/nginx/sbin/nginx –t

強制關閉:

$ pkill nginx

啟動Nginx + Keepalived高可用

什么是Keepalived

Keepalived是一個免費開源的薄辅,用C編寫的類似于layer3, 4 & 7交換機制軟件要拂,具備我們平時說的第3層、第4層和第7層交換機的功能站楚。主要提供loadbalancing(負載均衡)和?high-availability(高可用)功能脱惰,負載均衡實現(xiàn)需要依賴Linux的虛擬服務內核模塊(ipvs),而高可用是通過VRRP協(xié)議實現(xiàn)多臺機器之間的故障轉移服務窿春。?


上圖是Keepalived的功能體系結構拉一,大致分兩層:用戶空間(user space)和內核空間(kernel space)。?

內核空間:主要包括IPVS(IP虛擬服務器旧乞,用于實現(xiàn)網絡服務的負載均衡)和NETLINK(提供高級路由及其他相關的網絡功能)兩個部份蔚润。?

用戶空間:

WatchDog:負載監(jiān)控checkers和VRRP進程的狀況

VRRP Stack:負載負載均衡器之間的失敗切換FailOver,如果只用一個負載均稀器尺栖,則VRRP不是必須的嫡纠。

Checkers:負責真實服務器的健康檢查healthchecking,是keepalived最主要的功能延赌。換言之除盏,可以沒有VRRP Stack,但健康檢查healthchecking是一定要有的挫以。

IPVS wrapper:用戶發(fā)送設定的規(guī)則到內核ipvs代碼

Netlink Reflector:用來設定vrrp的vip地址等者蠕。

Keepalived的所有功能是配置keepalived.conf文件來實現(xiàn)的。

安裝keepalived

下載keepalived地址:http://www.keepalived.org/download.html

解壓安裝:

tar -zxvf keepalived-1.2.18.tar.gz -C /usr/local/

yum install -y openssl openssl-devel(需要安裝一個軟件包)

cd keepalived-1.2.18/ && ./configure --prefix=/usr/local/keepalived

make && make install

keepalived安裝成Linux系統(tǒng)服務

將keepalived安裝成Linux系統(tǒng)服務掐松,因為沒有使用keepalived的默認安裝路徑(默認路徑:/usr/local),安裝完成之后踱侣,需要做一些修改工作:

首先創(chuàng)建文件夾粪小,將keepalived配置文件進行復制:

mkdir /etc/keepalived

cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/

然后復制keepalived腳本文件:

cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/

cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/

ln -s /usr/local/sbin/keepalived /usr/sbin/

ln -s /usr/local/keepalived/sbin/keepalived /sbin/

可以設置開機啟動:chkconfig keepalived on,到此我們安裝完畢!

keepalived 常用命令

service keepalived start

service keepalived stop

配置nginx主備自動重啟

第三步:對配置文件進行修改:vim /etc/keepalived/keepalived.conf

keepalived.conf配置文件說明:

(一)Master????


! Configuration File for keepalived


global_defs {

?? router_id bhz005 ##標識節(jié)點的字符串抡句,通常為hostname

}

## keepalived 會定時執(zhí)行腳本并且對腳本的執(zhí)行結果進行分析探膊,動態(tài)調整vrrp_instance的優(yōu)先級。這里的權重weight 是與下面的優(yōu)先級priority有關玉转,如果執(zhí)行了一次檢查腳本成功突想,則權重會-20,也就是由100 - 20 變成了80究抓,Master 的優(yōu)先級為80 就低于了Backup的優(yōu)先級90猾担,那么會進行自動的主備切換。

如果腳本執(zhí)行結果為0并且weight配置的值大于0刺下,則優(yōu)先級會相應增加绑嘹。

如果腳本執(zhí)行結果不為0 并且weight配置的值小于0,則優(yōu)先級會相應減少橘茉。

vrrp_script chk_nginx {

??? script "/etc/keepalived/nginx_check.sh" ##執(zhí)行腳本位置

??? interval 2 ##檢測時間間隔

??? weight -20 ## 如果條件成立則權重減20(-20)

}

## 定義虛擬路由 VI_1為自定義標識工腋。

vrrp_instance VI_1 {

state MASTER?? ## 主節(jié)點為MASTER,備份節(jié)點為BACKUP

??? ## 綁定虛擬IP的網絡接口(網卡)畅卓,與本機IP地址所在的網絡接口相同(我這里是eth6)

interface eth6?

virtual_router_id 172? ## 虛擬路由ID號

??? mcast_src_ip 192.168.1.172? ## 本機ip地址

??? priority 100? ##優(yōu)先級配置(0-254的值)

??? Nopreempt? ##

??? advert_int 1 ## 組播信息發(fā)送間隔擅腰,倆個節(jié)點必須配置一致,默認1s

??? authentication {?

??????? auth_type PASS

??????? auth_pass bhz ## 真實生產環(huán)境下對密碼進行匹配

??? }


??? track_script {

??????? chk_nginx

??? }


??? virtual_ipaddress {

??????? 192.168.1.170 ## 虛擬ip(vip)翁潘,可以指定多個

??? }

}


(二)Backup

! Configuration File for keepalived


global_defs {

?? router_id bhz006

}


vrrp_script chk_nginx {

??? script "/etc/keepalived/nginx_check.sh"

??? interval 2

??? weight -20

}

vrrp_instance VI_1 {

??? state BACKUP

??? interface eth7

??? virtual_router_id 173

??? mcast_src_ip 192.168.1.173

??? priority 90 ##優(yōu)先級配置

??? advert_int 1

??? authentication {

??????? auth_type PASS

??????? auth_pass bhz

??? }


??? track_script {

??????? chk_nginx

??? }


??? virtual_ipaddress {

??????? 192.168.1.170

??? }

}

(三)nginx_check.sh 腳本:

#!/bin/bash

A=`ps -C nginx –no-header |wc -l`

if [ $A -eq 0 ];then

??? /usr/local/nginx/sbin/nginx

??? sleep 2

??? if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then

??????? killall keepalived

??? fi

fi

我們需要把master的keepalived配置文件 copy到master機器(172)的 /etc/keepalived/ 文件夾下趁冈,在把backup的keepalived配置文件copy到backup機器(173)的 /etc/keepalived/ 文件夾下,最后把nginx_check.sh腳本分別copy到兩臺機器的 /etc/keepalived/文件夾下拜马。


nginx_check.sh腳本授權渗勘。賦予可執(zhí)行權限:chmod +x /etc/keepalived/nginx_check.sh

啟動2臺機器的nginx之后。我們啟動兩臺機器的keepalived

? /usr/local/nginx/sbin/nginx

? service keepalived start

? ps -ef | grep nginx

? ps -ef | grep keepalived

? 可以進行測試俩莽,首先看一下倆臺機器的ip a 命令下 都會出現(xiàn)一個虛擬ip旺坠,我們可以停掉? 一個機器的keepalived,然后測試扮超,命令:service keepalived stop取刃。結果發(fā)現(xiàn)當前停掉的機器已經不可用,keepalived會自動切換到另一臺機器上瞒津。


我們可以測試在nginx出現(xiàn)問題的情況下蝉衣,實現(xiàn)切換,這個時候我們只需要把nginx的配置文件進行修改巷蚪,讓其變得不可用,然后強殺掉nginx進程即可濒翻,發(fā)現(xiàn)也會實現(xiàn)自動切換服務器節(jié)點屁柏。


自動重啟不了啦膜,解決辦法

查看腳本是否有運行的權限

如果你是root登陸的話(不是的話,切換到root用戶淌喻,對*.sh賦可執(zhí)行的權限)?

chmod 777 *.sh ? ? ? ? ?賦予權限

?or

chmod +x? *.sh

然后運行就OK了僧家,即有權限對文件進行刪除等操作。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末裸删,一起剝皮案震驚了整個濱河市八拱,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌涯塔,老刑警劉巖肌稻,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異匕荸,居然都是意外死亡爹谭,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進店門榛搔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來诺凡,“玉大人,你說我怎么就攤上這事践惑「姑冢” “怎么了?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵尔觉,是天一觀的道長凉袱。 經常有香客問我,道長穷娱,這世上最難降的妖魔是什么绑蔫? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮泵额,結果婚禮上配深,老公的妹妹穿的比我還像新娘。我一直安慰自己嫁盲,他們只是感情好篓叶,可當我...
    茶點故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著羞秤,像睡著了一般缸托。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上瘾蛋,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天俐镐,我揣著相機與錄音,去河邊找鬼哺哼。 笑死佩抹,一個胖子當著我的面吹牛叼风,可吹牛的內容都是我干的。 我是一名探鬼主播棍苹,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼无宿,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了枢里?” 一聲冷哼從身側響起孽鸡,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎栏豺,沒想到半個月后彬碱,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡冰悠,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年堡妒,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片溉卓。...
    茶點故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡皮迟,死狀恐怖,靈堂內的尸體忽然破棺而出桑寨,到底是詐尸還是另有隱情伏尼,我是刑警寧澤,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布尉尾,位于F島的核電站爆阶,受9級特大地震影響,放射性物質發(fā)生泄漏沙咏。R本人自食惡果不足惜辨图,卻給世界環(huán)境...
    茶點故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望肢藐。 院中可真熱鬧故河,春花似錦、人聲如沸吆豹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽痘煤。三九已至凑阶,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間衷快,已是汗流浹背宙橱。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人养匈。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓哼勇,卻偏偏與公主長得像都伪,于是被迫代替她去往敵國和親呕乎。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,927評論 2 355

推薦閱讀更多精彩內容