1. 程式人生 > >LVS-NAT &TUN實現負載均衡

LVS-NAT &TUN實現負載均衡

工作原理:
基於NAT機制實現。當用戶請求到達director之後,director將請求報文的目標地址(即VIP)改成選定的realserver 地址,同時將報文的目標埠也改成選定的realserver的相應埠,最後將報文請求傳送到指定的realserver。在伺服器端得到資料 後,realserver將資料返給director,而director將報文的源地址和源埠改成VIP和相應埠,然後把資料傳送給使用者,完成整個 負載排程過程。
·  一臺Director:
  版本:Red Hat 6.5
雙網絡卡: 
eth0: VIP:192.168.43.1/24(真實生產環境下一定將閘道器指向運營商的公網IP)
eth2:
DIP:172.25.53.1/24(此IP必須和後臺的RealSever在同一個網段內) · 兩臺RealServer: · 版本:Red Hat 6.5單網絡卡: RealServer1:RIP1:172.25.53.2/24(閘道器必須指向Director的DIP) RealServer2: RIP2:172.25.53.3/24(閘道器必須執行Director的DIP)
在Director伺服器上安裝ipvsadmin工具,此處我們使用RedHat自帶的rpm包進行安裝
yum install ipvsadm.x86_64
配置網絡卡,並設定IP
[root@server1 ~]# ip addr add 192.168.43.1/24 dev eth2
[root@server1 ~]# ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state
UP qlen 1000 link/ether 52:54:00:07:35:d5 brd ff:ff:ff:ff:ff:ff inet 172.25.53.1/24 brd 172.25.53.255 scope global eth0 inet6 fe80::5054:ff:fe07:35d5/64 scope link valid_lft forever preferred_lft forever 3: eth2: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000 link/ether 52:54:00:de:cc:dc brd ff:ff:ff:ff:ff:ff inet 192.168.43.1/24 scope global eth2 [root@server1 ~]# ip link set up eth2 [root@server1 ~]# ping 192.168.43.250 PING 192.168.43.250 (192.168.43.250) 56(84) bytes of data. 64 bytes from 192.168.43.250: icmp_seq=1 ttl=64 time=0.718 ms 64 bytes from 192.168.43.250: icmp_seq=2 ttl=64 time=0.148 ms ^C --- 192.168.43.250 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1870ms rtt min/avg/max/mdev = 0.148/0.433/0.718/0.285 ms

開啟本機的路由轉發功能

檢視本地路由功能是否開啟(1 開啟 0 關閉)

[[email protected] ~]# sysctl -a |grep ip_forward
net.ipv4.ip_forward = 0
[[email protected] ~]# sysctl -w net.ipv4.ip_forward=1
net.ipv4.ip_forward = 1
[[email protected] ~]# vim /etc/sysctl.conf   永久編輯
配置RealServer伺服器
配置Server2網絡卡,並設定IP
[[email protected] ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0 
DEVICE="eth0"
BOOTPROTO="static"
ONBOOT="yes"
IPADDR=172.25.53.2
PREFIX=24
TYPE=Ethernet
GATEWAY=172.25.53.250
NM_CONTROLLED=yes
重啟
[[email protected] ~]# service network restart
Shutting down interface eth0:                              [  OK  ]
Shutting down loopback interface:                          [  OK  ]
Bringing up loopback interface:                            [  OK  ]
Bringing up interface eth0:  Determining if ip address 172.25.53.2 is already in use for device eth0...
                                                           [  OK  ]
安裝httpd服務

[[email protected] ~]# yum install httpd 
Loaded plugins: product-id, subscription-manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
rhel-source                                              | 3.9 kB     00:00     
Setting up Install Process
Package httpd-2.2.15-29.el6_4.x86_64 already installed and latest version
Nothing to do
[[email protected] ~]# /etc/init.d/httpd start
Starting httpd: httpd: Could not reliably determine the server's fully qualified domain name, using 172.25.53.2 for ServerName
                                                           [  OK  ]
[[email protected] ~]# netstat -an | grep :80 
tcp        0      0 172.25.53.2:44804           172.25.53.250:80            TIME_WAIT   
tcp        0      0 :::80                       :::*                        LISTEN      
訪問本地web是否可以正常訪問
[[email protected] ~]# curl 172.25.53.2
www.westos.org  -server2

清空火牆策略
[[email protected] ~]# iptables -F

Server3與上述相同,ip為172.25.53.3

測試Director是否可以正常訪問Realserver的服務
[[email protected] ~]# curl 172.25.53.2
www.westos.org  -server2
[[email protected] ~]# curl 172.25.53.3
www.westos.org  -server3
測試正常

將RealServer加入Web叢集服務

[root@server1 ~]# ipvsadm -l
IP Virtual Server version 1.2.1 (size=4194304)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
[root@server1 ~]# ipvsadm -A -t 192.168.43.1:80 -s rr
[root@server1 ~]# ipvsadm -a -t 192.168.43.1:80 -r 172.25.53.2:80 -m
[root@server1 ~]# ipvsadm -a -t 192.168.43.1:80 -r 172.25.53.3:80 -m

最終測試

[[email protected] ~]# curl 192.168.43.1
www.westos.org - server3
[[email protected] ~]# curl 192.168.43.1
www.westos.org  -server2
[[email protected] ~]# curl 192.168.43.1
www.westos.org - server3
[[email protected] ~]# curl 192.168.43.1
www.westos.org  -server2

成功

LVS-TUN

LVS、TUN簡介

LVS 是Linux Virtual Server的簡稱,在實際環境中經常作為B/S結構的網路應用中的負載均衡器來使用,工作在7層網路模型中的,網路層,也就是通常說的IP層,由於資料的處理是在Linux核心態完成的,所以相對反向代理伺服器來說,效能一般會高一些;

TUN 是IP Tunneling ,IP隧道的簡稱,它將排程器收到的IP資料包封裝在一個新的IP資料包中,轉交給應用伺服器,然後實際伺服器的返回資料會直接返回給使用者。

優點

TUN模式可以解決DR模式下不能跨網段的問題,甚至可以跨公網進行。

[root@server1 ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 52:54:00:07:35:d5 brd ff:ff:ff:ff:ff:ff
    inet 172.25.53.1/24 brd 172.25.53.255 scope global eth0
    inet6 fe80::5054:ff:fe07:35d5/64 scope link 
       valid_lft forever preferred_lft forever
3: eth2: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000
    link/ether 52:54:00:de:cc:dc brd ff:ff:ff:ff:ff:ff
[root@server1 ~]# ip link set down eth2
[root@server1 ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 52:54:00:07:35:d5 brd ff:ff:ff:ff:ff:ff
    inet 172.25.53.1/24 brd 172.25.53.255 scope global eth0
    inet6 fe80::5054:ff:fe07:35d5/64 scope link 
       valid_lft forever preferred_lft forever
3: eth2: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000
    link/ether 52:54:00:de:cc:dc brd ff:ff:ff:ff:ff:ff

利用ipip建立tunnel(隧道)

[root@server1 ~]# modprobe ipip
[root@server1 ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 52:54:00:07:35:d5 brd ff:ff:ff:ff:ff:ff
    inet 172.25.53.1/24 brd 172.25.53.255 scope global eth0
    inet6 fe80::5054:ff:fe07:35d5/64 scope link 
       valid_lft forever preferred_lft forever
3: eth2: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000
    link/ether 52:54:00:de:cc:dc brd ff:ff:ff:ff:ff:ff
4: tunl0: <NOARP> mtu 1480 qdisc noop state DOWN 
    link/ipip 0.0.0.0 brd 0.0.0.0
[root@server1 ~]# ip link set up tunl0
[root@server1 ~]# ip addr add 172.25.53.100/24 dev tunl0
[root@server1 ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 52:54:00:07:35:d5 brd ff:ff:ff:ff:ff:ff
    inet 172.25.53.1/24 brd 172.25.53.255 scope global eth0
    inet6 fe80::5054:ff:fe07:35d5/64 scope link 
       valid_lft forever preferred_lft forever
3: eth2: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000
    link/ether 52:54:00:de:cc:dc brd ff:ff:ff:ff:ff:ff
4: tunl0: <NOARP,UP,LOWER_UP> mtu 1480 qdisc noqueue state UNKNOWN 
    link/ipip 0.0.0.0 brd 0.0.0.0
    inet 172.25.53.100/24 scope global tunl0

其他兩臺RealServer設定相同
==================
[root@server2 ~]# modprobe ipip
[root@server2 ~]# ip link set up tunl0
[root@server2 ~]# ip addr add 172.25.53.100/24 dev tunl0

[root@server3 ~]# modprobe ipip
[root@server3 ~]# ip link set up tunl0
[root@server3 ~]# ip addr add 172.25.53.100/24 dev tunl0



[[email protected] ~]# /etc/init.d/arptables_jf start
Flushing all current rules and user defined chains:        [  OK  ]
Clearing all current rules and user defined chains:        [  OK  ]
Applying arptables firewall rules:                         [  OK  ]
[[email protected] ~]# sysctl -a|grep rp_filter
net.ipv4.conf.all.rp_filter = 0
net.ipv4.conf.all.arp_filter = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.arp_filter = 0
net.ipv4.conf.lo.rp_filter = 1
net.ipv4.conf.lo.arp_filter = 0
net.ipv4.conf.eth0.rp_filter = 1
net.ipv4.conf.eth0.arp_filter = 0
net.ipv4.conf.tunl0.rp_filter = 1
net.ipv4.conf.tunl0.arp_filter = 0
[[email protected] ~]# sysctl -w net.ipv4.conf.tunl0.rp_filter=0
net.ipv4.conf.tunl0.rp_filter = 0

[[email protected] ~]# /etc/init.d/arptables_jf start
Flushing all current rules and user defined chains:        [  OK  ]
Clearing all current rules and user defined chains:        [  OK  ]
Applying arptables firewall rules:                         [  OK  ]
[[email protected] ~]# sysctl -w net.ipv4.conf.tunl0.rp_filter=0
net.ipv4.conf.tunl0.rp_filter = 0

將RealServer加入Web叢集服務

[root@server1 ~]# ipvsadm -A -t 172.25.53.100:80 -s rr
[root@server1 ~]# ipvsadm -a -t 172.25.53.100:80 -r 172.25.53.2:80 -i
[root@server1 ~]# ipvsadm -a -t 172.25.53.100:80 -r 172.25.53.3:80 -i
[root@server1 ~]# ipvsadm -l
IP Virtual Server version 1.2.1 (size=4194304)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.25.53.100:http rr
  -> server2:http                 Tunnel  1      0          0         
  -> server3:http                 Tunnel  1      0          0    

客戶訪問

[[email protected] ~]# curl 172.25.53.100
www.westos.org - server3
[[email protected] ~]# curl 172.25.53.100
www.westos.org  -server2
[[email protected] ~]# curl 172.25.53.100
www.westos.org - server3
[[email protected] ~]# curl 172.25.53.100
www.westos.org  -server2
[[email protected] ~]# curl 172.25.53.100
www.westos.org - server3
[[email protected] ~]# curl 172.25.53.100
www.westos.org  -server2

相關推薦

LVS-NAT &TUN實現負載均衡

工作原理: 基於NAT機制實現。當用戶請求到達director之後,director將請求報文的目標地址(即VIP)改成選定的realserver 地址,同時將報文的目標埠也改成選定的realserver的相應埠,最後將報文請求傳送到指定的realserver。

Lvs-nat模式實現負載均衡的配置命令及執行過程

一、實驗環境 三臺伺服器,一臺作為 director,兩臺作為 real server,director 有一個外網網絡卡(10.0.172.190) 和一個內網ip(192.168.0.10),兩個 real server 上只有內網 ip (192.168.0.11) 和 (192.168.

LVS-NAT模型實現負載均衡

前言 前篇文章我們主要講解了LVS的理論知識,包括LVS來源、宗旨、三種模型的架構以及LVS核心空間的十種演算法,今天我們來進行實踐的LVS中三種模型中的NAT模型的架構以及實現方式。(實驗環境以Web叢集作為實驗物件) 環境 此處我們LVS-N

LVS/NAT方式實現負載均衡

LVS/NAT 在一組伺服器前有一個排程器,它們是通過 Switch/HUB 相連線的。這些伺服器提供相同的網路服務、相同的內容,即不管請求被髮送到哪一臺伺服器,執行結果是一樣的。服務的內容可以複製到每臺伺服器的本地硬碟上,可以通過網路檔案系統(如 NFS)共享,也可以通過

使用Lvs DR模式實現負載均衡

LVS是Linux VirtualServer的簡寫,意即Linux虛擬伺服器,適應LVS可以構建高效能的負載均衡系統,LVS有三種模式即:LVS/NAT(網路地址轉換)、LVS/TUN(IP隧道)、LVS/DR(直接路由),通常用的是DR模式,下面介紹一下DR模式的配置方式。    假設測試環境:使用虛擬

lvs+keepalived實現負載均衡

keepalive 裝載 announce log loopback -s scheduler sad apr LVS簡介: lvs是負載均衡較常用的軟件之一,lvs官方提供了一個命名的約定: vip:虛擬ip地址,縮寫是vip,vip是負載均衡器對外提供服務的ip。 ri

LVS(DR) + Keepalived 實現負載均衡

lvs keepalived apacheLVS(DR) + Keepalived 實現負載均衡高可用一、為什麽要使 用負載均衡技術?1、 系統高可用性2、 系統可擴展性3、 負載均衡能力 LVS+keepalived能很好的實現以上的要求,LVS提 供負載均衡,keepalived提供健康檢查,

LVS實現負載均衡

lvs實現負載均衡一、 LVS簡介LVS是Linux Virtual Server的簡稱,也就是Linux虛擬服務器, 是一個由章文嵩博士發起的自由軟件項目,它的官方站點是www.linuxvirtualserver.org。現在LVS已經是 Linux標準內核的一部分,在Linux2.4內核以前,使用LVS

項目實戰02:LVS 實現負載均衡

請求報文 directory shared _for ipvsadm 路由轉發 更多 1-1 targe 目錄 實現基於LVS負載均衡集群的電商網站架構 實戰一:LVS的NAT模式實現負載均衡 實戰二:LVS的DR 模式實現負載均衡 實戰三:實現80、443

使用LVS實現負載均衡原理及安裝配置詳解

配置 png 負載均衡 iptables .cn 詳解 文章 配置詳解 logs LVS是一個開源軟件,由章文嵩博士於1998年5月創立,可以實現Linux平臺下的簡單負載均衡。LVS是Linux Virtual Server的簡寫,是一個虛擬的服務器集群系統。LVS是基於

Keepalived + LVS 實現負載均衡

chmod 成功 keepalive 健康檢查 ipaddr 高可用 得到 sse cap 一、Keepalived 與 LVS 簡單工作原理了解 1、Keepalived 管理LVS負載均衡軟件,Keepalived 可以通過讀取自身的配置文件,實現通過更底層的接口直接管

Keepalived結合LVS-DR實現負載均衡高可用集群

table 開啟 strong 部署 toc ifconf cal 指向 protocol 簡介 Keepalived期初是專門針對LVS設計的一款強大的輔助工具,主要用來提供故障切換和健康檢查功能—判斷LVS負載調度器、節點服務器的可用性,及時隔離並替換新的服務器,當故障

Keepalived + LVS + LAMP 高可用負載均衡叢集實現

一、Keepalived 簡介           Keepalived 是一個用 C 語言編寫的路由軟體。它最初是專門為 LVS 負載均衡軟體設計的,用來管理並監控 LVS 集群系統中各個服務節點的狀態,後來又加

LVS 實現負載均衡的原理

LVS 實現負載均衡的原理 LVS 負載均衡           負載均衡叢集是 Load Balance 叢集。是一種將網路上的訪問流量分佈於各

使用 LVS 實現負載均衡原理及安裝配置詳解

負載均衡叢集是 load balance 叢集的簡寫,翻譯成中文就是負載均衡叢集。常用的負載均衡開源軟體有nginx、lvs、haproxy,商業的硬體負載均衡裝置F5、Netscale。這裡主要是學習 LVS 並對其進行了詳細的總結記錄。 一、負載均衡LVS基本介

lvs負載均衡的四種模式原理,LVS之DR模型,LVS+keeaplived實現負載均衡,keepalived實現高可用

一,LVS的簡介: Linux virtual system,是由目前阿里著名工程師章文嵩開發的一寬開源的軟體。LVS工作在一臺server上提供Directory(負載均衡器)的功能,它本身並不提供任何服務,只是把特定的請求轉發給對應的realserver(

LVS-DR簡單模型實現負載均衡

LVS-DR模型:基於直接路由的web服務 基本的原理:Director和RealServer必須在物理上有一個網絡卡通過區域網相連(高速交換機或者HUB),Director只負責排程請求,響應報文則由RealServer直接返回給Client。使用者的IP為

LVS+keepalived 實現負載均衡

一、資源規劃     在開始搭建之前,我們首先需要準備和規劃好搭建所需的資源。因為效能等方面的考慮,我們使用當前比較流行的DR模式。 搭建前我們需要了解,搭建環境的機器必須在同一網段內,此次環境搭建需要1個VIP和四臺機器(我這裡使用四臺VM) 具體清單如下: 伺服

LVS實現負載均衡及keepalive實現高可用

一.叢集(cluster)以及型別;       當後端伺服器承受不住訪問的壓力,提高伺服器效能的解決方案會極大增加成本時,人們提出了橫向擴充套件的解決方案。增加一臺或幾臺伺服器,提供相同的服務,通過前段分發器將訪問量均勻的分配到後臺伺服器上。這種多臺伺服器組成的陣列集合就叫

keepalived+lvs+mysql cluster架構實現負載均衡

一、環境 用途 ip os memory 排程器 172.16.48.204 CentOS 5.5 64bit 32G sql節點1 172.16.48.206 CentOS 5.5 64bit 32G sql節點2 172.16.48.207 CentOS 5.5 64bit 32G sql節點3 1