1. 程式人生 > >高併發的解決方案—負載均衡—LVS搭建

高併發的解決方案—負載均衡—LVS搭建

首先這是一個簡單的架構圖:

一、如圖,高併發可能發生的地方有兩處

1、使用者請求應用時的負載均衡處,本文僅針對此處進行分析

2、應用請求資料庫時,分析待續

二、負載均衡處可能出現的問題,session共享問題

解決方案:

1、session可放在cookie中,但將seesion放瀏覽器處不安全

2、session可存放資料庫中,但大量使用者請求時,資料庫壓力會過大

3、seesion放到快取伺服器叢集中。

三、負載均衡架構:

1、鏈路負載均衡 通過DNS解析成不同的ip指向不同的伺服器,一旦有伺服器故障,仍會請求到該伺服器,直到從DNS解析中移走2、叢集負載均衡 硬體:使用一臺專門的硬體裝置轉發請求,昂貴。如F5 效能好,但不能進行動態擴容
軟體:成本低、一次訪問請求要經過多次代理伺服器,但會增加網路延時。3、作業系統負載均衡 作業系統級別的軟中斷或者硬體中斷,多佇列網絡卡等。

四、負載均衡軟體

1、Nginx,可選,優勢此處不贅述。

2、Apache,追求穩定可選,效能不如Nginx。

3、LVS(Linux Virtual Server):負載均衡裝置,它不提供任何服務,使用者請求到這裡的時候,它是將客戶需求轉發至後端真正提供服務的服務,所以說後端的服務稱作realserver。

優勢:穩定,相容,抗負載均衡能力強,因為只分發請求,不走流量。

五、配置LVS,用vm演示

1、首先安裝四臺伺服器

其中,1為負載均衡主機;2為負載均衡備機;3、4均為HTTP伺服器。

2、ip配置

(1)VIP(virtual ip):用來提供virtual server服務的ip地址。分別繫結在Director一個物理網絡卡上(對外接收請求包)和RS的迴環裝置上(迴環裝置需要繫結兩個ip,一個是127.0.0.1,另一個就是vip)。

(2)DIP(director ip):與vip繫結在一個物理網絡卡上,用來轉發請求包到RS的RIP對應的mac上,此裝置可以通過arp請求獲取RIP對應的mac地址。

(3)RIP(real serverip):繫結在RS上的一個物理網絡卡上,用來接收從Directory轉發過來的請求包。

3、在3、4上開啟http服務

[[email protected]

~]#service httpd start              #開啟Http伺服器

[[email protected] ~]#cd /var/www/html/             #進入Http伺服器預設的目錄

[[email protected] ~]#touch index.html               #建立Http伺服器預設訪問頁面

[[email protected] ~]#vim index.html                #編輯Http伺服器預設訪問頁面

成功後新增網頁如下:

 


4、在1、2伺服器網路配置上新增LO:0介面,並設定虛擬IP在此介面上

[[email protected] ~]#cd /etc/init.d/

[[email protected] ~]#touch realserver

[[email protected] ~]#vim realserver

SNS_VIP=192.168.80.150       #定義VIP變數

./etc/rc.d/init.d/functions  #導指令碼庫

case "$1" in                 #case語句 $1傳遞給該shell指令碼的第一個引數

start)

ifconfig lo:0 $SNS_VIPnetmask 255.255.255.255 broadcast $SNS_VIP #設定Lo:0 VIP netmask  及廣播

/sbin/route add -host$SNS_VIP dev lo:0                         ##route del 增加本地路由

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/null2>&1                   # -p<file>   (default /etc/sysctl.conf)將標準資訊輸入裝置空檔案

echo "RealServer StartOK"

;;

stop)

ifconfig lo:0 down

route del $SNS_VIP>/dev/null 2>&1              #route del 刪除本地路由

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 "RealServerStoped"

;;

*)

echo "Usage: $0{start|stop}"  #$0 是指令碼本身的名字

exit 1                       #表示程序正常退出

esac                         #case結束

exit 0                       #表示程序非正常退出

[[email protected] ~]#chmod 750 realserver               #給此指令碼賦予許可權

[[email protected] ~]#chkconfig realserver on         #設定開機自啟動此指令碼

[[email protected] ~]#service realserver start          #開啟此指令碼

RealServer Start OK                                            #表示啟動成功!

[[email protected] ~]#ifconfig                                   #檢視是否真的成功添加了lo:0介面

5、配置負載均衡伺服器

(1)安裝 ipvsadm  keepalived

[[email protected] ~]#yum –y install ipvsadm keepalived
(2)配置 keepalived 

[[email protected] ~]#vim /etc/keepalived/keepalived.conf

global_defs {                        ##全域性配置部分
#   notification_email {             ##下面幾行均為全域性通知配置,可以實現出現問題後報警,但功能有限,因此註釋掉,並採用Nagios監視lvs執行情況
#       [email protected]
#   }
#   notification_email_from [email protected]
#   smtp_server smtp.exmail.qq.com
#   smtp_connect_timeout 30
	router_id LVS_DEVEL             ##設定lvs的id,在一個網路內應該是唯一的
}
vrrp_instance VI_1 {            ##設定vrrp組,唯一且同一LVS伺服器組要相同
	state MASTER             ##備份LVS伺服器設定為BACKUP
	interface eth0             # #設定對外服務的介面
	virtual_router_id 51        ##設定虛擬路由標識
	priority 100                   #設定優先順序,數值越大,優先順序越高,backup設定為99,這樣就能實現當master宕機後自動將backup變為master,而當原master恢復正常時,則現在的master再次變為backup。
	advert_int 1            ##設定同步時間間隔
	authentication {         ##設定驗證型別和密碼,master和buckup一定要設定一樣
		auth_type PASS
		auth_pass 1111
	}
	virtual_ipaddress {          ##設定VIP,可以多個,每個佔一行
		192.168.80.150
	}
}
virtual_server 192.168.80.150 80 {
	delay_loop 6            ##健康檢查時間間隔,單位s
	lb_algo wrr             ##負載均衡排程演算法設定為加權輪叫
	lb_kind DR                              ##負載均衡轉發規則
	nat_mask 255.255.255.0   ##網路掩碼,DR模式要保障真實伺服器和lvs在同一網段
	persistence_timeout 50    ##會話保持時間,單位s
	protocol TCP                           ##協議
	real_server 192.168.80.139 80 {      ##真實伺服器配置,80表示埠
		weight 3                             ##權重
		TCP_CHECK {                       ##伺服器檢測方式設定 keepalived的健康檢查方式 有:HTTP_GET|SSL_GET|TCP_CHECK|SMTP_CHECK|MISC_CHECK
			connect_timeout 0    ##連線超時時間
			nb_get_retry 3	     ##失敗重試次數
			delay_before_retry 3 ##失敗重試的間隔時間
			connect_port 80      ##連線的後端埠
		}
	}


	real_server 192.168.80.140 80 {
		weight 3
		TCP_CHECK {
			connect_timeout 10
			nb_get_retry 3
			delay_before_retry 3
			connect_port 80
		}
	}
}
啟動keepalived服務
[[email protected] ~]# service keepalived start

注:由於keepalived配置檔案有語法錯誤也能啟動,因此看到啟動了lvs服務,不代表配置檔案沒有錯誤,如果遇到lvs不能正常轉發,及時跟蹤日誌進行處理。

日誌跟蹤方法
(1) 開兩個ssh視窗連線到lvs伺服器,第一個視窗執行如下命令:
[[email protected] ~]# tail -f /var/log/message

(2)第二個視窗重新啟動keepalived服務,同時觀察視窗1中日誌的變化,然後根據日誌提示解決即可。

6、測試

(1)瀏覽器訪問虛擬IP檢視結果



可以自己配置權重。

其他:

1、關閉伺服器3,請求將一直分發至伺服器4,無錯誤


2、重新開啟伺服器3,請求按權重分發至伺服器3和4,無錯誤

3、關閉伺服器1,伺服器2接管,請求正常

4、恢復伺服器1,伺服器2重新待機,請求正常

下期寫資料庫處的高併發解決方案。

到此,本文結束,有問題可以留言指正,謝謝觀看。


相關推薦

併發解決方案負載均衡LVS搭建

首先這是一個簡單的架構圖:一、如圖,高併發可能發生的地方有兩處1、使用者請求應用時的負載均衡處,本文僅針對此處進行分析2、應用請求資料庫時,分析待續二、負載均衡處可能出現的問題,session共享問題解決方案:1、session可放在cookie中,但將seesion放瀏覽器

併發解決方案 -負載均衡

上一篇文章說過會轉載一篇負載均衡的介紹方面的文章,就是下面這個了~~~ 什麼是負載均衡? 當一臺伺服器的效能達到極限時,我們可以使用伺服器叢集來提高網站的整體效能。那麼,在伺服器叢集中,需要有一臺伺服器充當排程者的角色,使用者的所有請求都會首先由它接收,排程者再根據每臺伺服器的負載情

併發解決方案負載均衡

1,什麼是負載均衡? 當一臺伺服器的效能達到極限時,我們可以使用伺服器叢集來提高網站的整體效能。那麼,在伺服器叢集中,需要有一臺伺服器充當排程者的角色,使用者的所有請求都會首先由它接收,排程者再根據每臺伺服器的負載情況將請求分配給某一臺後端伺服器去處理。 那麼在這個過程中,排程者如何合理分配

併發解決方案負載均衡

1.什麼是負載均衡?         當一臺伺服器的效能達到極限時,我們可以使用伺服器叢集來提高網站的整體效能。那麼,在伺服器叢集中,需要有一臺伺服器充當排程者的角色,使用者的所有請求都會首先由它接收,排程者再根據每

大規模分散式應用之海量資料和併發解決方案總結視訊教程網盤

大規模分散式應用之海量資料和高併發解決方案總結視訊教程網盤 39套Java架構師,高併發,高效能,高可用,分散式,叢集,電商,快取,微服務,微信支付寶支付,公眾號開發,java8新特性,P2P金融專案,程式設計,功能設計,資料庫設計,第三方支付,web安全,效能調優,設計模式,資料結構,併發程式

Java併發解決方案之非同步處理

(() -> { // 請求1 CompletableFuture<List<Integer>> completionStage1 = CompletableFuture.supplyAsync(() -> { //

Java併發解決方案

Java高併發,如何解決,什麼方式解決 對於我們開發的網站,如果網站的訪問量非常大的話,那麼我們就需要考慮相關的併發訪問問題了。而併發問題是絕大部分的程式設計師頭疼的問題, 但話又說回來了,既然逃避不掉,那我們就坦然面對吧~今天就讓我們一起來研究一下常見的併

大型網站應用之海量資料和併發解決方案總結

一、網站應用背景 開發一個網站的應用程式,當用戶規模比較小的時候,使用簡單的:一臺應用伺服器+一臺資料庫伺服器+一臺檔案伺服器,這樣的話完全可以解決一部分問題,也可以通過堆硬體的方式來提高網站應用的訪問效能,當然,也要考慮成本的問題。 當問題的規模在經濟條件下通過堆硬體的

大規模分散式應用之海量資料和併發解決方案總結

一、網站應用背景 開發一個網站的應用程式,當用戶規模比較小的時候,使用簡單的:一臺應用伺服器+一臺資料庫伺服器+一臺檔案伺服器,這樣的話完全可以解決一部分問題,也可以通過堆硬體的方式來提高網站應用的訪問效能,當然,也要考慮成本的問題。 當問題的規模在經濟條件下通過堆硬體的

長文慎入-探索Java併發程式設計與併發解決方案[轉]

轉自:https://yq.aliyun.com/articles/636038 所有示例程式碼,請見/下載於https://github.com/Wasabi1234/concurrency   高併發處理的思路及手段    

併發解決方案-mysql篇

1、mysql篇 高併發大多的瓶頸在後臺,在儲存,mysql的正常的優化方案如下: 1)程式碼中sql語句優化 2)資料庫欄位優化,索引優化 3)加快取,redis/memcache等 4)主從,讀寫分離 5)分割槽表 6)垂直拆分,解耦模組 7)水平切分 點評: 1、1

熱點賬戶併發解決方案

    背景:2018年初,直播答題風靡全國。來的快,去的也快,抖音突然崛起,具有了挑戰微信的實力。    我司與頭條合作,負責頭條的紅包雨業務。頭條要求,200tps,最後最高達到140tps。    自此之後,公司開始了賬戶優化。    此前已經對第三方支付的賬戶進行了詳

併發解決方案併發解決方案彙總

第1章 引言隨著網際網路應用的廣泛普及,海量資料的儲存和訪問成為了系統設計的瓶頸問題。對於一個大型的網際網路應用,每天幾十億的PV無疑對資料庫造成了相當高的負載。對於系統的穩定性和擴充套件性造成了極大的問題。通過資料切分來提高網站效能,橫向擴充套件資料層已經成為架構研發人員首選的方式。水平切分資料庫:可以降低

java系統併發解決方案(轉載)

package com.jb.y2t034.thefifth.web.servlet;   import java.io.ByteArrayOutputStream;   import java.io.FileOutputStream;   import java.io.IOException;   impo

java系統併發解決方案之圖片伺服器分離

說明一下: 1、圖片服務通過lvs作為入口,處理能力上還是有保障的。 2、利用nginx直接對外服務,不必用squid。 3、圖中的紅線是指主nginx會將/2006和/2007年的圖片分別代理到兩臺存檔伺服器,如果發現主nginx的cpu佔用比較大,那麼可以考慮使用nginx的proxy_store將圖片存

Java併發解決方案(參考文)

對於我們開發的網站,如果網站的訪問量非常大的話,那麼我們就需要考慮相關的併發訪問問題了。而併發問題是絕大部分的程式設計師頭疼的問題,但話又說回來了,既然逃避不掉,那我們就坦然面對吧~今天就讓我們一起來研究一下常見的併發和同步吧。 為了更好的理解併發和同步,我們需要先明白兩個重要的概念:同步和

併發程式設計與併發解決方案學習(併發程式設計初體驗)

以下都是發生執行緒安全的案例: 模擬5000個請求,併發數200 package vip.fkandy.chapter02; import lombok.extern.slf4j.Slf4j; import java.util.concurrent.CountDown

併發程式設計與併發解決方案學習(Java 記憶體模型)

JMM(Java Memory Model)    JMM是一種規範,規範了Java虛擬機器與計算機記憶體是如何協同工作的,規定了一個執行緒如何和何時可以看到其他執行緒修改過的共享變數的值,以及在必須的時候如果同步的訪問共享變數。棧    棧的優勢:存取速度比堆要快,僅次於計

Java併發程式設計與併發解決方案解析

本文轉載自:Java併發程式設計與高併發解決方案解析 現在在各大網際網路公司中,隨著日益增長的網際網路服務需求,高併發處理已經是一個非常常見的問題,在這篇文章裡面我們重點討論兩個方面的問題,一是併發程式設計,二是高併發解決方案。 文章中的程式碼實現詳見 專案 Git

nodejs + nginx + redis cluster 併發解決方案

針對於使用者使用資料而言,我們應該會對資料進行分級。例如簡單的兩級,使用者會經常訪問的(例如自己的id,地理資訊);使用者不會經常訪問的(例如歷史訂單)。因此我們設計系統時就應該去考慮消除冗餘,讓經常使用的資料有更多的訪問速度資源,不會經常使用的資料儘可能少的速度資源。最通俗的做法就是,經常訪問的放在記憶體中