`
cppmule
  • 浏览: 447390 次
  • 性别: 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:

分享到:
评论

相关推荐

    Fortigate Load Balance

    Fortigate Load Balance 是一款由Fortinet公司研发的企业级负载均衡解决方案。本手册旨在帮助用户深入理解Fortigate的负载均衡功能及其配置方法,适用于FortiOS 5.0版本。 #### 前置准备与组织结构 在正式介绍配置...

    cluster集群,HA集群,Loadbalance 集群

    集群的分类并不绝对,实际应用中,HA集群和负载均衡集群可能同时存在于一个系统中,以提升服务的稳定性和效率。例如,一个网络流量负载均衡集群可能包含高可用的网络文件系统和网络服务,以确保在处理大量请求时的...

    负载均衡haproxy_+tomcat实战

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

    35_dubbo支持哪些负载均衡、高可用以及动态代理的策略?.zip

    在这个主题中,我们将详细探讨Dubbo支持的负载均衡策略、高可用方案以及动态代理机制。 首先,让我们来看一下Dubbo的负载均衡策略。负载均衡是分布式系统中确保服务平稳运行的关键组成部分,它能够有效地分配请求到...

    基于Linux的服务器负载均衡性访问的解决方案.pdf

    2. 负载均衡(Load Balance) 负载均衡主要应用于Web服务器场景,同一个IP地址背后实际上是多台服务器在共同工作。主服务器接收来自这个IP地址的请求,并使用特定算法将任务分配给多台真实的服务器,实现负载的均匀...

    A10负载均衡应用交付-GSLB

    A10 Networks 提供了一套完整的全局负载均衡解决方案——A10 GSLB (Global Service Load Balance),旨在优化互联网应用的服务质量和用户体验。该解决方案的核心是通过智能DNS解析技术,确保用户能够访问到最优的数据...

    红旗Linux集群软件ppt

    红旗Linux集群软件主要关注高可用性(High Availability, HA)、负载均衡(Load Balance)以及高性能计算(High Performance Computing, HPC)这三个方面。红旗HA集群解决方案旨在提供不间断的服务,确保关键业务系统的...

    lb与ha测试文档(1).docx

    在Oracle RAC中,客户端配置LOAD_BALANCE参数为yes,就可以实现负载均衡。例如,客户端的tns配置可以包含多个数据库服务器的IP地址,如192.168.200.125、192.168.200.126和192.168.200.127,这些可以是主机IP、VIP...

    RedHat_Linux_AS_3配置HA_Cluster实战

    2. 负载均衡(Load Balance)集群:通过负载调度器将网络请求分散到多个服务器,提高性能和可用性。在Linux环境下,LVS(Linux Virtual Server)项目提供了NAT、DR和IP Tunneling等负载均衡实现方式,其中DR是最常见...

    基于Serv-HA的Oracle 11g共享存储双机热备配置手册

    双机热备(High Availability, HA)和负载均衡(Load Balance, LB)是两种不同的集群技术。高可用性集群注重的是在出现故障时能够快速地进行故障切换,从而保持服务的持续性。而负载均衡集群则是将工作负载均匀分配...

    网站集群架构利用开源软件构建 高可用、高性能、 可扩展 的集群系统

    1. **GSLB(Global Server Load Balance):** 全局负载均衡技术旨在通过智能地在多个数据中心之间分配流量来提高系统的整体可用性和性能。它能够根据地理位置等因素将用户的请求引导至最合适的服务器集群,从而减少...

    keepalived-1.2.24.tar.gz

    Keepalived有两种主要的工作模式:主-备(Master/Backup)和负载均衡(Load Balance)。在主-备模式下,一台服务器作为主服务器运行实际服务,另一台作为备份。主服务器失效时,备份服务器接管虚拟IP。在负载均衡...

    第八期Openstack 公开课 PPT-- 51clouding.ppt

    在OpenStack环境中,高可用性(High Availability, HA)和负载均衡(Load Balance)是确保服务稳定性和性能的关键因素。高可用性旨在减少单点故障,通过冗余和自动故障转移来确保即使在部分组件故障时,服务也能继续...

    JBoss Clustering

    - **负载均衡策略(Load-Balance Policies)**:决定了客户端请求如何分配到集群中的不同节点。 #### 5. HTTP会话集群 HTTP会话集群用于保持Web应用程序中的会话状态。 - **是否真的需要HTTP会话复制**:分析是否有...

    论文研究-Linux集群技术研究.pdf

    负载均衡(Load Balance)是集群技术中另一个重要的概念,它涉及到如何在集群中的多个服务器之间合理地分配工作负载,以避免单个服务器过载而导致性能下降或服务中断。集群系统通过负载均衡技术可以实现网络流量的...

    360开源的高性能分布式存储服务 HustStore.zip

    由于 hustdb 的存储节点采用了 master-master 的结构,当某一个存储节点挂掉时,HA 会自动将请求打到另外一台 master,同时 HA 会按照自动进行负载均衡,将数据分布存储在多个 hustdb节点上,因此存储引擎不存在单点...

    Oracle RAC

    - **负载均衡集群 (Load Balance, LB)**:通过在服务器集群中均匀分配负载来提高响应速度和服务质量,适用于需要处理大量用户请求的场景。 - **高可用性集群 (High Availability, HA)**:旨在确保服务的连续性和稳定...

Global site tag (gtag.js) - Google Analytics