1.
應用層的http協議就是規定了字符串的書寫格式,使得雙方用一種語言就能相互通信了。訪問網站的時候是先建立tcp連接(先發一堆tcp的包),再建立發http的包進行通信。
2.
家里買的路由器是一個nat路由器,使用nat機制讓我們上網。
3.
DR模型原理圖:
有一個負載均衡服務器(lvs,或者DR),每一個客戶端都以為自己在和真正的服務器通信,於是目標地址是VIP(虛擬服務器地址,這個地址是負載均衡服務器的一個地址),當負載均衡服務器接收到客戶端的包時,它不改變源ip和目標ip,而是選出一台server,修改包的目標mac,這里的目標mac是后面選出來的server的mac,隨后,由於負載均衡服務器和server在同一個子網,直接發給server那里,當對應的server接收到包時,它有一個隱藏的VIP(*VIP,配置到lo接口里面不對外公布),該IP對外隱藏,對內可見,通過它確認是發給自己的,於是直接向客戶端發回一個相應,源IP為VIP,目標IP為CIP(客戶端的IP)。整個過程只是mac變化了,而源和目的ip都不變。
4.
tun模型:
不同於上面的DR模型,此處克服了負載均衡服務器和server得在一個子網的缺點,此時它們可以位於各個角落,類似於vpn技術。當客戶端發來數據包,其源ip為cip,其目標ip是vip。隨后它選一個server,然后在包的外面再套2個ip,源ip為DIP,目標IP為RIP,然后發給遠在天邊的server,server收到后拆開查看是什么情況,然后再包起來並向負載均衡服務器發回響應,負載均衡服務器再發到客戶端那里去。此處的負載均衡服務器就是代理,即通過代理通信。
5.
隱藏VIP方法:
說明:0:只要本機有那個地址就去響應,1:只有到某個接口上,才給響應。
說明:os可以給一個網卡配置多個ip地址同時使用,對於2:接口上配置了很多ip,指向匹配的那個網絡去通知自己匹配的ip地址。
6.
LVS在內核的模塊叫:ipvs,為了控制內核的工作還得安裝一個ipvsadm程序來間接控制。
7.
怎么分配連接數給虛擬服務器呢?
8.
DR模型試驗:
一、准備三台虛擬機:node01做負載均衡服務器,node02,node03做虛擬服務器RS,客戶端瀏覽器來訪問,node01,node02,node03要在一個網段內,node01的ip是DIP,node02,03的IP是RIP。
二、配置VIP(此處為192.168.10.100)
在node01里面輸入:ifconfig eth0:2 192.168.10.100/24 : 在eth0這個大接口的子接口2配置一個ip,為192.168.10.100,子網掩碼是255.255.255.0
在node01里面輸入:echo 1 > /proc/sys/net/ipv4/ip_forward :將1覆蓋到這個文件,意思是如果包的目標地址不是我,則根據路由表進行轉發,即:將主機變為了路由器,而0表示:若目標地址不是我,則丟棄。
三、先調整虛擬服務器的響應,再配置VIP。注意:這一步必須在下一步之前,因為為了防止把ip通告出去。
切換到node02:
修改eth0這個接口的文件和其他接口的文件,達到修改級別的目的
echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
該配VIP了:ifconfig lo:0 192.168.10.100 netmask 255.255.255.255:給環回接口的子接口0配置vip,注意此時是4個255,不能和eth0在同一個網段。
同理再配置node03,與上面是一模一樣的代碼。
四、給虛擬服務器安裝httpd服務(靜態的web server)
在node02上 : yum install httpd -y
03....
五、創建網頁內容
在node02上,手工創建主頁:
cd /var/www/html/; vi index
里面寫上:from 192.168.10.12,表示該網頁內容
同理在node03上創建相似的內容,不過為了讓我看到負載均衡的分配過程,把內容改成:from 192.168.10.13
接着在node02,node03上啟動服務:service httpd start(本質上就是執行了httpd可執行文件,並把start作為參數傳給httpd文件)
然后在外面的客戶端瀏覽器直接輸入02,03的真實ip(RIP)看能不能訪問,如果能說明網站服務弄好了。
六、配置node01負載均衡
安裝命令:yum install ipvsadm -y
設置監控的包:ipvsadm -A -t(tcp協議) 192.168.10.100:80 -s rr(做輪詢)
接着用ipvsadm -ln:查看一下
追加real server02,來監控它:ipvsadm -a -t 192.168.10.100:80(基於它) -r 192.168.10.12:80 -g(做路由)
。。。。03。。。
接着用ipvsadm -ln:查看一下
最后在客戶端瀏覽器訪問:192.168.10.100(vip),不斷刷新進行查看
然后在node01,02,03里面輸入:netstat -natp看看連接數,發現01里面都沒有,而02,03里面有很多,說明客戶端是和real server建立的鏈接,而不是lvs
在lvs里面輸入:ipvsadm -lnc:查看lvs偷窺到的記錄,其中final_wait:表示斷開的記錄。
9.
keepalived
這是一個服務軟件
由於lvs和防火牆都是操控網絡協議棧的,它們一起用會沖突,所以在lvs上要關閉防火牆。都是由lvs上的keepalived來探測主和備用lvs是否可用,以及lvs所監控的RS是否正常工作。
大體功能:能夠看出哪個lvs出故障了,然后迅速啟動備用lvs並配置;看看RS是否正常,若不正常則從lvs中刪掉該故障的RS.
實驗未完成:
1.先清空之前配置好的東西,由keepalived來配置:在lvs(node01)上輸入:ipvsadm -C
再清理掉接口:ifconfig ens33:0 dowm
2.在lvs上安裝keepalived:yum install keepalived -y
開一個node04,也裝上:yum install keepalived ipvsadm(裝它是為了查看內核情況,其實keepalived能替代ipvsadm去配置) -y
3.修改node01和node04的配置文件
cd /etc/keepalived/
然后備份配置文件:cp keepalived.conf keepalived.conf.bak
修改配置文件:vi keepalived.conf,其中第一段表明,若出故障則發送郵件通知外面的人,
vrrp是一個協議,負責:當一個lvs掛了,另一個給它配上vip,state master表明這是主lvs。接着到virtual_service這一段,表明這是對lvs的配置。
在vrrp里面的virtual_ipaddress里面刪掉ip,改為:192.168.10.100/24 dev ens33(指定ens33這個設備) label ens33:3 ,這句話等價於:ifconfig ens33:3 192.168.10.100/24
修改virtual_server這一段,修改模型:將第三行的nat改為DR,修改上面的ip:virtual_server 192.168.10.100 80(端口) {
timeout 50表明:當客戶端與RS斷開連接后,在50s之內若又來訪問來了,則lvs應該把它連接到剛剛那個RS上,因為這個RS上可能會有之前為該客戶端開辟的資源殘留,這時能繼續使用。為了達到效果,將50改為0。
改:real_server 192.168.10.12 80 {
再把ssl_get改為:
HTTP_GET{
url {
path /
status_code 200
}
下面是連接超時,重試等相關參數。
由於只有兩個RS,按dG把下面的virtual_server刪掉。在一個virtual_server下面再來一個real_server,改一下ip就好了。
隨后把node01里面的配置文件進行遠程拷貝到node04里面,輸入:scp ./keepalived.conf root@192.168.10.14:/etc/keepalived/
隨后在node04里面,vi keepalived.conf,改成 state BACKUP;priority 50
4.在node01,04里面啟動keepalived服務 : service keepalived start
輸入:ipvsadm -ln,ifconfig查看一下情況。
在客戶端瀏覽器訪問一下網頁看行不行。
禁用node01的網卡,讓主lvs掛了:ifconfig ens33 down
隨后在node04上輸入ifconfig 看看備lvs配置好了沒。
再在主lvs里面輸入:ifconfig ens33 up,看看備lvs有沒有自動卸載掉剛剛那個接口。
5.把keepalived進程關閉看看會發生什么情況
在node01里面輸入:ps -fe | grep keep,查看進程號,隨后殺死進程:
kill -9 3011(dwda
kill -9 3012 ...
不過這時有bug,因為它沒有卸載接口,清理內核模塊。此時另外一個備lvs開始工作。