linux搭建LVS+keepalive+nginx實現叢集高效能負載均衡配置詳解
關於nginx配置tomcat實現負載均衡可參考http://blog.csdn.net/liqi_q/article/details/78063603
安裝jdk可參考:http://blog.csdn.net/liqi_q/article/details/72963947
關於IP直接訪問nginx可參考http://blog.csdn.net/liqi_q/article/details/78476787
關於lvs長時間輪詢real-server原因可閱讀http://www.capjsj.cn/keepalived_lvs_nginx_tomcat.html
在LVS+Keepalived環境裡面,lvs主要的工作是提供排程演算法,把客戶端請求按照需求排程在real伺服器,keepalived主要的工作是提供lvs控制器的一個冗餘,並且對real伺服器做健康檢查,發現不健康的real伺服器,就把它從lvs叢集中剔除,real伺服器只負責提供服務。
環境規劃
2*(lvs+keepalived伺服器)+n*real-server,一般lvs+keepalived是這樣的架構。
開始安裝
1、 下載軟體包
在http://www.linuxvirtualserver.org/ 下載lvs的軟體包
在http://www.keepalived.org/ 下載keepalived軟體包
2、先編譯安裝lvs,再安裝keepalived,安裝lvs需要核心原始碼
下載lvs原始碼的時候,一定要選擇你核心版本對應的原始碼包。
# uname -r
2.6.18-164.el5PAE
#yum install kernel-devel -y //安裝核心原始碼包
#ln -s /usr/src/kernels/2.6.18-164.el5PAE-i686/ /usr/src/linux
#wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.24.tar.gz //ipvsadm包就是lvs軟體包,別覺得名字不一樣
# tar -zxvf ipvsadm-1.24.tar.gz
# cd ipvsadm-1.24
#make && make install
檢查lvs是否安裝成功:
#ipvsadm //檢視是否有輸出
#lsmod | grep ip_vs //如果ipvsadm有輸出,那麼使用這個命令檢視是否載入ip_vs模組,如果載入,那麼lvs算安裝成功。
2、 編譯安裝keepalived,一定在安裝完lvs以後在安裝keepalive
Keeplive的下載地址:http://www.keepalived.org/download.html
wget http://www.keepalived.org/software/keepalived-1.1.15.tar.gz //不建議選擇最新的版本
1.tar -zxvf keepalived-1.2.2.tar.gz
2.cd keepalived-1.2.2
3。
./configure --prefix=/
Keepalived version : 1.1.15
Compiler : gcc
Compiler flags : -g -O2
Extra Lib : -lpopt -lssl -lcrypto
Use IPVS Framework : Yes
IPVS sync daemon support : Yes
Use VRRP Framework : Yes
Use LinkWatch : No
Use Debug flags : Nod
看見如上輸入,注意yes和no的值,如果一樣,證明配置成功,如果lvs為no,那麼證明你的lvs沒有安裝成功,需要從新安裝lvs再安裝keepalived。
yum -y install openssl-devel
4.make && make install
5.cd /etc/keepalived/
環境介紹
主機IP | 角色 | 安裝軟體 |
10.10.10.168 | Lvs+keepalived MASTER | Ipvsadm keepalived |
10.10.10.169 | Lvs+keepalived BACKUP | Ipvsadm keepalived |
10.10.10.170 | Real server | Lvs_real指令碼 |
10.10.10.171 | Real server | Lvs_real指令碼 |
10.10.10.11 | VIP |
|
注意:所有機器都在一個交換機,並且在一個網段。
1、在168和169上安裝ipvsadm和keepalived軟體。
2、修改keepalived的配置檔案
7.vi keepalived.conf
Keepalive安裝預設目錄會在less /etc/keepalived/keepalived.conf
[root@test01 nginx]# cat /etc/keepalived/keepalived.conf
#ConfigurationFile for keepalived
global_defs {
#notification_email { ######定義接受郵件的郵箱
# wangjj@hrloo.com
#}
#notification_email_from jiankong@staff.tuge.com ######定義傳送郵件的郵箱
#smtp_server mail.tuge.com
#smtp_connect_timeout 10
}
vrrp_script check_lvs { ######定義監控nginx的指令碼
script "/root/check_lvs.sh"
interval 1 ######監控時間間隔
weight 2 ######負載引數
}
vrrp_instance vrrptest { ######定義vrrptest例項
state MASTER ######伺服器狀態
nopreempt #非搶佔模式
interface eth0 ######使用的介面
virtual_router_id 51 ######虛擬路由的標誌,一組lvs的虛擬路由標識必須相同,這樣才能切換
priority 150 ######服務啟動優先順序,值越大,優先順序越高,BACKUP 不能大於MASTER
advert_int 1 ######伺服器之間的存活檢查時間
track_script { ######執行監控nginx程式的指令碼
check_lvs
}
virtual_ipaddress { ######虛擬IP地址
10.10.10.11
}
}
virtual_server 10.10.10.11 80 {
delay_loop 6
lb_algo rr
lb_kind DR
nat_mask 255.255.255.0
persistence_timeout 0 //此值為0,主要是為了方便測試,每次重新整理頁面結果會不一樣
protocol TCP
real_server 10.10.10.170 80{
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 10.10.10.171 80{
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
10.10.10.169:
和10.10.10.168相比,值需要刪除state MASTER 和 修改priority的值小於master的。
real server:
在所有real server上新增下面指令碼,名執行# cat /sbin/lvs_real
#!/bin/bash
#description:start realserver
vip=10.10.10.11 #虛擬IP
source /etc/rc.d/init.d/functions
case $1 in
start)
echo "Start Realserver"
/sbin/ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up
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
;;
stop)
echo "Stop Realserver"
/sbin/ifconfig lo:0 down
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 "Usage: $0 (start | stop)"
exit 1
esac
sh /sbin/lvs_real start啟動指令碼為Real server設定迴環共享虛擬IP
執行指令碼以後,使用ip add命令檢視lo介面是否新增了虛擬ip地址。
3、配置完成以後,開始測試:
在10.10.10.168和10.10.10.169上使用ip add檢查,虛擬IP應該配置在168上面。
測試1{主要測試lvs}:訪問虛擬IP是否可以訪問真實伺服器,是否輪詢real server
在master上使用 ipvsadm命令檢視lvs狀態。
[root@test01 nginx]# ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 10.10.10.11:http rr
-> 10.10.10.171:http Route 1 0 0
-> 10.10.10.172:http Route 1 0 0
[root@test01 nginx]#
在客戶端訪問虛擬IP 10.10.10.11,看是否可以訪問。每次重新整理,應該會換一個real server。訪問數次後,通過ipvsadm觀察lvs狀態。
測試2{主要測試keepalived}:lvs伺服器的HA,當keepalived master掛掉後,keepalived backup會不會接管虛擬IP。
關閉master主機上的keepalived程式。
在backup上ip add檢視是否新增虛擬IP,通過/var/log/message檢視相關轉換日誌。
測試3{測試backup的lvs}:使用客戶端訪問現在虛擬ip,檢視是否一切正常
測試完成後,開啟master的keepalived程式,等虛擬ip轉移到master以後,在從客戶端訪問,檢視是否存在問題
service keepalived stop停止主服務 使用ip addr檢視共享IP是否已經漂移到備機上
接下來檢視ipvsadm預設超時時間
[root@DR1 keepalived]# ipvsadm -L --timeout
Timeout (tcp tcpfin udp): 900 120 300
900 120 300這三個數值分別是TCP TCPFINUDP的時間.也就是說一條tcp的連線經過lvs後,lvs會把這臺記錄儲存15分鐘,就是因為這個時間過長,所以大部分人都會發現做好LVS DR之後輪詢現象並沒有發生,而且我也看到大部分的教程是沒有說明這一點的,因為是實驗性質,所以將此數值調整為非常小,使用以下命令調整:
[root@DR1 ~]# ipvsadm --set 1 2 1
解決同一個使用者session訪問同一臺伺服器
這樣LVS基本就配置完成了,BBS存在使用者session的問題,雖然有很多種解決方法,這裡如果只用lvs來解決的話,就要用到LVS的持久連線了,配置如下:
ipvsadm -E -t 192.168.8.230:80 -s wlc -p 3600
這樣使用者訪問後端一臺RS在3600s內都只會訪問這一臺RS,可以發現這樣做會破壞LB的效果,不過可以解決使用者session的問題。
LVS排程演算法
(2)負載排程演算法
靜態方法:僅根據演算法本身進行排程
rr:Round Robin # 即輪詢
wrr:Weighted RR # 即加權輪詢
sh:Source Hashing # 即來源IP地址hash
dh:Destination Hashing # 即目標地址hash(不常用,僅用於前端多防火牆的場景,保證防火牆的連線追蹤功能有效)
動態方法:根據演算法及RS當前的負載情況
lc:Least Connection
# 評判標準:Overhead=Active*256+Inactive
# Overhead最小者勝出
wlc:Weighted LC
# 評判標準:Overhead=(Active*256+Inactive)/weight
# Overhead最小者勝出
sed:Shortest Expect Delay
# 評判標準:Overhead=(Active+1)*256/weight
# Overhead最小者勝出
nq:Never Queue # 叢集開始時工作時,每臺伺服器都至少分配一個連線請求,然後再根據sed演算法排程;
lblc:Locality-based Least Connection # 類似於dh+lc
lblcr:Relicated and Locality-based Least Connection # 主要用於後端伺服器是快取伺服器時
相關文章
- 負載均衡 - MQTT Broker 叢集詳解(一)負載MQQT
- orleans叢集及負載均衡實現負載
- Linux環境搭建Nginx+Tomcat負載均衡叢集LinuxNginxTomcat負載
- 負載均衡叢集負載
- 粘性會話負載均衡 - MQTT Broker 叢集詳解(二)會話負載MQQT
- LVS+Keepalive 實現負載均衡高可用叢集負載
- dubbo叢集和負載均衡負載
- 使用LVS實現負載均衡原理及安裝配置詳解負載
- LNMP 分散式叢集(一):Nginx+PHP平臺搭建與負載均衡配置LNMP分散式NginxPHP負載
- 負載均衡詳解負載
- Spring Cloud:使用 Feign 實現負載均衡詳解SpringCloud負載
- centos7下配置nginx反向代理負載均衡叢集CentOSNginx負載
- Haproxy搭建 Web 群集實現負載均衡Web負載
- haproxy(單機)+mysql叢集負載均衡MySql負載
- Spring Cloud:使用Ribbon實現負載均衡詳解(上)SpringCloud負載
- Spring Cloud:使用Ribbon實現負載均衡詳解(下)SpringCloud負載
- Nginx負載均衡詳解Nginx負載
- 在Linux中,如何實現負載均衡?Linux負載
- 淺談達夢DSC叢集以及負載均衡實現與驗證負載
- 3.RabbitMQ高階叢集搭建(Haproxy負載均衡、Keepalived高可用)MQ負載
- kubernetes叢集內排程與負載均衡負載
- Haproxy+Keepalived高可用負載均衡叢集負載
- mariadb叢集與nginx負載均衡配置–centos7版本Nginx負載CentOS
- RHEL 7配置HAProxy實現Web負載均衡Web負載
- Dapr + .NET Core實戰(十一)單機Dapr叢集負載均衡負載
- 叢集,lvs負載均衡的四種工作模式負載模式
- Ribbon實現負載均衡負載
- GRPC 負載均衡實現RPC負載
- nginx實現負載均衡Nginx負載
- 4. Spring Cloud Ribbon 實現“負載均衡”的詳細配置說明SpringCloud負載
- Kubernetes上的負載均衡詳解負載
- 10分鐘學會windows中iis搭建伺服器叢集實現負載均衡和nginx代理轉發Windows伺服器負載Nginx
- docker初體驗:docker部署nginx負載均衡叢集DockerNginx負載
- HaProxy 實現 MySQL 負載均衡MySql負載
- windows第七層負載均衡 基於IIS的ARR負載均衡詳解Windows負載
- F5負載均衡系列教程八【負載均衡演算法詳解】負載演算法
- Linux LVS 負載均衡Linux負載
- 簡單實踐搭建 nginx 負載均衡Nginx負載