IT貓撲網(wǎng):您身邊最放心的安全下載站! 最新更新|軟件分類|軟件專題|手機版|論壇轉(zhuǎn)貼|軟件發(fā)布

您當前所在位置: 首頁系統(tǒng)集成網(wǎng)絡(luò)管理 → 對nginx做負載均衡實現(xiàn)雙機熱備

對nginx做負載均衡實現(xiàn)雙機熱備

時間:2015-06-28 00:00:00 來源:IT貓撲網(wǎng) 作者:網(wǎng)管聯(lián)盟 我要評論(0)

  首先:

  使用nginx做為負載均衡器時,通訊模型類似于LVS-NAT,在某些情況下,隨著集群節(jié)點數(shù)量的增長,nginx將會成為網(wǎng)絡(luò)通訊的瓶頸,因為所有應(yīng) 答數(shù)據(jù)包都必須通過nginx,一顆400MHz的處理器能夠容納100Mbps的連接,因此,在一般情況下,網(wǎng)絡(luò)更可能比LVS Director更可能成為瓶頸。在這種情況下,使用LVS-DR比使用nginx做負載均衡器上更可靠一些。

  使用nginx+keepalived的可行性:

  Keepalived是Linux下面實現(xiàn)VRRP 備份路由的高可靠性運行件。基于Keepalived設(shè)計的服務(wù)模式能夠真正做到主服務(wù)器和備份服務(wù)器故障時IP瞬間無縫交接。在新浪動態(tài)應(yīng)用平臺 上,Keepalived配合LVS在線上服務(wù)中有著很好的穩(wěn)定性。

  Nginx是基于Linux 2.6內(nèi)核中epoll模型http服務(wù)器,與Apache進程派生模式不同的是Nginx進程基于于Master+Slave多進程模型,自身具有非常 穩(wěn)定的子進程管理功能。在Master進程分配模式下,Master進程永遠不進行業(yè)務(wù)處理,只是進行任務(wù)分發(fā),從而達到Master進程的存活高可靠 性,Slave進程所有的業(yè)務(wù)信號都由主進程發(fā)出,Slave進程所有的超時任務(wù)都會被Master中止,屬于非阻塞式任務(wù)模型。在新浪博客應(yīng)用平臺上, 經(jīng)過將近8個月的運行,沒有因為主進程退出或者子進程僵死導致服務(wù)中致的故障存在。

  在生產(chǎn)環(huán)境中,任何的機器宕機導致的損失都需要被 降到最低,傳統(tǒng)的生產(chǎn)環(huán)境中,都是將服務(wù)器直接放置在4/7層交換機后面以避免因為服務(wù)器或者服務(wù)器軟件故障導致的服務(wù)中止。當前的業(yè)務(wù)模式下,有許多高 并發(fā)的服務(wù)需求,Js小文件、高速動態(tài)接口、Nginx七層業(yè)務(wù),都希望所有的Socket操作能夠盡快完成,減少用戶的時間等待。4/7層交換機由于負 責了新浪全站多個產(chǎn)品的服務(wù),經(jīng)常會成為高并發(fā)服務(wù)應(yīng)用的一個制約條件。于是,就孕育出了使用Keepalived+Nginx實現(xiàn)雙機交叉熱備使用公網(wǎng) ip進行DNS輪詢服務(wù)的想法,這個方案可以運用于需要高并發(fā)服務(wù)的所有應(yīng)用環(huán)境。越少的Socket通訊層,數(shù)據(jù)到達用戶桌面的速度越快。

  1、服務(wù)器IP存活檢測:

  服務(wù)器IP存活檢測是由Keepalived自己本身完成的,將2臺服務(wù)器配置成Keepalived互為主輔關(guān)系,任意一方機器故障對方都能夠?qū)P接管過去。

  2、服務(wù)器應(yīng)用服務(wù)存活檢測:

  一個正常的業(yè)務(wù)服務(wù),除了保證服務(wù)器的狀態(tài)存活之外,還需要應(yīng)用業(yè)務(wù)的存活。之前之所以有Apache服務(wù)器因為進程僵死導致HTTP不響應(yīng)從而影響服 務(wù)是因為Apache的進程模式導致的。在Nginx的進程模型下,可以認為只要Nginx進程存活狀態(tài),服務(wù)就是正常的,于是只需要做到檢測進程存活就 能夠做到檢測服務(wù)的存活。Slave進程的健康狀態(tài)由Nginx自身的Master進程去完成,Master進程的存活可以通過服務(wù)器上的專用腳本進行監(jiān) 測,一旦發(fā)現(xiàn)Nginx Master進程異常退出,則立即重新啟動Nginx進程,該方案已經(jīng)在新浪博客系統(tǒng)上運行近半年。

  3、服務(wù)器在線維護:

  Keepalived的服務(wù)IP通過其配置文件進行管理,依靠其自身的進程去確定服務(wù)器的存活狀態(tài),如果在需要對服務(wù)器進程在線維護的情況下,只需要停掉被維護機器的Keepalived服務(wù)進程,另外一臺服務(wù)器就能夠接管該臺服務(wù)器的所有應(yīng)用。

  上面的可行性的文章轉(zhuǎn)自其他blog,以下是根據(jù)上面的方案做的配置筆記,另外,我還沒有搞明白keepalived如何防止腦裂,因此,現(xiàn)在,個人覺得,用heartbeat做雙機的熱備更可靠一些,文章的后面有使用heartbeat做雙機熱備的配置。

  方案 一 使用keepalived做nginx負載均衡器的雙機熱備

  Keepalived為LVS群集提供強勁的健康檢查機制。它實現(xiàn)了一個多層L3、L4、L5/7容錯健康檢查框架,當有Server Pool宕機后通過socket通知***內(nèi)核***將 其從Server Pools中剔除,進一步提高Linux Virtual Server project項目的High Availability。同時提供了獨立的VRRPv2棧來及時處理 director failover ,及時為LVS集群節(jié)點健康檢查及LVS directors failover。

  在這里我們只使用keepalived的vrrp的功能,使主服務(wù)器和備份服務(wù)器故障時IP瞬間無縫交接。

  1 安裝

  ./configure --prefix=/usr/local/keepalived

  make

  make install

  2 配置文件

  vi /usr/local/keepalived/etc/keepalived/keepalived.conf

  Master的配置文件

  vrrp_instance VI_INET1 {

  state MASTER #(主機為MASTER,備用機為BACKUP)

  interface eth0 #(HA監(jiān)測網(wǎng)絡(luò)接口)

  mcast_src_ip 192.168.7.191 #(VRRP Multicast廣播源地址,分別取主、備機地址,不能取與virtual_ipaddress相同)

  track_interface { #其他要監(jiān)測狀態(tài)的接口

  eth1

  }

  virtual_router_id 53 #(主、備機的virtual_router_id必須相同)

  priority 200 #(主、備機取不同的優(yōu)先級,主機值較大,備份機值較小,值越大優(yōu)先級越高)

  advert_int 5 #(VRRP Multicast廣播周期秒數(shù))

  authentication {

  auth_type pass #(VRRP認證方式)

  auth_pass yourpass #(VRRP口令字)

  }

  virtual_ipaddress {

  192.168.7.100 #(VRRP HA虛擬地址)

  }

  }

  Slave的配置文件

  vrrp_instance VI_INET1 {

  state BACKUP

  interface eth0

  track_interface {

  eth1

  }

#p#副標題#e#

  virtual_router_id 53

  priority 100

  advert_int 5

  authentication {

  auth_type pass

  auth_pass yourpass

  }

  virtual_ipaddress {

  192.168.7.100

  }

  }

  track_interface的意思是將Linux中你想監(jiān)控的網(wǎng)絡(luò)接口卡監(jiān)控起來,當其中的一塊出現(xiàn)故障是keepalived都將視為路由器出現(xiàn)故障。

  啟動

  在啟動前先查看IP地址。注:不能使用ifconfig查看

  [root@real1 ~]# ip addr show

  1: lo: mtu 16436 qdisc noqueue

  link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

  inet 127.0.0.1/8 scope host lo

  2: eth0: mtu 1500 qdisc pfifo_fast qlen 1000

  link/ether 00:0c:29:c8:9b:3c brd ff:ff:ff:ff:ff:ff

  inet 192.168.7.191/24 brd 192.168.7.255 scope global eth0

  /usr/local/keepalived/sbin/keepalived -D -f /usr/local/keepalived/etc/keepalived/keepalived.conf

  啟動后

  [root@real1 ~]# ip addr show

  1: lo: mtu 16436 qdisc noqueue

  link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

  inet 127.0.0.1/8 scope host lo

  2: eth0: mtu 1500 qdisc pfifo_fast qlen 1000

  link/ether 00:0c:29:c8:9b:3c brd ff:ff:ff:ff:ff:ff

  inet 192.168.7.191/24 brd 192.168.7.255 scope global eth0

  inet 192.168.7.100/32 scope global eth0

  當Master失效時,Backup就會通過MultiCast地址:224.0.0.18(vrrp的默認地址)這個組播地址,獲得這個消息,并將192.168.7.100這個地址接管過來。

  別忘記在iptables配置當中增加:

  -I INPUT -s <主/備服務(wù)器ip> -d 224.0.0.18 -j ACCEPT

  老外的HA配置:

  Using keepalived to failover routers

  vrrpd is a router failover demon protocol. While keepalived uses it to failover LVS, vrrpd can be used independantly of LVS

  to failover a pair of routers.

  Graeme Fowler graeme (at) graemef (dot) net 11 Sep 2007

  config for the ACTIVE router looks like:

  # keepalived.conf for HA "routers" global_defs {??? notification_email {??? [email protected]??? }??? notification_email_from [email protected]??? smtp_server 1.2.3.4??? smtp_connect_timeout 60??? router_id router_1 } vrrp_script check_running {??? script "/usr/local/bin/check_running"??? interval 10??? weight 10 } vrrp_script always_succeed {??? script "/bin/date"??? interval 10??? weight 10 } vrrp_script always_fail {??? script "/usr/local/bin/always_fail"??? interval 10??? weight 10 } vrrp_instance ROUTER_1 {??? state MASTER??? smtp_alert??? interface eth0??? virtual_router_id 101??? priority 100??? advert_int 3??? authentication {??? auth_type PASS??? auth_pass whatever??? }??? virtual_ipaddress {??? 1.1.1.1???

關(guān)鍵詞標簽:nginx,負載均衡,雙機熱

相關(guān)閱讀

文章評論
發(fā)表評論

熱門文章 路由器地址大全-各品牌路由設(shè)置地址 路由器地址大全-各品牌路由設(shè)置地址 各品牌的ADSL與路由器出廠默認IP、帳號、密碼 各品牌的ADSL與路由器出廠默認IP、帳號、密碼 Nslookup命令詳解-域名DNS診斷 Nslookup命令詳解-域名DNS診斷 站長裝備:十大網(wǎng)站管理員服務(wù)器工具軟件 站長裝備:十大網(wǎng)站管理員服務(wù)器工具軟件

相關(guān)下載

    人氣排行 各品牌的ADSL與路由器出廠默認IP、帳號、密碼 路由器地址大全-各品牌路由設(shè)置地址 騰達路由器怎么設(shè)置?騰達路由器設(shè)置教程 ADSL雙線負載均衡設(shè)置詳細圖文教程 路由表說明(詳解route print) Nslookup命令詳解-域名DNS診斷 網(wǎng)管員實際工作的一天 網(wǎng)管必會!了解交換機控制端口流量