負載均衡集羣介紹,LVS介紹, LVS調度算法,LVS NAT模式搭建

負載均衡集羣介紹:

負載均衡集羣:簡單地說就是讓多臺服務器均衡地去承載壓力。html

實現負載均衡的開源軟件有:LVS,keepalived,haproxy,nginx等mysql

其中相對於(網絡OSI七層模型),LVS屬於四層,Nginx屬於七層,haproxy既能夠認爲四層,也能夠認爲是七層。linux

keepalived的負載均衡功能其實就是lvsnginx

lvs這種4層的負載均衡是能夠分發出80外的其餘端口通訊的,好比Mysql,而七層nginx僅僅支持http.https,mail,haproxy也支持mysql這種。算法

相比較來講,LVS這種4層的更穩定,能承受更多的情趣,而Nginx這種7層的更加靈活,能實現更多的個性化需求。sql

 

 

LVS介紹:

LVS由國人章文嵩開發,流行度不亞於httpd,基於TCP/IP作的路由和轉發,穩定性和效率很高vim

LVS有三種常見的模式:NAT,DR,IP Tunnel後端

LVS架構中有一個核心角色叫作分發器(Load Balancer),它用來分發用戶的請求,還有諸多處理用戶請求的服務器(RealServer,簡稱rs)bash

 

LVS的NAT模式:

這種模式藉助iptables的nat表來實現,用戶的請求到分發器後,經過預設的iptables規則,把請求的數據包轉發到後端的rs上去。服務器

rs須要設定網關爲分發器的內網ip,用戶請求的數據包和返回的用戶的數據包所有通過分發器,因此分發器成爲瓶頸。

優勢:在NAT模式中,只須要分發器有公網Ip,分發器和rs之間能夠用內網通訊,因此比較節省公網ip資源

缺點:分發器成爲瓶頸,請求量不能太大。規模保持在10臺左右。

 

LVS IP Tunnel模式:

咱們能夠想象分發器和每一個rs之間創建了一個虛擬通道。這種模式,須要有一個公共的IP配置在分發器和全部rs上,咱們把它叫作vip,

原理是客戶端請求的目標IP爲vip,分發器接收到請求數據包後,會對數據包作一個交工,會把目標IP由vip更改成rs的IP,這樣數據包就到了rs上。

rs接受數據包後,會還原原始數據包,這樣目標IP爲vip,由於全部的rs上配置了這樣一個vip,因此它會認爲是它本身。

 

LVS DR模式:

這種模式也須要一個公共的ip配置在分發器和全部rs上,也就是vip,

和IP Tunnel不一樣的是,它會把全部的MAC地址修改成rs的MAC,

rs接收數據包後,會還原原始數據包,這樣目標IP爲vip,由於全部rs上配置了這個vip,因此它會認識是它本身。

 

 

LVS調度算法:

經常使用的4種

輪詢:Round-Robin rr                        (任務均衡的分發到rs上)

加權輪詢:Weight Round-Robin wrr                 (帶權重的輪詢,例如一個rs的配置好,你能夠將它權重設置高一點)

最小鏈接:Least-Connection lc                     (把新的任務發送到請求數少的rs上)

加權最小鏈接:Weight Least-Connection wlc           (帶權重的最小鏈接)

不經常使用的4種

基於局部性的最小鏈接:Locality-Based Least Connections lblc    

帶複製的基於局部性最小連接:Locality-Based Least Connections with Replication lblcr

目標地址散列調度:Destination Hashing dh

源地址散列調度:Source Hashing sh

 

 

LVS NAT模式搭建:

準備3臺機器

A機器爲分發器,也叫調度器(簡寫爲dir)

A機器 192.168.64.128         外網地址爲192.168.64.128  (主機模式的網卡)

B機器  192.168.64.100

C機器  192.168.64.200

B機器和C機器的網關須要設置爲192.168.209.132        (設置爲和A機器的網卡IP如出一轍)

 

A主機配置:

配置一下ens37主機模式的IP不須要設置網關

配置完成之後重啓一下網卡

Windows上面能夠成功ping通說明網絡正常

而後接下來須要關閉三臺機器的防火牆。(順便都給三臺機器裝上 yum install -y iptables-services)

[root@aming-01 ~]# systemctl stop firewalld             #中止防火牆服務
[root@aming-01 ~]# systemctl disable firewalld         #完全關閉防火牆
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@aming-01 ~]# iptables -nvL          # 查看防火牆規則,出現下面內容說明防火牆關閉
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

防火牆關閉完之後再關閉三臺機器的selinux。

[root@aming-01 ~]# setenforce 0        #暫時關閉selinux
[root@aming-01 ~]# vi /etc/selinux/config              #保險起見修改配置文件永久關閉selinux

 

還須要把B和C機器的網關設置成A機器的IP

vi /etc/sysconfig/network-scripts/ifcfg-ens33      =配置IP

[root@aminglinux-03 ~]# route -n         #檢測網關
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.209.132 0.0.0.0         UG    100    0        0 ens33
192.168.209.0   0.0.0.0         255.255.255.0   U     100    0        0 ens33


 

分發器上安裝ipvsdam

[root@aming-01 sbin]# yum install -y ipvsadm              #在A(dir)機器只須要安裝在A機器

 

而後在A機器上面編輯一個腳本

vim /usr/local/sbin/lvs_nat.sh

#腳本文件內容,注意區分本身的網卡名稱
#! /bin/bash
# director 服務器上開啓路由轉發功下面一行就是
echo 1 > /proc/sys/net/ipv4/ip_forward
# 關閉icmp的重定向(假裝功能)
echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/default/send_redirects
# 注意區分網卡名字,阿銘的兩個網卡分別爲ens33和ens37
echo 0 > /proc/sys/net/ipv4/conf/ens33/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/ens37/send_redirects
# director 設置nat防火牆
iptables -t nat -F
iptables -t nat -X
iptables -t nat -A POSTROUTING -s 192.168.133.0/24  -j MASQUERADE
# director設置ipvsadm
IPVSADM='/usr/sbin/ipvsadm'
$IPVSADM -C
$IPVSADM -A -t 192.168.147.144:80 -s rr        #表示算法上面有具體講解
$IPVSADM -a -t 192.168.147.144:80 -r 192.168.133.132:80 -m -w 1
$IPVSADM -a -t 192.168.147.144:80 -r 192.168.133.133:80 -m -w 1

而後運行一下腳本,沒有輸出通常說明沒問題

[root@aming-01 ~]# sh /usr/local/sbin/lvs_nat.sh

 

B和C機器上面都須要安裝nginx服務

netstat -lntp 查看80端口是不是nginx 若是不是那麼啓動nginx服務

/etc/init.d/nginx start     = 啓動nginx服務

 

B機器

C機器

測試: 以下說明搭建Ok

[root@aming-01 ~]# curl 192.168.64.128
aminglinx03
[root@aming-01 ~]# curl 192.168.64.128
aminglinux02

 

 

擴展

lvs 三種模式詳解 : http://www.it165.net/admin/html/201401/2248.html 
lvs幾種算法: http://www.aminglinux.com/bbs/thread-7407-1-1.html
關於arp_ignore和 arp_announce http://www.cnblogs.com/lgfeng/archive/2012/10/16/2726308.html
lvs原理相關的:   http://blog.csdn.net/pi9nc/article/details/23380589

相關文章
相關標籤/搜索