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服务算法

相关文章
相关标签/搜索
本站公众号
   欢迎关注本站公众号,获取更多信息