A. linux裡面iptables怎麼實現負載均衡
1. iptables實現負載均衡的方式:
在Linux中使用iptables完成tcp的負載均衡有兩種模式:隨機、輪詢
The statistic mole support two different modes:
random:(隨機)
the rule is skipped based on a probability
nth:(輪詢)
the rule is skipped based on a round robin algorithm
2. example
B. 如何在Linux上使用HAProxy配置HTTP負載均衡系統
TTP負載均衡簡介
HTTP負載均衡是一種網路解決方案,負責在託管相同應用內容的幾台伺服器之間分配進入的HTTP或HTTPS流量。由於在多台可用伺服器之間均衡了應用請求,負載均衡系統就能防止任何應用伺服器變成單一故障點,因而提高了整體的應用可用性和響應能力。它還讓你可以隨著不斷變化的工作負載,輕松地縮小/擴大部署的應用系統的規模,只需添加或刪除額外的應用伺服器。
哪裡使用負載均衡、何時使用?
由於負載均衡系統改進了伺服器的利用率,最大限度地提高了可用性,只要你的伺服器開始面臨繁重負載,或者正為一個較龐大的項目規劃架構,就應該使用它。事先規劃好負載均衡系統的用途是個好習慣。那樣,未來你需要擴展環境規模時,它會證明其用途。
HAProxy是什麼東東?
HAProxy是一種流行的開源負載均衡和代理系統,面向GNU/Linux平台上的TCP/HTTP伺服器。HAProxy採用了單一線程的事件驅動型架構而設計,它能夠輕松地處理10G網卡線路速度,現廣泛應用於許多生產環境中。其功能特性包括:自動檢查健康狀況、可定製的負載均衡演算法、支持HTTPS/SSL以及會話速率限制等。
我們在本教程中要達到什麼樣的目的?
在本教程中,我們將逐步介紹為HTTP網站伺服器配置基於HAProxy的負載均衡系統這個過程。
前提條件
你至少需要一台(最好是兩台)網站伺服器來證實所搭建負載均衡系統的功能。我們假設,後端HTTP網站伺服器已經搭建並運行起來。
將HAProxy安裝到Linux上
就大多數發行版而言,我們可以使用你所用發行版的軟體包管理器來安裝HAProxy。
將HAProxy安裝到Debian上
在Debian中,我們需要為Wheezy添加向後移植功能。為此,請在/etc/apt/sources.list.d中創建一個名為「backports.list」的新文件,其內容如下:
deb http://cdn.debian.net/debian wheezybackports main
更新你的軟體庫數據,並安裝HAProxy。
# apt get update
# apt get install haproxy
將HAProxy安裝到Ubuntu上
# apt get install haproxy
將HAProxy安裝到CentOS和RHEL上
# yum install haproxy
配置HAProxy
在本教程中,我們假設有兩台HTTP網站伺服器已搭建並運行起來,其IP地址分別為192.168.100.2和192.168.100.3。我們還假設,負載均衡系統將在IP地址為192.168.100.4的那台伺服器處進行配置。
為了讓HAProxy發揮功用,你需要更改/etc/haproxy/haproxy.cfg中的幾個項目。這些變更在本章節中予以描述。萬一某個配置對不同的GNU/Linux發行版而言有所不同,會在相應段落中加以註明。
1. 配置日誌功能
你首先要做的工作之一就是,為你的HAProxy建立合適的日誌功能,這對將來進行調試大有用處。日誌配置內容位於/etc/haproxy/haproxy.cfg的global部分。下面這些是針對特定發行版的指令,用於為HAProxy配置日誌。
CentOS或RHEL:
要想在CentOS/RHEL上啟用日誌功能,把:
log 127.0.0.1 local2
換成:
log 127.0.0.1 local0
下一步,在/var/log中為HAProxy創建單獨的日誌文件。為此,我們需要改動當前的rsyslog配置。為了讓配置簡單而清楚,我們將在/etc/rsyslog.d/中創建一個名為haproxy.conf的新文件,其內容如下。
$ModLoad imudp
$UDPServerRun 514
$template Haproxy,"%msg%\n"
local0.=info /var/log/haproxy.log;Haproxy
local0.notice /var/log/haproxystatus.log;Haproxy
local0.* ~
該配置將把基於$template的所有HAProxy消息隔離到/var/log中的日誌文件。現在,重啟rsyslog,讓變更內容生效。
# service rsyslog restart
Debian或Ubuntu:
要想在Debian或Ubuntu上為HAProxy啟用日誌功能,把:
log /dev/log local0
log /dev/log local1 notice
換成:
log 127.0.0.1 local0
下一步,為HAProxy配置單獨的日誌文件,編輯/etc/rsyslog.d/中一個名為haproxy.conf的文件(或者Debian中的49-haproxy.conf),其內容如下。
$ModLoad imudp
$UDPServerRun 514
$template Haproxy,"%msg%\n"
local0.=info /var/log/haproxy.log;Haproxy
local0.notice /var/log/haproxystatus.log;Haproxy
local0.* ~
該配置將把基於$template的所有HAProxy消息隔離到/var/log中的日誌文件。現在,重啟rsyslog,讓變更內容生效。
# service rsyslog restart
2. 設置默認值
下一步是為HAProxy設置默認變數。找到/etc/haproxy/haproxy.cfg中的defaults部分,把它換成下列配置。
log global
mode http
option httplog
option dontlognull
retries 3
option redispatch
maxconn 20000
contimeout 5000
clitimeout 50000
srvtimeout 50000
上述配置推薦HTTP負載均衡器使用,但可能不是最適合你環境的解決方案。如果那樣,請參閱HAProxy參考手冊頁,進行適當的改動和調整。
3. 網站伺服器集群的配置
網站伺服器集群(Webfarm)的配置定義了可用的HTTP伺服器集群。我們所建負載均衡系統的大部分設置都將放在這里。現在,我們將創建一些基本的配置,我們的節點將在這里加以定義。把從frontend部分到文件末尾的所有配置換成下列代碼:
listen webfarm *:80
mode http
stats enable
stats uri /haproxy?stats
stats realm Haproxy\ Statistics
stats auth haproxy:stats
balance roundrobin
cookie LBN insert indirect nocache
option httpclose
option forwardfor
server web01 192.168.100.2:80 cookie node1 check
server web02 192.168.100.3:80 cookie node2 check
「listen webfarm *:80」這一行定義了我們的負載均衡系統將偵聽哪些介面。出於本教程的需要,我將該值設為「*」,這讓負載均衡系統偵聽我們的所有介面。在實際場景下,這可能不合意,應該換成可從互聯網來訪問的某個介面。
stats enable
stats uri /haproxy?stats
stats realm Haproxy\ Statistics
stats auth haproxy:stats
上述設置聲明,可以在http://<load-balancer-IP>/haproxy?stats處訪問負載均衡系統的統計數字。這種訪問由簡單的HTTP驗證以及登錄名「haproxy」和密碼「stats」來確保安全。這些設置應該換成你自己的登錄信息。如果你不想讓這些統計數字被人看到,那麼可以完全禁用它們。
下面是HAProxy統計數字的一個例子。
「balance roundrobin」這一行定義了我們將使用哪種類型的負載均衡。在本教程中,我們將使用簡單的輪叫調度演算法,這對HTTP負載均衡來說完全綽綽有餘。HAProxy還提供了其他類型的負載均衡:
•leastconn:連接數最少的伺服器優先接收連接。
•source:對源IP地址進行哈希處理,用運行中伺服器的總權重除以哈希值,即可決定哪台伺服器將接收請求。
•uri:URI的左邊部分(問號前面)經哈希處理,用運行中伺服器的總權重除以哈希值。所得結果決定哪台伺服器將接收請求。
•url_param:變數中指定的URL參數將在每個HTTP GET請求的查詢串中進行查詢。你基本上可以將使用蓄意製作的URL(crafted URL)的請求鎖定於特定的負載均衡節點。
•hdr(name):HTTP頭<name> 將在每個HTTP請求中進行查詢,被定向到特定節點。
「cookie LBN insert indirect nocache」這一行讓我們的負載均衡系統存儲持久性cookie,這讓我們得以准確查明集群中的哪個節點用於某一個會話。這些節點cookie將與指定的名稱一並存儲起來。在我們這個例子中,我使用了「LBN」,但你可以指定自己喜歡的任意名稱。節點將為該cookie把字元串作為一個值而存儲起來。
server web01 192.168.100.2:80 cookie node1 check
server web02 192.168.100.3:80 cookie node2 check
上述部分對網站伺服器節點集群進行了定義。每台伺服器都用內部名稱(比如web01和web02)、IP地址和獨特的cookie串來表示。cookie串可以定義為你需要的任何名稱。我使用了簡單的node1、node2 ... node(n)。
啟動HAProxy
你完成了配置工作後,可以啟動HAProxy,驗證一切按預期運行。
在Centos/RHEL上啟動HAProxy
使用下列指令,讓HAProxy能夠在系統啟動後啟動,並打開它:
# chkconfig haproxy on
# service haproxy start
當然,別忘了啟用防火牆中的埠80,如下所示。
CentOS/RHEL 7上的防火牆:
# firewallcmd permanent zone=public addport=80/tcp
# firewallcmd reload
CentOS/RHEL 6上的防火牆:
把下面這一行添加到/etc/sysconfig/iptables中的這部分「:OUTPUT ACCEPT」:
A INPUT m state state NEW m tcp p tcp dport 80 j ACCEPT
然後重啟iptables:
# service iptables restart
在Debian上啟動HAProxy
使用下列指令啟動HAProxy:
# service haproxy start
別忘了啟用防火牆中的埠80,為此把下面這一行添加到/etc/iptables.up.rules:
A INPUT p tcp dport 80 j ACCEPT
在Ubuntu上啟動HAProxy
讓HAProxy能夠在系統啟動後啟動,只要在/etc/default/haproxy中將「ENABLED」選項設為「1」:
ENABLED=1
啟動HAProxy:
# service haproxy start
然後啟用防火牆中的埠80:
# ufw allow 80
測試HAProxy
為了檢查HAproxy是否在正常工作,我們可以執行下列步驟:
首先,用下列內容准備好test.php文件:
<?php
header('Content-Type: text/plain');
echo "Server IP: ".$_SERVER['SERVER_ADDR'];
echo "\nX-Forwarded-for: ".$_SERVER['HTTP_X_FORWARDED_FOR'];
?>
該PHP文件將告訴我們哪台伺服器(即負載均衡系統)轉發請求,哪台後端網站伺服器實際處理請求。
把該PHP文件放到這兩台後端網站伺服器的根目錄下。現在,使用curl命令,從負載均衡系統(192.168.100.4)提取這個PHP文件。
$ curl http://192.168.100.4/test.php
我們多次運行這個命令時,應該會看到下面兩個輸出交替出現(由於輪叫調度演算法)。
Server IP: 192.168.100.2
X-Forwarded-for: 192.168.100.4
Server IP: 192.168.100.3
X-Forwarded-for: 192.168.100.4
如果我們停止這兩台後端網站伺服器中的其中一台,curl命令應該仍會執行,將請求定向到另一台可用的網站伺服器。
結束語
至此,你應該有了一套完全實用的負載均衡系統,能夠在輪叫循環模式下為你的網站節點提供請求。與往常一樣,你可以隨意更改配置,讓它更適合自己的基礎設施。希望本教程幫助你讓自己的網站項目具有更強的抗壓力和更高的可用性。
正如大家已經注意到的那樣,本教程所含的設置適用於僅僅一套負載均衡系統。這意味著,我們把一個單一故障點換成了另一個單一故障點。在實際場景下,你應該部署至少兩套或三套負載均衡系統,以防範可能出現的任何故障,但這不在本教程的討論范圍之內。
C. linux 多線路防火牆負載均衡具體是哪個更好
在常規運維工作中,經常會運用到負載均衡服務。負載均衡分為四層負載和七層負載,那麼這兩者之間有什麼不同?
廢話不多說,詳解如下:
一,什麼是負載均衡
1)負載均衡(Load Balance)建立在現有網路結構之上,它提供了一種廉價有效透明的方法擴展網路設備和伺服器的帶寬、增加吞吐量、加強網路數據處理能力、提高網路的靈活性和可用性。負載均衡有兩方面的含義:首先,大量的並發訪問或數據流量分擔到多台節點設備上分別處理,減少用戶等待響應的時間;其次,單個重負載的運算分擔到多台節點設備上做並行處理,每個節點設備處理結束後,將結果匯總,返回給用戶,系統處理能力得到大幅度提高。
2)簡單來說就是:其一是將大量的並發處理轉發給後端多個節點處理,減少工作響應時間;其二是將單個繁重的工作轉發給後端多個節點處理,處理完再返回給負載均衡中心,再返回給用戶。目前負載均衡技術大多數是用於提高諸如在Web伺服器、FTP伺服器和其它關鍵任務伺服器上的Internet伺服器程序的可用性和可伸縮性。
二,負載均衡分類
1)二層負載均衡(mac)
根據OSI模型分的二層負載,一般是用虛擬mac地址方式,外部對虛擬MAC地址請求,負載均衡接收後分配後端實際的MAC地址響應)
2)三層負載均衡(ip)
一般採用虛擬IP地址方式,外部對虛擬的ip地址請求,負載均衡接收後分配後端實際的IP地址響應)
3)四層負載均衡(tcp)
在三次負載均衡的基礎上,用ip+port接收請求,再轉發到對應的機器。
4)七層負載均衡(http)
根據虛擬的url或IP,主機名接收請求,再轉向相應的處理伺服器)。
我們運維中最常見的四層和七層負載均衡,這里重點說下這兩種負載均衡。
1)四層的負載均衡就是基於IP+埠的負載均衡:在三層負載均衡的基礎上,通過發布三層的IP地址(VIP),然後加四層的埠號,來決定哪些流量需要做負載均衡,對需要處理的流量進行NAT處理,轉發至後台伺服器,並記錄下這個TCP或者UDP的流量是由哪台伺服器處理的,後續這個連接的所有流量都同樣轉發到同一台伺服器處理。
對應的負載均衡器稱為四層交換機(L4 switch),主要分析IP層及TCP/UDP層,實現四層負載均衡。此種負載均衡器不理解應用協議(如HTTP/FTP/MySQL等等)。
實現四層負載均衡的軟體有:
F5:硬體負載均衡器,功能很好,但是成本很高。
lvs:重量級的四層負載軟體
nginx:輕量級的四層負載軟體,帶緩存功能,正則表達式較靈活
haproxy:模擬四層轉發,較靈活
2)七層的負載均衡就是基於虛擬的URL或主機IP的負載均衡:在四層負載均衡的基礎上(沒有四層是絕對不可能有七層的),再考慮應用層的特徵,比如同一個Web伺服器的負載均衡,除了根據VIP加80埠辨別是否需要處理的流量,還可根據七層的URL、瀏覽器類別、語言來決定是否要進行負載均衡。舉個例子,如果你的Web伺服器分成兩組,一組是中文語言的,一組是英文語言的,那麼七層負載均衡就可以當用戶來訪問你的域名時,自動辨別用戶語言,然後選擇對應的語言伺服器組進行負載均衡處理。
對應的負載均衡器稱為七層交換機(L7 switch),除了支持四層負載均衡以外,還有分析應用層的信息,如HTTP協議URI或Cookie信息,實現七層負載均衡。此種負載均衡器能理解應用協議。
實現七層負載均衡的軟體有:
haproxy:天生負載均衡技能,全面支持七層代理,會話保持,標記,路徑轉移;
nginx:只在http協議和mail協議上功能比較好,性能與haproxy差不多;
apache:功能較差
Mysql proxy:功能尚可。
總的來說,一般是lvs做4層負載;nginx做7層負載;haproxy比較靈活,4層和7層負載均衡都能做
三、兩者之間的區別
1)從技術原理上分析
所謂四層負載均衡,也就是主要通過報文中的目標地址和埠,再加上負載均衡設備設置的伺服器選擇方式,決定最終選擇的內部伺服器。
以常見的TCP為例,負載均衡設備在接收到第一個來自客戶端的SYN 請求時,即通過上述方式選擇一個最佳的伺服器,並對報文中目標IP地址進行修改(改為後端伺服器IP),直接轉發給該伺服器。TCP的連接建立,即三次握手是客戶端和伺服器直接建立的,負載均衡設備只是起到一個類似路由器的轉發動作。在某些部署情況下,為保證伺服器回包可以正確返回給負載均衡設備,在轉發報文的同時可能還會對報文原來的源地址進行修改。
總結:從上面的對比看來四層負載與七層負載最大的區別就是效率與功能的區別。四層負載架構設計比較簡單,無需解析具體的消息內容,在網路吞吐量及處理能力上會相對比較高,而七層負載均衡的優勢則體現在功能多,控制靈活強大。在具體業務架構設計時,使用七層負載或者四層負載還得根據具體的情況綜合考慮。
D. Linux系統如何配置鏈路聚合,實現流量負載均衡
本文主要解決3個問題:
第一、鏈路聚合的定義和作用是什麼?
第二、如何配置鏈路聚合?
第三、鏈路聚合的實際應用場景有那些?
第一、鏈路聚合的定義和作用是什麼?
答:鏈路聚合的定義:鏈路聚合,官方稱聚合鏈接,民間又稱網卡組隊,具體指的是將多個網卡綁定在一起組建一個虛擬網卡,外界與虛擬網卡進行通信,虛擬網卡再將信息進行分發;
鏈路聚合的作用:可以實現輪詢式的流量負載均衡和熱備份的作用;
舉個栗子:
鏈路聚合就好比是一個包工頭,這個包工頭為了多賺錢,多接訂單,肯定需要找多個小弟;
這樣就可以保障,萬一有一個小弟感冒了,不能上班,這時有其他小弟可以頂上;
當客戶需要蓋房子的時候,直接找包工頭就好了,不需要一個一個的去找建築工人;
第二、如何配置鏈路聚合?
答:
1、配置鏈路聚合的命令是:
nmcli connection add type team con-name team0 ifname team0 autoconnect yes config '{"runner": {"name": "activebackup"}}'
譯為:nmcli connection 添加 類型 team(組隊)
配置文件名 team0 網卡名 team0 每次開機自動啟用
配置運行模式 熱備份模式
整體譯為:為系統網卡添加一個 team (團隊),團隊名稱叫 team0 ,配置文件也叫 team0 , 並且設置為開機自動啟動,配置運行模式為熱備份模式;
2、為鏈路聚合添加成員的命令是:
nmcli connection add type team-slave con-name team0-1 ifname eth1 master team0 ;
nmcli connection add type team-slave con-name team0-2 ifname eth2 master team0;
注釋:nmcli connection 添加 類型為 team的成員
配置文件名 team0-1 網卡為 eth1 主設備為 team0
整體譯為:為主設備team0添加兩張網卡,eth1和eth2;
3、為tem0配置ip地址的命令是:
nmcli connection modify team0 ipv4.method manual ipv4.addresses
「IP 地址 / 子網掩碼」 connection.autoconnect yes
4、激活team0的命令是:
nmcli connection up team0
第三、鏈路聚合的實際應用場景有那些?
答:當伺服器提供比較重要的服務時,只准備一張網卡是遠遠不夠的,因為一但網卡出現故障,客戶就無法訪問,這就會造成客戶流失,體驗感差;
這個時候就可以運用鏈路聚合的方法來解決,將多張網卡綁定在一起創建一張虛擬網卡,從而實現網卡熱備份,流量輪詢式負載均衡;
以此來保障伺服器能夠正常提供服務,給用戶以良好的體驗;
注意事項:
在創建虛擬網卡和添加成員時,如果命令敲錯了,一定要刪除錯誤的信息,以免造成通信混亂;
刪除的命令是:nmcli connection delete team0 (team0或team x)
查看team0的信息命令是: teamdctl team0 state
以上.......
(本篇完)
祝:開心!
羅貴
2019-03-24