`
cppmule
  • 浏览: 435347 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类

網站負載均衡(Load Balance)及備援(HA)機制實做

 
阅读更多

網站負載均衡(Load Balance)及備援(HA)機制實做

實做目的:某 EDA 應用系統為純 Web Application Service ,擬運用 Linux LVS(Linux Virtual Server) 叢集技術使該系統改善其負載效率及高可利用性(Load Balancing and High Availability)。

系統需求:
Real Server x 2 -  生產用的 EDA Application 系統,需兩部以上機器互相備援及平衡負載,且作業平台均為 Linux,為避免多部主機的資料不同步,此專案較適用於 3 tier 架構的Web應用系統,簡言之,不同部主機間使用同一個資料庫,若資料格式為檔案類型亦可採用 NFS 檔案系統解決。
Redirect Server x1 – 用以分派Real Server負載工作及使其相互備援的監控主機,其作業平台為 Linux。

網路架構圖如下:

 

 編註: 由於整體架構 Redirect Server 對用戶的實際使用,扮演一個入口服務的主機,故其角色極為重要,建立者可視實際狀況為其多設一個 Backup 主機,以避免單一 Redirect Server 故障造成整體系統失效。

但在此案例,我們只就一台 Redirect Server 的架構實做。 

選擇適用您的實際網路架構的模式:依據用戶群與 Real Servers 之間的實際網路佈署而定,區分三種模式。 

  • VS/NAT
  • VS/DR
  • VS/TUN

VS/NAT:用戶群 IP 與 Real Servers IP 為不同子網路。

VS/DR:用戶群與 Real Servers 為同一子網路。

VS/DR:用戶群與 Real Servers 為同一子網路,用戶與 Real Server 建立 Tunnel 通道。

 

三種架構比較表:

編註:就本文章僅以 VS/TUN 為實做參考。 

作業系統環境說明:

  • Real Server #1,RedHat Linux Advance Server 3/網路卡 x1,除原有的應用系統,不需特別安裝軟體。
  • Real Server #2,RedHat Linux Advance Server 3/網路卡 x1,除原有的應用系統,不需特別安裝軟體。
  • Redirect Server,CentOS Linux 4.5/網路卡 x1,主要軟體 ipvsadm/mon。

IP 設定:

  • Real Server #1,eth0 = 192.168.0.216,tun1 = 192.168.0.218(VIP)。
  • Real Server #2,eth0 = 192.168.0.217,tun1 = 192.168.0.218(VIP)。
  • Redirect Server,eth0 = 192.168.0.215,eth0:1 = 192.168.0.218(VIP)。 

編註:所謂 VIP 就是多個應用系統之間實際對外服務的同一組共用IP。

= 負載均衡 – Load Balancing 設定 =
設定 Redirect Server:

  1. 下載及安裝套件 ipvsadm-1.24-6.src.rpm,可以前往 http://rpm.pbone.net/  搜尋下載點,安裝方法直接用這指令
    #rpmbuild –rebuild ipvsadm-1.24-6.src.rpm
  2. 新增虛擬網路介面 eth0:1
    #vi /etc/sysconfig/network-scripts/ifcfg-eth0:1
    [codes=c]DEVICE=eth0:1
    BOOTPROTO=static
    IPADDR=192.168.0.218
    NETMASK=255.255.0.0
    ONBOOT=yes
    TYPE=Ethernet[/codes]
    #ifconfig eth0:1 up
  3. 建立 ipvsadm 初始啟動程序
    #vi /etc/sysconfig/ipvsadm
    [codes=c]ipvsadm -A -t 192.168.0.218:80 -s rr
    ipvsadm -a -t 192.168.0.218:80 -r 192.168.0.216:80 -g -w 1
    ipvsadm -a -t 192.168.0.218:80 -r 192.168.0.217:80 -g -w 1[/codes]
  4. 啟動 ipvsadm
    #service ipvsadm start
  5. 檢查LVS狀態
    #ipvsadm -l
  6. 開機自動執行
    #chkconfig ipvsadm on
  7. 為了使其中的 Real Server Down 時可自動變更 ipvsadm 的規則, 在安裝一隻程式(mon)用來監控 real server 的存活狀態。
    #wget ftp://ftp.kernel.org/pub/software/admin/mon/mon-0.99.2.tar.gz
    請自行搜尋以下的 Perl Module
    perl-Mon-0.11-2.2.el4.rf.noarch.rpm
    fping-2.4-1.b2.2.el4.rf.i386.rpm
    perl-Convert-BER-1.31.01-1.2.el4.rf.noarch.rpm
    perl-Net-Telnet-3.03-1.2.el4.rf.noarch.rpm
    perl-Time-HiRes-1.55-3.i386.rpm
    perl-Time-Period-1.20-2.el4.rf.noarch.rpm

    #tar -xzf mon-0.99.2.tar.gz
    #cd mon-0.99.2
    #mkdir /etc/mon
    #cp auth.cf mon.cf /etc/mon
    #mkdir /usr/lib/mon
    #cp -r alert.d mon.d state.d mon /usr/lib/mon
    #mkdir /usr/lib/mon/log.d
    #vi /etc/mon/auth.cf

    [codes=c]disable: root
    dump: root
    enable: root
    get: root
    loadstate: root
    reset: root
    savestate: root
    set: root
    start: root
    stop: root
    term: root[/codes]

     

    #vi /etc/mon/mon.cf

    [codes=c]cfbasedir = /etc/mon
    alertdir = /usr/lib/mon/alert.d
    mondir = /usr/lib/mon/mon.d
    hostgroup r1 192.168.0.216
    hostgroup r2 192.168.0.217
    watch r1
    service http
    interval 10s
    monitor http.monitor
    allow_empty_group
    period wd {Sun-Sat}
    #alert mail.alert your@mail.address
    #upalert mail.alert your@mail.address
    alert lvs.alert -P tcp -V 192.168.0.218:80 -R 192.168.0.216 -F tun -W 1
    upalert lvs.alert -P tcp -V 192.168.0.218:80 -R 192.168.0.216 -F tun -W 1 -u

     

    #
    # For real server 1
    #
    watch r2
    service http
    interval 10s
    monitor http_t.monitor
    allow_empty_group
    period wd {Sun-Sat}
    #alert mail.alert your@mail.address
    #upalert mail.alert your@mail.address
    alert lvs.alert -P tcp -V 192.168.0.218:80 -R 192.168.0.217 -F tun -W 1
    upalert lvs.alert -P tcp -V 192.168.0.218:80 -R 192.168.0.217 -F tun -W 1 -u[/codes]

    #vi /usr/lib/mon/alert.d/lvs.alert

    <coolcode lang="perl"> #!/usr/bin/perl
    #
    # lvs.alert – Linux Virtual Server alert for mon
    #
    # It can be activated by mon to remove a real server when the
    # service is down, or add the server when the service is up.
    #
    #
    use Getopt::Std;
    getopts ("s:g:h:t:l:P:V:R:W:F:u");

     

    $ipvsadm = "/sbin/ipvsadm";
    $protocol = $opt_P;
    $virtual_service = $opt_V;
    $remote = $opt_R;

    if ($opt_u) {
    $weight = $opt_W;
    if ($opt_F eq "nat") {
    $forwarding = "-m";
    } elsif ($opt_F eq "tun") {
    $forwarding = "-i";
    } else {
    $forwarding = "-g";
    }

    if ($protocol eq "tcp") {
    system("$ipvsadm -a -t $virtual_service -r $remote -w $weight $forwarding");
    } else {
    system("$ipvsadm -a -u $virtual_service -r $remote -w $weight $forwarding");
    }
    } else {
    if ($protocol eq "tcp") {
    system("$ipvsadm -d -t $virtual_service -r $remote");
    } else {
    system("$ipvsadm -d -u $virtual_service -r $remote");
    }
    };
    </coolcode>

    #vi /etc/init.d/mon

    [codes=c]#!/bin/sh
    #
    # start/stop the mon server
    #
    # You probably want to set the path to include
    # nothing but local filesystems.
    #
    # chkconfig: 2345 99 10
    # description: mon system monitoring daemon
    # processname: mon
    # config: /etc/mon/mon.cf
    # pidfile: /var/run/mon.pid
    #
    PATH=/bin:/usr/bin:/sbin:/usr/sbin
    export PATH

     

    # Source function library.
    . /etc/rc.d/init.d/functions

    # See how we were called.
    case "$1" in
    start)
    echo -n "Starting mon daemon: "
    daemon /usr/lib/mon/mon -f -l -c /etc/mon/mon.cf
    echo
    touch /var/lock/subsys/mon
    ;;
    stop)
    echo -n "Stopping mon daemon: "
    killproc mon
    echo
    rm -f /var/lock/subsys/mon
    ;;
    status)
    status mon
    ;;
    restart)
    killall -HUP mon
    ;;
    *)
    echo "Usage: mon {start|stop|status|restart}"
    exit 1
    esac

    exit 0
    [/codes]

    #service mon start
    #netstat -lt | grep mon

    Tips: 測試 mon 時,可嘗試關閉一台 real server,在Redirect server 執行 ipvsadm -l 檢查是否會自動刪除該主機的規則; 反之在復機時,是否會自動新增規則。

設定 Real Server #1&2:

    1. 由於在 Real Server 都使用一張網卡綁定兩個不同 IP,使得在使用 VS/DR 及 VS/TUN 這兩個模式時會遭遇到 ARP 問題,無法達到 HA & Load Balancing的實際效果。
    因此我們需關閉網路裝置的 ARP 回應,但自 kernel 2.2.14 以後版本已無法對 eth 裝置使用 NO ARP FLAG,搜尋網路的相關文章後,若使用 kernel 2.6.x 以後版本可以改用 ip_ignore 方式,如此篇文說明  。
    而我們用的版本需透過 kernel 的編譯,才能有這樣的功能; 但經過幾次嘗試都不成功,於是我們改用另一個模組安裝的方法。

    a. 下載安裝檔 http://www.masarlabs.com/noarp/
    #wget http://www.masarlabs.com/download/noarp-1.2.4.tar.gz
    b. 建立 kernel-source 的連結
    #cd /usr/src
    #cp -a linux-2.4.21-37.EL linux-2.4.21-37.EL.noarp
    #ln -s linux-2.4.21-37.EL.noarp linux
    c.進行編譯及安裝
    #cd noarp-1.2.4
    #./configure
    #make
    #make install
    #depmod -a

    2. 新增一個 script 用以啟動所需的系統/網路環境
[codes=c]#!/bin/bash
#
#———- lvs-tun for realserver ——————
#
line="—————————-"
VIP="192.168.0.218"
RIP="192.168.0.216"
DIP="192.168.0.215"

#showing routing table
/bin/netstat -rn
echo $line

#set_realserver_ip_forwarding to OFF (1 on, 0 off).
echo "0" > /proc/sys/net/ipv4/ip_forward
cat /proc/sys/net/ipv4/ip_forward
echo $line

#looking for DIP 192.168.0.215
ping -c 1 $DIP
echo $line

#looking for VIP (will be on director)
ping -c 1 $VIP
echo $line

# noarp modules
/sbin/modprobe noarp
/usr/local/sbin/noarpctl add $VIP $RIP
echo "Loaded noarp module:"
lsmod | grep noarp
echo
echo "noarp list:"
/usr/local/sbin/noarpctl list
echo $line

#set VIP on realserver
/sbin/ifconfig tunl0 $VIP broadcast $VIP netmask 255.255.255.255 up
echo $line

#ifconfig output
/sbin/ifconfig tunl0
echo $line

#set route for VIP on device
/sbin/route add -host $VIP dev tunl0
echo $line

#listing routing info for VIP
/bin/netstat -rn
echo $line

#hiding ARP request
#arptables -A IN -d $VIP -j DROP
#arptables -A OUT -o tunl0 -d $VIP -j mangle –mangle-ip-s $VIP
#arptables -A OUT -o eth0 -d $VIP -j mangle –mangle-ip-s $RIP
# if you have eth1 connect to network
#arptables -A OUT -o eth1 -d $VIP -j mangle –mangle-ip-s $RIP

# listing the rules of arptables
#arptables -L

#
echo $line
#———- EOF ——————
[/codes] 

參考連結:

See Also:

分享到:
评论

相关推荐

    balance轻松实施负载均衡方案

    还为负载均衡的实施而烦恼吗?还为负责的配置而烦恼吗?balance为你轻松实现负载均衡。

    opensips与两台freeswitch负载均衡

    opensips与两台freeswitch负载均衡,实现freeswitch分布式,亲测可用。

    network load balance

    network load balance,负载均衡设置

    关于负载均衡

    负载均衡(Load Balance)是分布式系统架构设计中必须考虑的因素之一,它通常是指,将请求/数据均匀分摊到多个操作单元上执行,其的关键在于均匀: • 反向代理层的负载均衡,是通过“DNS轮询”实现的 • 站点层的...

    负载均衡技术全攻略

    负载均衡(Load Balance)建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。本文所要介绍的负载均衡技术主要是指...

    Windows Server 2019 负载均衡(NLB)安装部署-图文

    网络负载均衡,英文名称为Network Load Balance,简称NLB。 当日常工作业务量较大、网络负荷过重时,我们就需要将业务进行负载,来保障服务器的高可用性,高稳定性。负载均衡可以对服务器的运行状况进行监控,及时...

    负载均衡开源解决方案

    负载均衡(Load Balancing) 负载均衡建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强 ...

    Array_负载均衡(APV系列)产品详细介绍

    1.1. 服务器负载均衡(Server Load Balance) 4 1.1.1 SLB的工作模式 4 1.1.2. SLB的负载均衡算法 7 1.1.3. SLB的负载均衡策略 9 1.1.4 Array的SLB健康检查 10 1.1.5 Array的SLB的特点 12 1.2. Array 应用交付的加速...

    Oracle Load Balance解@老熊

    Oracle Load Balance解@老熊

    负载均衡(Load Balance)简介

    把众多租户要完成的任务如何合理地分配给云端的各个服务器并能快速处理完,就是负载均衡技术所要解决的问题。 理想的使用情景描述如下: 早上 8:30 前,微算公司云端只有 1 号服务器在开启状态,其他众多的服务器都...

    基于集群的负载均衡方案

    负载均衡(Load Balance)是分布式系统架构设计中必须考虑的因素之一,它通常是指,将请求/数据分摊到多个操作单元上执行。 通过此方案的实施,可以有效解决高并发量数据问题,提升服务平台处理速度,并且可以扩展并发...

    负载均衡haproxy_+tomcat实战

    服务器集群(Cluster)使得多个服务器节点能够协同工作,根据目的的不同,服务器集群可以分为: ...一般提到的负载均衡(Load Balance),是指实现负载均衡集群。负载均衡实现了横向扩展,避免纵向的升级换代。

    node-loadbalance:蒸馏负载平衡引擎的集合

    负载均衡 这是(最希望的)最精简形式的负载平衡引擎的集合。 目标是创建一种高度可重用的实现,该实现对用户的影响尽可能小。安装使用可以: npm i loadbalance const loadbalance = require ( 'loadbalance' )用法...

    Dubbo服务集群的负载均衡算法

    在集群负载均衡时,Dubbo提供了4种均衡策略,如:Random LoadBalance(随机均衡算法)、;RoundRobin LoadBalance(权重轮循均衡算法)、LeastAction LoadBalance(最少活跃调用数均衡算法)、ConsistentHash LoadBalance...

    cluster集群,HA集群,Loadbalance 集群

    介绍HA集群,Loadbalance 集群区别

    H3C 负载均衡设备典型配置案例集-6W300-出口网关多业务典型配置举例.pdf

    本文档介绍负载均衡...LB(Load Balance,负载均衡)是一种集群技术,它将特定的业务(网络服务、网络流量等)分担 给多台网络设备(包括服务器、LB 等)或多条链路,从而提高了业务处理能力,保证了业务的高 可靠性

    H3C负载均衡技术白皮书

    本文介绍了负载均衡技术的应用背景,描述了负载均衡技术的实现与运行机制,并简 单介绍了负载均衡技术在实际环境中的应用。

    Spring Cloud Nacos 2021使用LoadBalancer做负载均衡

    Spring Cloud Nacos 2021 移除了 Ribbon,在Spring Cloud Commons 项目中添加了 Spring Cloud LoadBalancer 作为新的负载均衡器。LoadBalancer 的负载均衡策略没有 Ribbon 那么丰富,只提供了RandomLoadBalancer、...

    在windows+Server+2003上实现网络负载平衡(Network+Loading+Balance)

    在windows+Server+2003上实现网络负载平衡(Network+Loading+Balance)

Global site tag (gtag.js) - Google Analytics