lvs+keepalived

lvs模式介紹

一、DR模式【重點】

               ----------------------------》real server

client--------------------------》lvs----------------------------》real server
              
                                               ----------------------------》real server



a、dr模式是經過修改目的mac地址來進行數據包轉發的


b、數據包在client的源ip是client的ip,目的ip是lvs的ip,這裏叫vip


c、數據包在lvs的源ip是client的ip,目的ip是lvs的ip,這裏叫vip,可是他的目的mac地址是後面real server的mac地址,這裏具體要封裝哪一個mac地址就看負載的模式


d、數據包到real server,real server這裏比較特殊,有以下特色
一、real server要能夠直接訪問client,或者出外網,由於dr模式不會通過lvs
二、real server是要設置vip,可是這個vip不能設置在實際的物理網口上,須要設置到loopback口上
三、real server要作arp抑制


e、數據包到real server後,real server處理後會直接轉發給client,不會通過lvs

f、dr模式性能很強,realserver能夠多達100臺

g、不支持端口轉換,也就是說你訪問lvs的80端口,也只能轉發到real server的80端口

二、NAT模式【不多用】

nat模式是經過修改目的ip地址來進行數據包轉發的


client-------------------------------》lvs------------------------》route---------------------------》realerver{多個}



cip:vip                                   cip:rip1                                                                      rip1:cip



a、數據包返回的時候會通過lvs,數據包的爲rip1:cip,lvs會修改源ip爲vip,也就是說數據包變爲vip:cip,而後轉發出去

b、數據包進去的時候作個DNAT,出去的時候作個SNAT

c、只須要在調度器上配置能夠出外網ip,real server不須要配置能夠出外網的ip

d、因爲請求和響應的包都通過lvs,因此lvs會存在性能瓶頸

e、nat模式,後端的realserver最多10~20臺

f、nat模式,支持端口轉換,也就是說訪問lvs的80端口,能夠轉發到realserver的8080端口



三、tunnel模式【不多用】

            ip tunnel
               ----------------------------》real server

client--------------------------》lvs----------------------------》real server
              
                                               ----------------------------》real server


cip:vip              cip:vip:rip1  走隧道到real server       vip:cip會直接轉發出去,不通過lvs



a、數據包進來走lvs,返回直接給client和dr模式同樣

b、tunnel模式自己不對數據包作更改,只是在數據包進來的時候在數據包外面加個ip頭,這個ip頭就是real server的ip


c、在real server上解包發現目的ip是vip,默認狀況下他不會解包,全部咱們要在real server的loopback上配置vip,一樣也要抑制arp

d、出現的時候源ip是vip。目的ip是cip,而後直接走本身的網關出去了



四、fullNAT模式【不多用】



----------------------------------------------------------------------------------------------------
lvs的調度算法

固定調度算法
rr        輪詢
wrr     權重輪詢
dh       目的地址hash
sh       源地址hash


動態調度算法


----------------------------------------------------------------------------------------------------
安裝/配置lvs

lvs是工做在linux內核層,經過下面的命令查看服務器是否安裝lvs
lsmod |grep ip_vs查看


這裏須要注意,必需要先安裝好keepalived,而後啓動keepalived才能看到有ip_vs或者是按照好ipvsadm

一、安裝keepalived
a、yum install net-snmp


b、rpm -vih /mnt/cdrom/Packages/keepalived-1.2.7-3.el6.x86_64.rpm


二、啓動keepalived
[root@test1 keepalived]# /etc/init.d/keepalived start
Starting keepalived:                                       [  OK  ]


[root@test1 keepalived]# /etc/init.d/keepalived status
keepalived (pid  4531) is running...

三、查看lsmod
[root@test1 keepalived]# lsmod |grep ip_vs
ip_vs_rr                1420  3
ip_vs                 115643  5 ip_vs_rr
libcrc32c               1246  1 ip_vs
ipv6                  321422  142 ip_vs,ip6t_REJECT,nf_conntrack_ipv6,nf_defrag_ipv6



三、安裝ipvsadm,管理ipvs的工具
rpm -ivh /mnt/cdrom/Packages/ipvsadm-1.25-10.el6.x86_64.rpm


有以下輸出就證實安裝成功
[root@test3 yum.repos.d]#
[root@test3 yum.repos.d]# ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn


四、配置一個vip

[root@test1 rpm-gpg]# ip addr add 10.87.7.195 dev eth1 label eth1:1


[root@test1 rpm-gpg]# ping 10.87.7.195
PING 10.87.7.195 (10.87.7.195) 56(84) bytes of data.
64 bytes from 10.87.7.195: icmp_seq=1 ttl=64 time=0.018 ms
64 bytes from 10.87.7.195: icmp_seq=2 ttl=64 time=0.024 ms

[root@test1 rpm-gpg]# ifconfig
eth1      Link encap:Ethernet  HWaddr FE:FC:FE:45:A2:A1  
          inet addr:10.87.7.190  Bcast:10.87.7.255  Mask:255.255.255.0
          inet6 addr: fe80::fcfc:feff:fe45:a2a1/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:76290610 errors:0 dropped:0 overruns:0 frame:0
          TX packets:5689188 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:10018902648 (9.3 GiB)  TX bytes:1754614859 (1.6 GiB)

eth1:1    Link encap:Ethernet  HWaddr FE:FC:FE:45:A2:A1  
          inet addr:10.87.7.195  Bcast:0.0.0.0  Mask:255.255.255.255
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:4126 errors:0 dropped:0 overruns:0 frame:0
          TX packets:4126 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:375945 (367.1 KiB)  TX bytes:375945 (367.1 KiB)



五、清空以前lvsadm的配置
ipvsadm -C

六、添加一個虛擬實例
ipvsadm -A -t 10.87.7.247:9200 -s rr

-A添加一個虛擬服務
-t 指定一個虛ip和端口
-s 指定調度算法


七、查看虛擬服務
[root@test1 nodes]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  10.87.7.195:9200 rr



八、添加節點
ipvsadm -a -t 10.87.7.247:9200 -r 10.87.7.190:9200  -g

-t  指定在哪一個虛擬服務上添加節點
-r  指定添加的節點
-g 是默認的默認,直接路由模式


再次查看,發現190這個節點以及被掛載到195這個虛擬ip下面了

[root@test1 nodes]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  10.87.7.195:9200 rr
  -> 10.87.7.190:9200             Local   1      0          0



九、添加其餘節點
[root@test1 nodes]# ipvsadm -a -t 10.87.7.195:9200 -r 10.87.7.191:9200  -g
[root@test1 nodes]# ipvsadm -a -t 10.87.7.195:9200 -r 10.87.7.192:9200  -g



再次查看,將全部節點添加上去
[root@test1 nodes]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  10.87.7.195:9200 rr
  -> 10.87.7.190:9200             Local   1      0          0         
  -> 10.87.7.191:9200             Route   1      0          0         
  -> 10.87.7.192:9200             Route   1      0          0



十、爲虛擬服務刪除節點
[root@test1 nodes]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  10.87.7.195:9200 rr
  -> 10.87.7.190:9200             Local   1      0          0         
  -> 10.87.7.191:9200             Route   1      0          0         
  -> 10.87.7.192:9200             Route   1      0          0         
[root@test1 nodes]# ipvsadm -d -t 10.87.7.195:9200 -r 10.87.7.192:9200
[root@test1 nodes]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  10.87.7.195:9200 rr
  -> 10.87.7.190:9200             Local   1      0          0         
  -> 10.87.7.191:9200             Route   1      0          0


十一、真實節點綁定vip並添加路由
ip addr add 10.87.7.247/32 dev lo label lo:1

route add -host 10.87.7.247 dev lo


十二、在real server 上配置arp抑制
echo 1 >/proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 >/proc/sys/net/ipv4/conf/all/arp_announce
echo 1 >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 >/proc/sys/net/ipv4/conf/lo/arp_announce

1三、查看訪問的狀況
[root@test1 rpm-gpg]# ipvsadm -L -n --stats
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port               Conns   InPkts  OutPkts  InBytes OutBytes
  -> RemoteAddress:Port
TCP  10.87.7.195:9200                    6       21        0     1188        0
  -> 10.87.7.190:9200                    2        3        0      164        0
  -> 10.87.7.191:9200                    2        9        0      512        0
  -> 10.87.7.192:9200                    2        9        0      512        0



1四、lvs沒有健康檢查功能,節點故障後,lvs會沒法感知的


1五、lvs配置ip包轉發

echo 1 > /proc/sys/net/ipv4/ip_forward


1六、設置超時設置
查看:ipvsadm -L --timeout
設置:ipvsadm --set 5 10 300
--------------------------------------------------------------------------node

keepalived主要是用來監控lvs,是高可用集羣

後來加入vrrp,虛擬路由冗餘協議

一、failover功能,就是靠vrrp協議進行通訊的
主節點工做,備節點處於備份狀態,當主節點宕機,備節點接管,當主節點恢復,備節點把資源交接給主節點


二、由於他是爲lvs設計的,只要在配置文件中配置,就能夠實現lvs功能,因此他們很是親密

三、keepalived能夠對lvs下面的節點作健康檢查



故障切換轉移原理
經過vrrp協議來實現的,在正常工做的時候,keepalived的主節點週期性的不斷的發送心跳消息給備節點,證實本身還活,若是備機收不到master發的心跳包,就會接管資源提供服務



vrrp協議
虛擬路由冗餘協議,他的出現就是解決靜態路由單點的問題
是經過競選的機制來將任務交個某臺vrrp路由器,在vrrp的路由器中能夠有多臺路由器,可是正常狀況,就是一臺工做,其餘都是備節點,vrrp協議讓每一個路由器競選,獲勝就是master,經過優先級來肯定誰是master,優先級大的就是master

master特權:要綁定ip地址,要啓動一些資源,對外提供服務,響應arp請求



四、啓動keepalived
[root@test2 test]# /etc/init.d/keepalived status
keepalived is stopped
[root@test2 test]# /etc/init.d/keepalived start
Starting keepalived:                                       [  OK  ]
[root@test2 test]# /etc/init.d/keepalived status
keepalived (pid  9094) is running..


五、配置文件詳解




  3 global_defs {
  4    notification_email {
  5      acassen@firewall.loc
  6      failover@firewall.loc
  7      sysadmin@firewall.loc
  8    }
  9    notification_email_from Alexandre.Cassen@firewall.loc                郵件發件人
 10    smtp_server 192.168.200.1                                                      郵件服務器地址
 11    smtp_connect_timeout 30                                                         郵件服務器超時時間
 12    router_id LVS_DEVEL                                                                serverid,在不一樣的keepalived服務器之間,這個id不能同樣,不一樣的keepalived節點這個不同
 13 }



全局配置
5/6/7 keepalived出問題 告警給誰
九、郵件發件人







 15 vrrp_instance VI_1 {                                                             實例的名字,能夠改,可是通常不會改
 16     state MASTER                                                                  服務器的狀態,僅僅是傀儡,不一樣的keepalived之間這個不同
 17     interface eth0                                                                  網卡
 18     virtual_router_id 51                                                         這個實例的id,能夠有n多個實例,這個務必要同樣
 19     priority 100                                                                      vrrp的優先級,用來競選的。對方最比如這個值小50,不一樣的keepalived之間這個不同
 20     advert_int 1                                                                    心跳的間隔,默認是1s
 21     authentication {                                                              服務器之間的須要經過密碼來進行通訊,這裏不建議改
 22         auth_type PASS
 23         auth_pass 1111
 24     }
 25     virtual_ipaddress {                                                           虛擬ip地址,就是往interface指定的網卡上綁定ip地址,能夠是多個也能夠是1個
 26         192.168.200.16
 27         192.168.200.17
 28         192.168.200.18
 29     }
 30 }


keepalived的實例的配置或者是vrrp的實例的配置,表明一個服務linux

 

32行一下涉及到lvs,暫時不設計
 32 virtual_server 192.168.200.100 443 {
 33     delay_loop 6
 34     lb_algo rr
 35     lb_kind NAT
 36     nat_mask 255.255.255.0
 37     persistence_timeout 50
 38     protocol TCP
 39
 40     real_server 192.168.201.100 443 {
 41         weight 1
 42         SSL_GET {
 43             url {
 44               path /
 45               digest ff20ad2481f97b1754ef3e12ecd3a9cc
 46             }
 47             url {
 48               path /mrtg/
 49               digest 9b3a0c85a887a256d6939da88aabd8cd
 50             }
 51             connect_timeout 3
 52             nb_get_retry 3
 53             delay_before_retry 3
 54         }
 55     }
 56 }


十、啓動keepalived,查看ip地址,只能經過ip a查看,只能在一個節點上看到該ip

[root@test1 keepalived]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether fe:fc:fe:45:a2:a1 brd ff:ff:ff:ff:ff:ff
    inet 10.87.7.190/24 brd 10.87.7.255 scope global eth1
    inet 10.87.7.246/32 scope global eth1
    inet6 fe80::fcfc:feff:fe45:a2a1/64 scope link
       valid_lft forever preferred_lft forever



十一、測試keepalived切換
a、關掉master的keepalived服務
[root@test1 keepalived]# /etc/init.d/keepalived stop
Stopping keepalived:                                       [  OK  ]


b、查看ip已經切換
[root@test2 keepalived]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether fe:fc:fe:29:61:b6 brd ff:ff:ff:ff:ff:ff
    inet 10.87.7.191/24 brd 10.87.7.255 scope global eth1
    inet 10.87.7.246/32 scope global eth1
    inet6 fe80::fcfc:feff:fe29:61b6/64 scope link
       valid_lft forever preferred_lft forever


c、啓動master的keepalived,查看ip已經切換回去
[root@test1 keepalived]# /etc/init.d/keepalived start
Starting keepalived:                                       [  OK  ]
[root@test1 keepalived]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether fe:fc:fe:45:a2:a1 brd ff:ff:ff:ff:ff:ff
    inet 10.87.7.190/24 brd 10.87.7.255 scope global eth1
    inet 10.87.7.246/32 scope global eth1
    inet6 fe80::fcfc:feff:fe45:a2a1/64 scope link
       valid_lft forever preferred_lft forever



十二、keepalived是監管服務器級別的故障,對於其餘服務沒法作到監管


咱們能夠本身寫代碼去監控服務的狀態,若是服務的狀態異常,則關閉keepalived服務,若是服務正常恢復,則在拉起keepalived服務算法

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息