歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Nodejs負載均衡:haproxy,slb以及node-slb

Nodejs負載均衡:haproxy,slb以及node-slb

日期:2017/2/27 15:48:13   编辑:Linux教程

我的線上環境是阿裡雲,既然阿裡雲有SLB,比自己運維一個要省事兒的多,事實上,自己做也真不一定做得比它好,本文試圖以haproxy來解釋一下slb的原理

講解haproxy的目的是介紹負載算法,便於理解SLB,最後給出node-slb解決方案

目前比較流行的

目前,在線上環境中應用較多的負載均衡器硬件有F5 BIG-IP,軟件有LVS,Nginx及HAProxy,高可用軟件有Heartbeat. Keepalived

成熟的架構有

  • LVS+Keepalived
  • Nginx+Keepalived
  • HAProxy+keepalived
  • DRBD+Heartbeat

HAProxy

優點

  1. HAProxy是支持虛擬主機的,可以工作在4. 7層(支持多網段);
  2. 能夠補充Nginx的一些缺點比如Session的保持,Cookie的引導等工作;
  3. 支持url檢測後端的服務器;
  4. 它跟LVS一樣,本身僅僅就只是一款負載均衡軟件;單純從效率上來講HAProxy更會比Nginx有更出色的負載均衡速度,在並發處理上也是優於Nginx的;
  5. HAProxy可以對Mysql讀進行負載均衡,對後端的MySQL節點進行檢測和負載均衡,不過在後端的MySQL slaves數量超過10台時性能不如LVS;
  6. HAProxy的算法較多,達到8種;

官網 http://www.haproxy.org/ (自備梯子)

  • http://cbonte.github.io/haproxy-dconv/configuration-1.5.html
  • http://demo.haproxy.org/

我覺得它是所有負載軟件裡最簡單最好用的。配置文件比nginx還簡單,而且還有監控頁面。

下載最新版軟件 http://www.haproxy.org/download/1.5/src/haproxy-1.5.12.tar.gz

解壓

tar -zxvf haproxy-1.5.12.tar.gz

切換到目錄

cd haproxy-1.5.12 

打開readme看一下,如何安裝

make TARGET=linux26
sudo make install

創建一個配置文件

# Simple configuration for an HTTP proxy listening on port 80 on all
# interfaces and forwarding requests to a single backend "servers" with a
# single server "server1" listening on 127.0.0.1:8000
global
    daemon
    maxconn 256

defaults
    mode http
    timeout connect 5000ms
    timeout client 50000ms
    timeout server 50000ms

frontend http-in
    bind *:80
    default_backend servers

backend servers
    server server1 127.0.0.1:8000 maxconn 32


# The same configuration defined with a single listen block. Shorter but
# less expressive, especially in HTTP mode.
global
    daemon
    maxconn 256

defaults
    mode http
    timeout connect 5000ms
    timeout client 50000ms
    timeout server 50000ms

listen http-in
    bind *:80
    server server1 127.0.0.1:8000 maxconn 32

啟動

haproxy -f test.cfg

查看狀態

記得在配置文件裡加上

listen admin_stats
    bind 0.0.0.0:8888
    stats refresh 30s
    stats uri /stats
    stats realm Haproxy Manager
    stats auth admin:admin
    #stats hide-version

http://ip:8888/stats

負載均衡--調度算法

HAProxy的算法有如下8種:

  • roundrobin,表示簡單的輪詢,這個不多說,這個是 負載均衡 基本都具備的;
  • static-rr,表示根據權重,建議關注;
  • leastconn,表示最少連接者先處理,建議關注;
  • source,表示根據請求源IP,建議關注;
  • uri,表示根據請求的URI;
  • url_param,表示根據請求的URl參數'balance url_param' requires an URL parameter name
  • hdr(name),表示根據HTTP請求頭來鎖定每一次HTTP請求;
  • rdp-cookie(name),表示根據據cookie(name)來鎖定並哈希每一次TCP請求。

SLB是神馬

負載均衡(Server Load Balancer,簡稱SLB)是對多台雲服務器進行流量分發的負載均衡服務。SLB可以通過流量分發擴展應用系統對外的服務能力,通過消除單點故障提升應用系統的可用性

SLB是如何實現的

使用tengine實現的。

Tengine是由淘寶網發起的Web服務器項目。它在Nginx的基礎上,針對大訪問量網站的需求,添加了很多高級功能和特性。

see http://tengine.taobao.org/

SLB用法

創建slb

點擊管理按鈕,進入實例詳情

沒啥需要改的,我們直接看服務監聽功能,看看如何配置slb

  • 配置端口
  • 轉發規則
  • 帶寬
  • 健康檢查等

點擊編輯按鈕,此時可以看到具體配置頁面

目前slb支持2種轉發規則

  • 輪詢
  • 最小連接數

輪詢應該是和haproxy的roundrobin調度算法一樣,表示簡單的輪詢

最小連接數SLB會自動判斷 當前ECS 的established 來判斷是否轉發

配置完了slb server,下一步要設置具體slb把請求轉發給哪台機器,這實際上才是最核心的的配置。

阿裡雲把這件事兒做的超級簡單

假設我現在有一個ecs服務器為已填加

點擊【未添加的服務器】,此時會列出未加入負載池的ecs服務器

選中一台服務器

點擊批量添加

配置一下權重,如果機器性能一樣就配置權重一樣,性能越好,權重越大

可選值【0 -- 100】

完成配置後,已添加服務器裡就有了2台服務器

保證你的服務器都啟動,比如2台服務器的80端口都正常即可

此時你需要做的是把你的域名解析到slb服務器的ip地址上

node-slb

an expressjs middleware for aliyun slb

緣起

http://bbs.aliyun.com/read/188736.html?page=1

2)請問健康檢查發的什麼請求? head 還是 get? head請求。

如果express路由沒有處理head請求的話,會觸發其他路由,可能會出現請求重定向死循環

原理

var debug = require('debug')('slb');

module.exports = function (req, res, next) {
  if(req.method.toLowerCase() == 'head'){    
    debug('[ALIYUN.COM LOG]: SLB health checking....OK...');
    return res.sendStatus(200);
  }

  next();
};

原理非常簡單:以中間件的形式,處理一下req.method為head的適合,終止此請求即可

安裝

npm install --save node-slb

用法

var slb = require('node-slb');

var app = express();
app.user(slb);

測試

首先啟動demo的服務

➜  node-slb git:(master) ✗ npm start

> [email protected] start /Users/sang/workspace/github/node-slb
> cd demo && npm install && npm start


> [email protected] start /Users/sang/workspace/github/node-slb/demo
> node ./bin/www

執行test命令,測試請求

➜  node-slb git:(master) ✗ npm test

> [email protected] test /Users/sang/workspace/github/node-slb
> curl -i -X HEAD http://127.0.0.1:3000

HTTP/1.1 200 OK
X-Powered-By: Express
Content-Type: text/plain; charset=utf-8
Content-Length: 2
ETag: W/"2-d736d92d"
Date: Mon, 29 Jun 2015 03:46:49 GMT
Connection: keep-alive

此時,觀察服務器日志

➜  node-slb git:(master) ✗ npm start

> [email protected] start /Users/sang/workspace/github/node-slb
> cd demo && npm install && npm start


> [email protected] start /Users/sang/workspace/github/node-slb/demo
> DEBUG=slb node ./bin/www

[ALIYUN.COM LOG]: SLB health checking....OK...

如果出現[ALIYUN.COM LOG]: SLB health checking....OK...說明正常。

如果想打印日志,可以DEBUG=slb,如果不想打印日志,默認即無。

總結

  • 首先介紹了haproxy和負載均衡算法
  • 介紹了阿裡雲slb用法
  • 給出node-slb,一個express中間件
原文:http://my.oschina.net/nodeonly/blog/472432
Copyright © Linux教程網 All Rights Reserved