lvs+keepalived centos7
1.關閉防火牆
systemctl stop firewalld && systemctl disable firewalld
2.關閉selinux
vim /etc/sysconfig/selinux
修改
SELINUX=disabled
3.安裝keepalived等
yum -y install keepalived ipvsadm net-tools gcc gcc-c++ make popt-devel kernel-devel openssl-devel #設定開機啟動 systemctl enable keepalived
4.修改keepalived.conf
vim /etc/keepalived/keepalived.conf
keepalived.conf 配置,注意修改ip和埠
! Configuration File for keepalived
global_defs {
router_id lvs1 #router_id 機器標識,通常為hostname,但不一定非得是hostname。故障發生時,郵件通知會用到。
}
vrrp_instance VI_1 { #vrrp例項定義部分
state MASTER #設定lvs的狀態,MASTER和BACKUP兩種,必須大寫,只能一個MASTER
interface ens33 #設定對外服務的介面
virtual_router_id 100 #設定虛擬路由標示,這個標示是一個數字,同一個vrrp例項使用唯一標示
priority 100 #定義優先順序,數字越大優先順序越高,在一個vrrp——instance下,master的優先順序必須大於backup
advert_int 1 #設定master與backup負載均衡器之間同步檢查的時間間隔,單位是秒
authentication { #設定驗證型別和密碼
auth_type PASS #主要有PASS和AH兩種
auth_pass 1111 #驗證密碼,同一個vrrp_instance下MASTER和BACKUP密碼必須相同
}
virtual_ipaddress { #設定虛擬ip地址,可以設定多個,每行一個
192.168.50.149
}
}
virtual_server 192.168.50.149 6443 { #設定虛擬伺服器,需要指定虛擬ip和服務埠
delay_loop 6 #健康檢查時間間隔
lb_algo wrr #負載均衡排程演算法
lb_kind DR #負載均衡轉發規則
persistence_timeout 50 #設定會話保持時間,對動態網頁非常有用
protocol TCP #指定轉發協議型別,有TCP和UDP兩種
real_server 192.168.50.121 6443 { #配置伺服器節點1,需要指定real server的真實IP地址和埠
weight 1 #設定權重,數字越大權重越高
TCP_CHECK { #realserver的狀態監測設定部分單位秒
connect_timeout 10 #連線超時為10秒
retry 3 #重連次數
delay_before_retry 3 #重試間隔
connect_port 6443 #連線埠為81,要和上面的保持一致
}
}
real_server 192.168.50.122 6443 { #配置伺服器節點1,需要指定real server的真實IP地址和埠
weight 1 #設定權重,數字越大權重越高
TCP_CHECK { #realserver的狀態監測設定部分單位秒
connect_timeout 10 #連線超時為10秒
retry 3 #重連次數
delay_before_retry 3 #重試間隔
connect_port 6443 #連線埠為81,要和上面的保持一致
}
}
}
# 啟動keepalived
systemctl start keepalived
#設定開機啟動
systemctl enable keepalived
5.修改成單播通訊,可選,根據實際需要
伺服器網路環境中,路由交換層禁用了ARP的廣播限制,造成了keepalived主備協議無法通過廣播的方式進行通訊,造成主備兩臺伺服器都強制佔用HAVIP地址,出現同時兩臺伺服器都有VIP地址的情況出現。必須通過配置來指定IP的兩臺伺服器間進行通
priority 100
unicast_src_ip 192.168.2.192 #本機實際IP
unicast_peer {
192.168.2.191 #對端實際IP
}
6.DR模式後端主機執行指令碼,兩個選擇一個
1.第一個方法
vim /etc/rc.d/init.d/realserver.sh
#!/bin/bash
#chkconfig: 345 88 14
in=${1:-start}
SNS_VIP=192.168.50.149
echo $in
#source /etc/rc.d/init.d/functions
case "$in" in
start)
ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP
/sbin/route add -host $SNS_VIP dev lo:0
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/null 2>&1
echo "RealServer Start OK"
;;
stop)
ifconfig lo:0 down
route del $SNS_VIP >/dev/null 2>&1
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 "RealServer Stoped"
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
exit 0
chmod u+x /etc/rc.d/init.d/realserver.sh
chkconfig --add realserver.sh
chkconfig realserver.sh on
service realserver start
2.第二個方法,這個沒有除錯
vim /etc/bin/realserver.sh
#!/bin/bash
#chkconfig: 345 88 14
vip=192.168.50.149
ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up
route add -host $vip dev lo:0
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/null 2>&1
echo /etc/bin/realserver.sh >> /etc/rc.local
chmod u+x /etc/bin/realserver.sh
bash /etc/bin/realserver.sh
ip a # 檢視lo可以看到一下資訊
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet 192.168.50.149/32 brd 192.168.50.149 scope global lo:0
valid_lft forever preferred_lft forever
6.檢查
ip a #檢視虛擬ip
#檢視後端狀態,在本地或者瀏覽器測試訪問檢視是否能檢視流量狀態
ipvsadm -ln
ipvsadm -ln --stats
ipvsadm -lnc
# 注意netstat -lntp 是看不到開放埠的;
#關閉第一臺伺服器,看ip是否漂移,是否能正常訪問;
7.記錄日誌,可選
1、修改/etc/sysconfig/keepalived日誌儲存路徑
`sed -i s/KEEPALIVED_OPTIONS=\``"-D"``/KEEPALIVED_OPTIONS=\``"-D -d -S 0"``/gp /etc/sysconfig/keepalived`
2、新增rsyslog記錄日誌存放位置
`echo ``"local0.* /var/log/keepalived.log"` `>>/etc/rsyslog.conf`
3、重啟rsyslog日誌服務和keepalived服務
`systemctl restart rsyslog && systemctl restart keepalived.service`
4、檢查日誌檔案是否存在和記錄日誌
`ls /``var``/log/keepalive.log``tail -3 /``var``/log/keepalive.log`
8.說明
LVS相關術語
- DS:Director Server。指的是前端負載均衡器節點。
- RS:Real Server。後端真實的工作伺服器。
- VIP:向外部直接面向用戶請求,作為使用者請求的目標的IP地址。
- DIP:Director Server IP,主要用於和內部主機通訊的IP地址。
- RIP:Real Server IP,後端伺服器的IP地址。
- CIP:Client IP,訪問客戶端的IP地址
LVS的八種排程演算法
輪叫排程 rr
這種演算法是最簡單的,就是按依次迴圈的方式將請求排程到不同的伺服器上,該演算法最大的特點就是簡單。輪詢演算法假設所有的伺服器處理請求的能力都是一樣的,排程器會將所有的請求平均分配給每個真實伺服器,不管後端 RS 配置和處理能力,非常均衡地分發下去。加權輪叫 wrr
這種演算法比 rr 的演算法多了一個權重的概念,可以給 RS 設定權重,權重越高,那麼分發的請求數越多,權重的取值範圍 0 – 100。主要是對rr演算法的一種優化和補充, LVS 會考慮每臺伺服器的效能,並給每臺伺服器新增要給權值,如果伺服器A的權值為1,伺服器B的權值為2,則排程到伺服器B的請求會是伺服器A的2倍。權值越高的伺服器,處理的請求越多。最少連結 lc
這個演算法會根據後端 RS 的連線數來決定把請求分發給誰,比如 RS1 連線數比 RS2 連線數少,那麼請求就優先發給 RS1加權最少連結 wlc
這個演算法比 lc 多了一個權重的概念。基於區域性性的最少連線排程演算法 lblc
這個演算法是請求資料包的目標 IP 地址的一種排程演算法,該演算法先根據請求的目標 IP 地址尋找最近的該目標 IP 地址所有使用的伺服器,如果這臺伺服器依然可用,並且有能力處理該請求,排程器會盡量選擇相同的伺服器,否則會繼續選擇其它可行的伺服器複雜的基於區域性性最少的連線演算法 lblcr
記錄的不是要給目標 IP 與一臺伺服器之間的連線記錄,它會維護一個目標 IP 到一組伺服器之間的對映關係,防止單點伺服器負載過高。目標地址雜湊排程演算法 dh
該演算法是根據目標 IP 地址通過雜湊函式將目標 IP 與伺服器建立對映關係,出現伺服器不可用或負載過高的情況下,發往該目標 IP 的請求會固定發給該伺服器。源地址雜湊排程演算法 sh
與目標地址雜湊排程演算法類似,但它是根據源地址雜湊演算法進行靜態分配固定的伺服器資源。
LVS有三種工作模式
1、NAT模式(VS-NAT)
把客戶端發來的資料包的IP頭的目的地址,在負載均衡器上換成其中一臺RS的IP地址,併發至此RS
來處理,RS處理完成後把資料交給經過負載均衡器,負載均衡器再把資料包的原IP地址改為自己的IP,將
目的地址改為客戶端IP地址即可期間,無論是進來的流量,還是出去的流量,都必須經過負載均衡器
2、IP隧道模式(VS-TUN)
由於網際網路上的大多Internet服務的請求包很短小,而應答包通常很大,所以,隧道模式就是把客
戶端發來的資料包,封裝一個新的IP頭標記(僅目的IP)發給RS,RS收到後,先把資料包的頭解開,還原資料
包,處理後,直接返回給客戶端,不需要再經過負載均衡器注意,由於RS需要對負載均衡器發過來的資料包
進行還原,所以必須支援IPTUNNEL協議,因此在RS的核心中,必須要編譯IPTUNNEL這個選項。
3、直接路由模式(VS-DR)
負載均衡器和RS都使用同一個IP對外服務但只有DR對ARP請求進行響應,所有RS對本身這個IP的ARP
請求保持靜默也就是說,閘道器會把對這個服務IP的請求全部定向給DR,而DR收到資料包後根據排程演算法,
找出對應的RS,把目的MAC地址改為RS的MAC(因為IP一致)並將請求分發給這臺RS這時RS收到這個資料
包,處理完成之後,由於IP一致,可以直接將資料返給客戶,則等於直接從客戶端收到這個資料包無異,
處理後直接返回給客戶端由於負載均衡器要對二層包頭進行改換,所以負載均衡器和RS之間必須在一個
廣播域,也可以簡單的理解為在同一臺交換機上
★DR模式的九大特點
1、通過在排程器上LB上修改資料包的目的的MAC地址實現轉發,源IP仍然是客戶端的IP,目的IP地址仍然是VIP
2、請求報文警告排程器,而RS響應出來後的報文無需警告排程器LB,因此併發訪問量大使用效率很高(和NAT模式比)
3、DR模式是通過MAC地址的改寫機制實現轉發,因此所有RS節點和排程器LB只能在一個區域網中(小缺點)。
4、需要注意RS節點的VIP繫結(lo:vip/32,lo1:vip/32)和ARP抑制問題,抑制沒有接網線的那個網絡卡響應ARP廣播。
5、RS節點的預設閘道器不需要是排程器LB的DIP,而直接是IDC機房分配的上級路由器的IP(RS帶有外網IP地址的情況),理講,只要RS可以出外網即可,不是必須配置外網IP。
6、由於DR模式的排程器僅進行了目的MAC地址的改寫,因此排程器LB無法改變請求報文目的埠(和NAT要區別)。
7、當前排程器LB支援幾乎所有的UNIX/LINUX系統,但目前不支援Windows系統,真實伺服器RS節點可以是Windows系統
8、總的來說DR模式效率很高,但是配置也比較麻煩,因此訪問量不是特別大的公司可以用haproxy/nginx取代,符合運維原則:簡單、易用、高效,日1000-2000萬PV或請求1萬以下都可以考慮aproxy/nginx(LVS NAT模式)。
9、直接對外的訪問業務,例如:web伺服器做RS節點,RS最好用公網IP地址,不直接對外的業務,如資料庫、儲存系統節點最後用內部IP地址。
參考
https://www.cnblogs.com/quanloveshui/p/11075796.html
https://www.cnblogs.com/huanglingfa/p/13821811.html
https://blog.csdn.net/xia296/article/details/87971439