一般是指2臺機器啟動著完全相同的業務系統,當有一台機器down機了,另外一台伺服器就能快速的接管,對於訪問的使用者是無感知的。
比如公司的網路是通過閘道器進行上網的,那麼如果該路由器故障了,閘道器無法**報文了,此時所有人都無法上網了,怎麼辦?
通常做法是給路由器增加一台備節點,但是問題是,如果我們的主閘道器master故障了,使用者是需要手動指向backup的,如果使用者過多修改起來會非常麻煩。
問題一:假設使用者將指向都修改為backup路由器,那麼master路由器修好了怎麼辦?
問題二:假設master閘道器故障,我們將backup閘道器配置為master閘道器的ip是否可以?
其實是不行的,因為pc第一次通過arp廣播尋找到master閘道器的mac位址與ip位址後,會將資訊寫到arp的快取表中,那麼pc之後連線都是通過那個快取表的資訊去連線,然後進行資料報的**,即使我們修改了ip但是mac位址是唯一的,pc的資料報依然會傳送給master。(除非是pc的arp快取表過期,再次發起arp廣播的時候才能獲取新的backup對應的mac位址與ip位址)
如何才能做到出現故障自動轉移,此時vrrp就出現了,我們的vrrp其實是通過軟體或者硬體的形式在master和backup外面增加乙個虛擬的mac位址(vmac)與虛擬ip位址(vip),那麼在這種情況下,pc請求vip的時候,無論是master處理還是backup處理,pc僅會在arp快取表中記錄vmac與vip的資訊。
高可用應用在上圖所示架構的負載均衡中:
1.硬體通常使用 f5
2.軟體通常使用 keepalived
安裝在兩台 負載均衡伺服器 中,可以虛擬出乙個公用的 ip位址 ,使用者訪問公用ip,可以訪問到主**伺服器(master),主**伺服器宕機後,回自動使使用者訪問的是備用**伺服器(backup),這樣使用者就不會感覺到訪問異常
vrrp協議會在乙個區域網中進行廣播,
vrrp是一種容錯協議,它保證當主機的下一跳路由器出現故障時,由另一台路由器來代替出現故障的路由器進行工作,從而保持網路通訊的連續性和可靠性。
簡化網路管理。在具有多播或廣播能力的區域網(如乙太網)中,借助vrrp能在某台裝置出現故障時仍然提供高可靠的預設鏈路,有效避免單一鏈路發生故障後網路中斷的問題,而無需修改動態路由協議、路由發現協議等配置資訊,也無需修改主機的預設閘道器配置。
安裝
高可用作用在負載均衡上,也就是反**伺服器中,所以在 lb01 和 lb02 兩台負載均衡伺服器上都安裝 keepalived
[root@lb01 ~]# yum install keepalived -y
修改 keepalived 配置檔案
keepalived 配置檔案目錄 : /etc/keepalived/keepalived.conf
! configuration file for keepalived
# 全域性配置
global_defs
# 檢測指令碼
vrrp_script check_nginx
# 配置vrrp協議
vrrp_instance vi_1
# 設定vip
virtual_ipaddress
# 呼叫檢查
track_script
}
啟動 keepalived
測試
通過vip位址 192.168.15.3 仍然能訪問到**伺服器 192.168.15.5
腦裂問題 : 兩台高可用伺服器在指定時間內,無法互相檢查到對方的心跳而各自啟動故障轉移功能。
兩台高可用伺服器在指定時間內,無法互相檢查到對方的心跳而各自啟動故障轉移功能。
1、如果nginx宕機怎麼辦?
想辦法告訴keepalived,nginx的情況。
2、區域網之內,keepalived無法相互廣播,怎麼辦?
判斷vip是否可以ping的通
補充:
$? : 上一條命令執行的結果。
解決nginx宕機問題
1、如果nginx宕機怎麼辦?
想辦法告訴keepalived,nginx的情況。
1、建立執行指令碼檔案checkng.sh
[root@lb01 ~]# vim checkng.sh
#!/bin/bash
ps -ef | grep -q [n]ginx
if [ $? -ne 0 ];then
# 代表nginx未正常啟動
systemctl start nginx &>/dev/null
sleep 2
ps -ef | grep -q [n]ginx
if [ $? -ne 0 ];then
systemctl stop keepalived
fifi
2、 把指令碼檔案移動到 /etc/keepalived/ 目錄下,並給 指令碼檔案新增可執行許可權
[root@lb01 keepalived]# chmod +x checkng.sh
3、 在 keepalived 的配置檔案 keepalived.conf 中匯入執行檔案,keepalived 功能 : vrrp_script
# 檢測指令碼
vrrp_script check_nginx
4、在vrrp協議模組中啟動檢查指令碼
# 呼叫檢查
實現非搶占式。
1、狀態全部都有設定成backup
2、增加 nopreempt
[root@lb02 ~]# cat /etc/keepalived/keepalived.conf
! configuration file for keepalived
global_defs
# 檢測指令碼
vrrp_script check_nginx
# 配置vrrp協議
vrrp_instance vi_1
#設定vip
virtual_ipaddress
# 呼叫檢查
track_script
}
# 假設有三颱mysql資料庫,請問怎樣負載均衡?
在非http協議的情況下,採用的四層負載均衡的方式負載服務。
注意:四層負載均衡中不支援網域名稱。
案例 :資料庫
1、在 /etc/nginx/ 目錄下新建乙個 stream 資料夾,用於存放新的配置檔案
[root@lb01 nginx]# mkdir stream
[root@lb01 stream]# vim mysql.conf
[root@lb01 stream]# cat mysql.conf
server
2、在 nginx.conf 配置檔案中新增 stream 模組,用於配置不支援http協議的伺服器的連線
stream
案例:使用四層負載均衡實現ssh的**,埠為1122
[root@lb01 stream]# cat ssh.conf
server
四層負載均衡與七層負載均衡
1 四層負載均衡與七層負載均衡區別 個人理解 網路七層協議包括,應用層 第七層 表示層,會話層,傳輸成 第四層 網路層,資料鏈路層,物理層。所謂的七層和四層負載均衡就是指基於哪一層做的負載均衡。nginx反向 就是一種七層負載均衡,可以通過使用者的請求url來進行劃分 lvs就屬於四層負載均衡,是基...
四層負載均衡與七層負載均衡
四層負載均衡與七層負載均衡 負載均衡的分層是針對osi網路模型來說的,負載均衡模型也不僅僅只有四層和七層的。下面先給出osi網路模型架構 根據上述模型,可以快速了解負載均衡的分層 二層負載均衡 基於虛擬mac與真實mac的位址互聯。三層負載均衡 基於虛擬ip與真實ip的位址互聯。四層負載均衡 基於三...
四層負載均衡和七層負載均衡
第一,技術原理上的區別。所謂四層負載均衡,也就是主要通過報文中的目標位址和埠,再加上負載均衡裝置設定的伺服器選擇方式,決定最終選擇的內部伺服器。以常見的 tcp為例,負載均衡裝置 在接收到第乙個來自客戶端的 syn請求時 即通過上述方式選擇乙個最佳的伺服器,並對報文中目標 ip位址進行修改 改為後端...