1. 程式人生 > >堅持#第286天~LVS

堅持#第286天~LVS

VIP是外網入口

CIP訪問過來的ip地址

RS服務的後臺總稱

NAT:POSTROUTING和PREROUTING

CIP是源ip   mac地址    改成   後臺真實ip

VIP是目標地址    mac地址  改成   後臺真實ip

CIP之後變成了目標Ip

SIP是源ip

dr路由

不支援NAT模式

叢集運用到的場景:

LB:以高併發為根本

HA:以線上時間為根本

HPC:高效能運算

cip   去訪問  vip;

dip   去讓rip(真實ip)去幹活   相當於排程器、閘道器

dip和rip是內網的人

NAT不是直接回,是上面第一個圖

DR可以直接回,減輕壓力,是上面第二個圖

大叢集的公司都有公網池

總結:

cip是客戶ip

vip是整個叢集的唯一入口,根據排程策略來轉發,監控成員的健康狀態

dip是排程器的ip,也是管理業務的ip

RS是真實伺服器

rip是真實ip

sip是源ip

keepalived:做排程器的高可用,檢測指令碼;常規業務的高可用叢集。

主定期發訊息:我是主,我的路由id是,我的虛擬id是,我的優先順序是。

主不發訊息了,其他人來爭了,爭贏的那個人做主

如果之前的主上線了,會不會把現在的主趕下去呢?

                                   1.1.1.3、1.1.1.100

1.1.1.1    1.1.1.100 1.1.1.2

客戶      排程器(只需要1塊網絡卡哦)

                                    1.1.1.4、1.1.1.100

都在同一網段,為了分擔壓力,有個排程器

客戶先訪問排程器,在廣播地址說誰的1.1.1.100你的mac地址是多少?

有3個1.1.1.100,如何讓排程器說話,其他閉嘴?使用non-arp工具呀!echo 1 >/proc/sys/net/ipv4/conf/all/arp_ignore //non-arp

能拆包的條件:目標地址是你你才能拆

回包給使用者的時候怎麼保證能以1.1.1.100這個網絡卡去回而不是以其他網絡卡去回?echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce 

經過排程器的時候改寫了mac

[DR]

VS/DR實驗:

start:

兩個排程器,兩個業務

先關閉防火牆selinux,都是NAT的網絡卡

node1:

主機名:dr1.uplook.com

192.168.122.226

node2:

主機名:dr2.uplook.com

192.168.122.214

node3:

主機名:web1.uplook.com

192.168.122.127

node4:

主機名:web2.uplook.com

192.168.122.128

dr1:

vim/etc/hosts

192.168.122.226dr1.uplook.com dr1

192.168.122.214dr2.uplook.com dr2

192.168.122.127web1.uplook.com web1

192.168.122.128web2.uplook.com web2

儲存退出

rsync/etc/hosts dr2:/etc/

rsync/etc/hosts web1:/etc/

rsync/etc/hosts web2:/etc/

date;ssh dr2date;ssh web1 date;ssh web2 date

用一條命令統一時間

date -s “2018020422:36:00”;ssh dr2 date -s “20180204 22:36:00”;ssh web1 date -s “2018020422:36:00”;ssh web2 date -s “20180204 22:36:00”;沒有成功,可能雙引號裡面要單引號確實是這樣的

date -s "2018/2/411:08";ssh 192.168.57.11 "date -s '2018/2/4 11:08'";ssh192.168.57.10 "date -s '2018/2/4 11:08'"

這樣可以:date -s"10:58";ssh 192.168.57.11 date -s "10:58";ssh 192.168.57.10date -s "10:58"

在真機裡面配ntp

yum install-y ntp

vim/etc/ntp.conf裡面

# Hosts onlocal network are less restricted.下面新增

restrict192.168.122.0 mask 255.255.255.0 nomodify notrap

server  127.127.1.0     # local clock

fudge   127.127.1.0 stratum 10

systemctlstart ntpd

systemctlenable ntpd

ntpstat

dr1:

yum install-y ntp

ntpdate 192.168.122.1將時間同步成真實伺服器

其他機器同樣

web1:

yum install-y httpd

echo web1> /var/www/html/index.html

systemctlstart httpd

web2:

yum install-y httpd

echo web2> /var/www/html/index.html

systemctlstart httpd

web1:

ip addr adddev lo 192.168.122.100/32  在lo介面上繫結VIP

web2:

ip addr adddev lo 192.168.122.100/32  在lo介面上繫結VIP

ifconfig看不到loopback裡面的32位的掩碼

ip a看的到

echo 1 >/proc/sys/net/ipv4/conf/all/arp_ignore  //non-arp

echo 2 >/proc/sys/net/ipv4/conf/all/arp_announce

並寫到rc.local

web1:

echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore  //non-arp

echo 2 >/proc/sys/net/ipv4/conf/all/arp_announce

並寫到rc.local

dr1:

ip addr adddev lo 192.168.122.100/32  在lo介面上繫結VIP

yum -yinstall ipvsadm

ipvsadm -A-t 192.168.122.100:80 -s rr

ipvsadm -a-t 192.168.122.100:80 -r 192.168.122.127 -g閘道器模式

ipvsadm -a-t 192.168.122.100:80 -r 192.168.122.128 -g閘道器模式

ipvsadm -Ln

dr2:

ip addr adddev lo 192.168.122.100/32  在lo介面上繫結VIP

yum -yinstall ipvsadm

ipvsadm -A-t 192.168.122.100:80 -s rr

ipvsadm -a-t 192.168.122.100:80 -r 192.168.122.127 -g閘道器模式

ipvsadm -a-t 192.168.122.100:80 -r 192.168.122.128 -g閘道器模式

ipvsadm -Ln

客戶機:

curl192.168.122.100

curl192.168.122.100

curl192.168.122.100

web1/web2上輸入ipvsadm -Ln發現dr1有業務,但dr2沒有業務

web1:

systemctlstop httpd

客戶機:

curl 192.168.122.100

curl192.168.122.100

curl192.168.122.100還是錯誤的也被訪問了

web1:

systemctlstart httpd

dr1:

ifdown eth0排程器dr1如果壞掉了的情況

此操作會導致dr1上回環32掩碼不見,重啟網絡卡也會不見

客戶機:

curl192.168.122.100

curl192.168.122.100

curl192.168.122.100第一次好慢啊,然後就可以訪問了,dr2的業務有了

dr2:

重啟網絡卡

ipvsadm -C清除策略

dr1:

ipvsadm -C清除策略

發現有兩個問題:壞掉的網頁伺服器也能被客戶訪問,浪費客戶流量;dr1掛掉了切換dr2的時候客戶端訪問會很慢

接著使用keepalived來解決

wgetftp://192.168.1.254/pub/CentOS-6.5-x86_64-bin-DVD1.iso

dr1:

yum -yinstall ipvsadm

yum -yinstall keepalived

vim /etc/keepalived/keepalived.conf修改配置檔案

11 global_defs{

 12   router_id LVS_DR1

 13 }

15vrrp_instance VI_1 {

 16    state MASTER

 17    interface eth0看自己網絡卡是什麼就寫什麼

 18    virtual_router_id 51

 19    priority 100

 20    advert_int 1

 21    authentication {

 22        auth_type PASS

 23        auth_pass 1111密碼要統一

 24     }

 25    virtual_ipaddress {定義VIP的

 26        192.168.122.100這就是vip,虛擬的ip

 29     }

 30 }

32virtual_server 192.168.122.100 80 {改為80埠,80後面要有空格

 33    delay_loop 6

 34    lb_algo rr

 35    lb_kind DR換為DR模型

 36    nat_mask 255.255.255.255因為是32位掩碼

 37     #persistence_timeout 50埠持久連線,註釋掉

 38    protocol TCP

 39

 40    real_server 192.168.122.127 80 {真實伺服器ip,80埠

 41        weight 1

           TCP_CHECK {空一格花括號

 51            connect_timeout 3

 52            nb_get_retry 3

 53            delay_before_retry 3

 54        }

 55     }

       下面全刪,然後新增:

       real_server 192.168.122.128 80 {真實伺服器ip,80埠

 41        weight 1

           TCP_CHECK {空一格花括號

 51            connect_timeout 3

 52            nb_get_retry 3

 53            delay_before_retry 3

 54        }

 55     }

 56 }

dr2:

yum -yinstall ipvsadm

yum -yinstall keepalived

scp/etc/keepalived/keepalived.conf dr2:/etc/keepalived/keepalived.conf

dr2:

11 global_defs{

 12   router_id LVS_DR2

 13 }

15vrrp_instance VI_1 {

 16    state MASTER

 17    interface eth0看自己網絡卡是什麼就寫什麼

 18    virtual_router_id 51

 19    priority 80

 20    advert_int 1

 21    authentication {

 22        auth_type PASS

 23        auth_pass 1111密碼要統一

 24     }

 25    virtual_ipaddress {定義VIP的

 26        192.168.122.100這就是vip

 29     }

 30 }

32virtual_server 192.168.122.100 80 {改為80埠,80後面要有空格

 33    delay_loop 6

 34    lb_algo rr

 35     lb_kindDR換為DR模型

 36    nat_mask 255.255.255.255因為是32位掩碼

 37     #persistence_timeout 50埠持久連線,註釋掉

 38    protocol TCP

 39

 40    real_server 192.168.122.127 80 {真實伺服器ip,80埠

 41        weight 1

           TCP_CHECK {空一格花括號

 51            connect_timeout 3

 52            nb_get_retry 3

 53            delay_before_retry 3

 54        }

 55     }

       下面全刪,然後新增:

       real_server 192.168.122.128 80 {真實伺服器ip,80埠

 41        weight 1

           TCP_CHECK {空一格花括號

 51            connect_timeout 3

 52            nb_get_retry 3

 53            delay_before_retry 3

 54        }

 55     }

 56 }

再開一個dr1:

yum install-y tcpdump

tcpdump -ieth0 -vv vrrp

舊dr1:

systemctlstart keepalived

dr2:

systemctlstart keepalived

新dr1:

看抓的包

過了一會兒,優先順序高的會自動生成迴環的32位掩碼,而且策略都自動添加了

客戶機:

curl192.168.122.100

curl192.168.122.100

curl192.168.122.100

web1:

systemctlstop httpd

客戶機:

curl192.168.122.100

curl192.168.122.100

curl192.168.122.100不會訪問錯誤的網站服務了

web1:

systemctlstart httpd

dr1:

將keepalived服務停掉

客戶機:

curl 192.168.122.100

curl192.168.122.100

curl192.168.122.100停掉後也不會訪問錯誤的網站服務了

安裝centOS6.5:

選最後一排圖形

VDA1 BOOT200M

VDA2 SWAP2048

VDA3 /    最後都給他

把每一個標準分割槽做成邏輯卷

LVS排程演算法:

LVS排程演算法有哪些?

rr輪循排程

wrr加權輪循排程

lc最少連結

wlc加權最少連結

dh目標地址雜湊

sh源地址雜湊

LVS永續性連線:

ipvsadm -A-t 192.168.122.100:80 -s rr -p 300

-p持久  300秒   會話保持

ipvsadm -a-t 192.168.122.100:80 -r 192.168.122.10 -g   //gatewaying(direct routing)

ipvsadm -a-t 192.168.122.100:80 -r 192.168.122.20 -g

ipvsadm -Ln-c    檢視

LVS埠親緣性:

WEB的服務  打標記

iptables -tmangle -A PREROUTING -p tcp -d 192.168.122.100 --dport 80 -j MARK --set-mark 80

iptables -tmangle -A PREROUTING -p tcp -d 192.168.122.100 --dport 443 -j MARK --set-mark80

FTP的服務

iptables -tmangle -A PREROUTING -p tcp -d 192.168.122.100 --dport 20-21 -j MARK --set-mark21

iptables -tmangle -A PREROUTING -p tcp -d 192.168.122.100 --dport 50000-60000 -j MARK--set-mark 21

vip相當於網頁中滑鼠移到按鈕上的超連結,排程器的一個入口