18.6 负载均衡集群介绍 18.7 LVS介绍 18.8 LVS调度算法 18.9/18.10 LVS NAT模式搭建
2019獨角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
18.6 負(fù)載均衡集群介紹
實現(xiàn)負(fù)載均衡集群的軟件有:LVS、Keepalived、Nginx、haproxy等。其中LVS屬于四層(網(wǎng)絡(luò)OSI模型);Nginx屬于七層;haproxy既可以認(rèn)為是四層,也可以當(dāng)做是七層使用。
LVS、haproxy這種四層負(fù)載均衡可以分發(fā)除80端口以外的通信,如MySQL-3306;而Nginx僅僅支持http,https,mail。
相對來說,LVS這種四層的更加穩(wěn)定,能承受更多的請求,而Nginx這種七層的更加靈活,能實現(xiàn)更多的個性化需求。
18.7 LVS介紹
LVS是基于tcp/ip做的路由和轉(zhuǎn)發(fā),穩(wěn)定性和效率很高,LVS最新版本是基于Linux內(nèi)核2.6。LVS常見的模式有三種:NAT、DR、IP Tunnel。LVS架構(gòu)中有一個核心角色叫分發(fā)器(Load Balance),用于分發(fā)客戶的各種請求,另外還有諸多服務(wù)器(real server,簡稱rs),用于處理用戶各種請求。
NAT模式
- 這種模式借助iptables的nat表來實現(xiàn)
- 用戶的請求到分發(fā)器后,通過預(yù)設(shè)的iptables規(guī)則,把請求的數(shù)據(jù)包轉(zhuǎn)發(fā)到后端的rs上去
- rs需要設(shè)定網(wǎng)關(guān)為分發(fā)器的內(nèi)網(wǎng)ip
- 用戶請求的數(shù)據(jù)包和返回給用戶的數(shù)據(jù)包全部經(jīng)過分發(fā)器,所以分發(fā)器成為瓶頸
- 在nat模式中,只需要分發(fā)器有公網(wǎng)ip即可,所以比較節(jié)省公網(wǎng)ip資源
在該模式中,load balancer是限制該架構(gòu)處理用戶請求的一個瓶頸,所以該模式比較適合小模式的集群(服務(wù)器rs在10臺以內(nèi));該模式的優(yōu)勢是節(jié)省公網(wǎng)資源。
IP Tunnel模式
- 這種模式,需要有一個公共的IP配置在分發(fā)器和所有rs上,我們把它叫做vip
- 客戶端請求的目標(biāo)IP為vip,分發(fā)器接收到請求數(shù)據(jù)包后,會對數(shù)據(jù)包做一個加工,會把目標(biāo)IP改為rs的IP,這樣數(shù)據(jù)包就到了rs上
- rs接收數(shù)據(jù)包后,會還原原始數(shù)據(jù)包,這樣目標(biāo)IP為vip,因為所有rs上配置了這個vip,所以它會認(rèn)為是它自己
DR模式
- 這種模式,也需要有一個公共的IP配置在分發(fā)器和所有rs上,也就是vip
- 和IP Tunnel不同的是,它會把數(shù)據(jù)包的MAC地址修改為rs的MAC地址
- rs接收數(shù)據(jù)包后,會還原原始數(shù)據(jù)包,這樣目標(biāo)IP為vip,因為所有rs上配置了這個vip,所以它會認(rèn)為是它自己
MAC(Media Access Control或者M(jìn)edium Access Control)地址,意譯為媒體訪問控制,或稱為物理地址、硬件地址,用來定義網(wǎng)絡(luò)設(shè)備的位置。在OSI模型中,第三層網(wǎng)絡(luò)層負(fù)責(zé) IP地址,第二層數(shù)據(jù)鏈路層則負(fù)責(zé) MAC地址。因此一個主機(jī)會有一個MAC地址,而每個網(wǎng)絡(luò)位置會有一個專屬于它的IP地址。MAC地址是網(wǎng)卡決定的,是固定的。
ARP(Address Resolution Protocol)地址解析協(xié)議,是根據(jù)IP地址獲取物理地址的一個TCP/IP協(xié)議。
OSI模型把網(wǎng)絡(luò)工作分為七層,IP地址在OSI模型的第三層,MAC地址在第二層,彼此不直接打交道。在通過以太網(wǎng)發(fā)送IP數(shù)據(jù)包時,需要先封裝第三層(32位IP地址)、第二層(48位MAC地址)的報頭,但由于發(fā)送時只知道目標(biāo)IP地址,不知道其MAC地址,又不能跨第二、三層,所以需要使用地址解析協(xié)議。使用地址解析協(xié)議,可根據(jù)網(wǎng)絡(luò)層IP數(shù)據(jù)包包頭中的IP地址信息解析出目標(biāo)硬件地址(MAC地址)信息,以保證通信的順利進(jìn)行。
18.8 LVS的調(diào)度算法
- 輪詢 Round-Robin ? ?rr
- 加權(quán)輪詢 Weight Round-Robin ? ?wrr
- 最小連接 Least-Connection ? ? ?lc
- 加權(quán)最小連接 Weight Least-Connection ? ?wlc
- 基于局部性的最小連接 Locality-Based Least Connections ? ?lblc
- 帶復(fù)制的基于局部性最小連接 Locality-Based Least Connections with Replication ? ?lblcr
- 目標(biāo)地址散列調(diào)度 Destination Hashing ? ?dh
- 源地址散列調(diào)度 Source Hashing ? ?sh
常用的是前面四種算法。
18.9-18.20 LVS NAT模式搭建
準(zhǔn)備工作
網(wǎng)絡(luò)準(zhǔn)備
?三臺機(jī)器
? 分發(fā)器,也叫調(diào)度器(簡寫為dir)
? 內(nèi)網(wǎng):230.135,外網(wǎng):118.147(vmware僅主機(jī)模式)
? rs1
? 內(nèi)網(wǎng):230.130,設(shè)置網(wǎng)關(guān)為230.135
? rs2
?內(nèi)網(wǎng):2350.145,設(shè)置網(wǎng)關(guān)為230.135
防火墻
?三臺機(jī)器上都執(zhí)行執(zhí)行
? systemctl stop firewalld; systemc disable firewalld
? systemctl start ?iptables-services; iptables -F; service iptables save
關(guān)閉SELinux:setenforce 0
保險起見最好改下配置文件改成disabled
[root@test ~]# vim /etc/selinux/config
以下操作在real1(130)和real2(145)中進(jìn)行:
[root@cham1 ~]# yum install -y iptables-services [root@cham1 ~]# iptables -F [root@cham1 ~]# service iptables save iptables: Saving firewall rules to /etc/sysconfig/iptables:[ 確定 ][root@test ~]# yum install -y iptables-services [root@test ~]# iptables -F [root@test ~]# service iptables save iptables: Saving firewall rules to /etc/sysconfig/iptables:[ 確定 ]說明:?進(jìn)行該設(shè)置的原因是NAT模式是基于防火墻nat表的一種模式,所以會使用iptables規(guī)則。
是為了讓它條用一個空規(guī)則,等會配置一條新的規(guī)則。
開始搭建
配置director (135):
腳本解釋 #! /bin/bash # director 服務(wù)器上開啟路由轉(zhuǎn)發(fā)功能 echo 1 > /proc/sys/net/ipv4/ip_forward # 關(guān)閉icmp的重定向 echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects echo 0 > /proc/sys/net/ipv4/conf/default/send_redirects # 注意區(qū)分網(wǎng)卡名字,adai的兩個網(wǎng)卡分別為ens33和ens37 echo 0 > /proc/sys/net/ipv4/conf/ens33/send_redirects echo 0 > /proc/sys/net/ipv4/conf/ens37/send_redirects # director 設(shè)置nat防火墻 iptables -t nat -F iptables -t nat -X iptables -t nat -A POSTROUTING -s 192.168.8.0/24 -j MASQUERADE # director設(shè)置ipvsadm規(guī)則 IPVSADM='/usr/sbin/ipvsadm' $IPVSADM -C #-C=clear,清除規(guī)則 $IPVSADM -A -t 192.168.75.128:80 -s rr #-A:=add,添加規(guī)則;-t:=tcp;-s 指定算法; #在此可以添加-p:指定超時時間(解決session問題:保證同一請求被分發(fā)到同一rs上) #因為添加-p選項后會影響測試效果,所以在此不加該參數(shù)(注:時間不能設(shè)置為0) $IPVSADM -a -t 192.168.75.128:80 -r 192.168.8.134:80 -m -w 1 $IPVSADM -a -t 192.168.75.128:80 -r 192.168.8.135:80 -m -w 1 #-a:=add,增加nat架構(gòu)中的rs;-r:指定rs的IP;-m:指定LVS模式為NAT(masquerade) #-w:=weight,指定權(quán)重開始搭建
安裝ipvsadm工具: [root@cham002 ~]# yum install -y ipvsadm配置ipvsadm腳本: [root@cham002 ~]# vim /usr/local/sbin/lvs_nat.sh#! /bin/bash # director 服務(wù)器上開啟路由轉(zhuǎn)發(fā)功能 echo 1 > /proc/sys/net/ipv4/ip_forward # 關(guān)閉icmp的重定向 echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects echo 0 > /proc/sys/net/ipv4/conf/default/send_redirects # 注意區(qū)分網(wǎng)卡名字,的兩個網(wǎng)卡分別為ens33和ens37 echo 0 > /proc/sys/net/ipv4/conf/ens33/send_redirects echo 0 > /proc/sys/net/ipv4/conf/ens37/send_redirects # director 設(shè)置nat防火墻 iptables -t nat -F iptables -t nat -X iptables -t nat -A POSTROUTING -s 192.168.230.0/24 -j MASQUERADE # director設(shè)置ipvsadm IPVSADM='/usr/sbin/ipvsadm' $IPVSADM -C $IPVSADM -A -t 192.168.118.147:80 -s lc -p 3 $IPVSADM -a -t 192.168.118.147:80 -r 192.168.230.130:80 -m -w 1 $IPVSADM -a -t 192.168.118.147:80 -r 192.168.230.145:80 -m -w 1執(zhí)行該腳本: [root@cham002 ~]# sh /usr/local/sbin/lvs_nat.sh #注:執(zhí)行該腳本時無錯誤輸出說明沒問題。查看ipvsadm規(guī)則 [root@cham002 ~]# ipvsadm -ln IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 192.168.118.147:80 lc persistent 3-> 192.168.230.130:80 Masq 1 0 0 -> 192.168.230.145:80 Masq 1 0 0配置rs:
在兩臺rs上安裝Nginx,并分別設(shè)置其主頁用來區(qū)分兩臺機(jī)器。?
130 [root@cham1 ~]# yum install -y nginx [root@cham1 ~]# yum install -y epel-release(如果沒有nginx安裝包需要安裝擴(kuò)展源) 編輯rs1主頁: [root@cham1 ~]# vi /usr/share/nginx/html/index.html [root@cham1 ~]# curl localhost cham 130145這臺做keepalivad的時候已經(jīng)安裝了 編輯rs2主頁: [root@test ~]# vim /usr/share/nginx/html/index.html [root@test ~]# curl localhost cham 145 backup backup.測試
訪問公網(wǎng)IP:192.168.118.147。瀏覽器可能有緩存問題。
[root@cham002 ~]# curl 192.168.118.147 cham 145 backup backup. [root@cham002 ~]# curl 192.168.118.147 cham 130[root@cham002 ~]# curl 192.168.118.147 cham 145 backup backup. [root@cham002 ~]# curl 192.168.118.147 cham 130[root@cham002 ~]# curl 192.168.118.147 cham 145 backup backup. [root@cham002 ~]# curl 192.168.118.147 cham 130[root@cham002 ~]# curl 192.168.118.147 cham 145 backup backup. [root@cham002 ~]# curl 192.168.118.147 cham 130[root@cham002 ~]# curl 192.168.118.147 cham 145 backup backup. [root@cham002 ~]# curl 192.168.118.147 cham 130[root@cham002 ~]# curl 192.168.118.147 cham 145 backup backup. [root@cham002 ~]# curl 192.168.118.147 cham 130?
轉(zhuǎn)載于:https://my.oschina.net/u/3708120/blog/1615426
總結(jié)
以上是生活随笔為你收集整理的18.6 负载均衡集群介绍 18.7 LVS介绍 18.8 LVS调度算法 18.9/18.10 LVS NAT模式搭建的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: cmake使用教程(一)-起步
- 下一篇: CF A. DZY Loves Has