lvs+keepalived

具體解釋參考:http://www.linuxvirtualserver.org/zh/lvs4.html  html

   基於LVS+Keepalived實現的LVS羣集結構中,至少包括兩臺熱備的負載調度器,兩臺以上的節點服務器,以DR模式的LVS羣集爲基礎,增長一臺從負載調度器,使用Keepalived來實現主、從調度器的熱備,從而構建建有負載均衡、高可用兩種能力的LVS網站羣集平臺。

IPVS實現負載均衡機制有三種:
 VS/TUN :即(Virtual Server via IP Tunneling)
也就是IP隧道技術實現虛擬服務器。它的鏈接調度和管理與VS/NAT方式同樣,只是它的報文轉發方法不一樣,VS/TUN方式中,調度器採用IP隧道技術將用戶請求轉發到某個Real Server,而這個Real Server將直接響應用戶的請求,再也不通過前端調度器,此外,對Real Server的地域位置沒有要求,能夠和Director Server位於同一個網段,也能夠是獨立的一個網絡。所以,在TUN方式中,調度器將只處理用戶的報文請求,集羣系統的吞吐量大大提升。

NAT(Network Address Translation)是一種外網和內網地址映射的技術。NAT模式下, 網絡數據報的進出都要通過LVS的處理。LVS須要做爲RS(真實服務器)的網關。當包到達LVS時,LVS作目標地址轉換(DNAT),將目標IP改成 RS的IP。RS接收到包之後,彷彿是客戶端直接發給它的同樣。RS處理完,返回響應時,源IP是RS IP,目標IP是客戶端的IP。這時RS的包經過網關(LVS)中轉,LVS會作源地址轉換(SNAT),將包的源地址改成VIP,這樣,這個包對客戶端 看起來就彷彿是LVS直接返回給它的。客戶端沒法感知到後端RS的存在。前端

VS/DR: 即(Virtual Server via Direct Routing)
也就是用直接路由技術實現虛擬服務器。它的鏈接調度 和管理與VS/NAT和VS/TUN中的同樣,但它的報文轉發方法又有不一樣,VS/DR經過改寫請求報文的MAC地址,將請求發送到Real Server,而Real Server將響應直接返回給客戶,免去了VS/TUN中的IP隧道開銷。這種方式是三種負載調度機制中性能最高最好的,可是必需要求Director Server與Real Server都有一塊網卡連在同一物理網段上。linux


lvs支持8種不一樣的調度算法:web

  • 輪叫調度(Round-Robin Scheduling)
  • 加權輪叫調度(Weighted Round-Robin Scheduling)
  • 最小鏈接調度(Least-Connection Scheduling)
  • 加權最小鏈接調度(Weighted Least-Connection Scheduling)
  • 基於局部性的最少連接(Locality-Based Least Connections Scheduling)
  • 帶複製的基於局部性最少連接(Locality-Based Least Connections with Replication Scheduling)
  • 目標地址散列調度(Destination Hashing Scheduling)
  • 源地址散列調度(Source Hashing Scheduling)



經過LVS+Keepalived構建的LVS集羣,LVS負載均衡用戶請求到後端RS服務器,Keepalived的做用是檢測web服務器的狀態,若是有一臺RS 服務器死機,或工做出現故障,Keepalived將檢測到,並將有故障的web服務器從系統中剔除,當web服務器工做正常後Keepalived自動將web服務器加入到服務器羣中,這些工做所有自動完成,不須要人工干涉,須要人工作的只是修復故障的web服務器。

keepalived能夠實現服務的高可用或熱備,用來防止單點故障的問題;而Keepalived的核心VRRP協議,VRRP協議主要實現了在路由器或三層交換機處的冗餘;Keepalived就是使用VRRP協議來實現高可用的;

Keepalived啓動後會有三個進程:
    父進程:內存管理,子進程管理
    子進程:VRRP子進程
    子進程:healthchecker子進程

高可用集羣構建前提:
1.proxy和proxy2節點時間必須同步;

192.168.12.92   lvs-slave
192.168.12.38    lvs-master
192.168.12.22   lvs-web2 b
192.168.12.25   lvs-web1 a
192.168.12.230  vip

(1)本次基於VMware Workstation搭建一個四臺Linux(CentOS 6.6)系統所構成的一個服務器集羣,其中兩臺負載均衡服務器(一臺爲主機,另外一臺爲備機),另外兩臺做爲真實的Web服務器
(2)本次實驗基於DR負載均衡模式,設置了一個VIP(Virtual IP)爲192.168.12.230,用戶只須要訪問這個IP地址便可得到網頁服務。其中,負載均衡主機爲192.168.12.38,備機爲192.168.12.92。Web服務器A爲192.168.12.25,Web服務器B爲192.168.80.22

1、
1)將機器綁定ip地址
vi /etc/sysconfig/network-scripts/ifcfg-eth0
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.12.22
NETMASK=255.255.255.0
GATEWAY=192.168.12.1
DNS1=114.114.114.114
DNS2=202.106.0.20
或者用setup命令更改
2)設定主機名
hostname XXX
vi /etc/sysconfig/network
3)IP地址與主機名綁定
 vi /etc/hosts
192.168.12.92 lvs-slave
192.168.12.6 lvs-master
192.168.12.22 lvs-web2
192.168.12.25 lvs-web1

#在Master與Backup服務器上分別安裝Ipvsadm、Keepalived
yum install -y ipvsadm kernel-devel perl  perl-DBI  perl-DBD-MySQL  make gcc openssl-devel libnl*
yum install -y keepalived ipvsadm
#這裏安裝Ipvsadm工具主要是爲了查看lvs規則使用
chkconfig --add keepalived
chkconfig keepalived on
chkconfig --list keepalived

內核優化 主要是開啓內核轉發
vi /etc/sysctl.conf
#———————————————————————————————————————————-
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.ip_local_port_range = 1024 65000
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_max_tw_buckets = 5000
net.core.somaxconn = 32768
net.ipv4.tcp_keepalive_probes = 5
net.ipv4.tcp_keepalive_intvl = 20
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
net.core.netdev_max_backlog = 32768
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 2
net.ipv4.tcp_retries2 = 5
net.ipv4.tcp_mem = 41943040 73400320 94371840
net.ipv4.tcp_max_orphans = 3276800
fs.file-max = 1300000#LVS虛擬服務器(VIP)忽略ARP廣播包
net.ipv4.ip_forward= 1
net.ipv4.conf.lo.arp_ignore= 1
net.ipv4.conf.lo.arp_announce= 2
net.ipv4.conf.all.arp_ignore= 1
net.ipv4.conf.all.arp_announce= 2

配置備負載服務器 192.168.12.38
cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   notification_email {
   zclzhao@admin.com    發生故障時發送的郵箱
   }
   notification_email_from admin@admin.com    使用哪一個郵箱發送
   smtp_server 192.168.12.1    發件服務器
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}

vrrp_instance VI_1 {
    state BACKUP        指定keepalived的角色,MASTER爲主,BACKUP爲備
    interface eth1        指定網絡接口
    virtual_router_id 5 虛擬路由編號,主備要一致
    priority 99            定義優先級,數字越大,優先級越高,主DR必須大於備用DR
    advert_int 1        檢查間隔,默認爲1S
    authentication {    定義認證
        auth_type PASS    認證方式爲口令認證
        auth_pass 1111    認證口令
    }
    virtual_ipaddress {    定義vip
        192.168.12.230    多個vip能夠換行添加
    }
}

virtual_server 192.168.12.230 80 {
    delay_loop 6        每隔6秒查看realserver狀態
    lb_algo wrr            調度算法爲加權最小鏈接數
    lb_kind DR            lvs工做模式爲DR(直接路由)模式
    nat_mask 255.255.255.0
    persistence_timeout 0 同一IP的鏈接0秒內分配到同一臺realserver (這個0根據實際環境更改)
    protocol TCP        用TCp檢測realserver的狀態

    real_server 192.168.12.22 80{    定義realserver
        weight 3                    定義權重
        TCP_CHECK {                    注意TCP_CHECK和{之間的空格,若是沒有的話只會添加第一個realserver}
            connect_port 80
            connect_timeout 10        10秒無反應超時
            nb_get_retry 3
            delay_before_retry 3
        }
}

    real_server 192.168.12.25 80 {
        weight 3
        TCP_CHECK {
            connect_port 80
            connect_timeout 10
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

配置主lvs的keepalived,只須要將state BACKUP 改成state MASTER,將priority 99 的值改爲100

配置兩臺web    
192.168.12.22操做

cat /etc/init.d/realserver
SNS_VIP=192.168.12.230            定義虛擬ip
. /etc/rc.d/init.d/functions    調用init.d腳本的標準庫
case "$1" in
start)
       ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP
       /sbin/route add -host $SNS_VIP dev lo:0
       echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
       echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
       echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
       echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
       sysctl -p >/dev/null 2>&1
       echo "RealServer Start OK"
       ;;
stop)
       ifconfig lo:0 down
       route del $SNS_VIP >/dev/null 2>&1
       echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore
       echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
       echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
       echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
       echo "RealServer Stoped"
       ;;
*)
       echo "Usage: $0 {start|stop}"
       exit 1
esac
exit 0

chmod 755 /etc/init.d/realserver
service realserver start

將realserver啓動腳本考到192.168.12.25/etc/init.d/下
scp /etc/init.d/realserver root@192.168.12.22:/etc/init.d/realserver

驗證測試
指定請求的均衡轉發:由於兩個Web服務器的權重都同樣,因此會依次轉發給兩個Web服務器;算法

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息