linux LVS使用

一、简述lvs四种集群特点及使用场景

  • lvs-nat:修改请求报文的目标IP,多目标IP的DNAT
  • lvs-dr:操纵封装新的MAC地址
  • lvs-tun:在原请求IP报文之外新加一个IP首部
  • lvs-fullnat:修改请求报文的源和目标IP

lvs-nat:本质是多目标IP的DNAT,通过将请求报文中的目标地址和目标端口修改为某挑出的RS的RIP和
PORT实现转发
(1)RIP和DIP应在同一个IP网络,且应使用私网地址;RS的网关要指向DIP
(2)请求报文和响应报文都必须经由Director转发,Director易于成为系统瓶颈
(3)支持端口映射,可修改请求报文的目标PORT
(4)VS必须是Linux系统,RS可以是任意OS系统

LVS-DR:Direct Routing,直接路由,LVS默认模式,应用最广泛,通过为请求报文重新封装一个MAC首部
进行转发,源MAC是DIP所在的接口的MAC,目标MAC是某挑选出的RS的RIP所在接口的MAC地址;源
IP/PORT,以及目标IP/PORT均保持不变

二、描述LVS-DR工作原理,并配置实现。

DR模式的特点:

  1. Director和各RS都配置有VIP
  2. 确保前端路由器将目标IP为VIP的请求报文发往Director
    在前端网关做静态绑定VIP和Director的MAC地址
    在RS上使用arptables工具
    arptables -A IN -d $VIP -j DROP
    arptables -A OUT -s $VIP -j mangle --mangle-ip-s $RIP
    在RS上修改内核参数以限制arp通告及应答级别
    /proc/sys/net/ipv4/conf/all/arp_ignore
    /proc/sys/net/ipv4/conf/all/arp_announce
  3. RS的RIP可以使用私网地址,也可以是公网地址;RIP与DIP在同一IP网络;RIP的网关不能指向
    DIP,以确保响应报文不会经由Director
  4. RS和Director要在同一个物理网络
  5. 请求报文要经由Director,但响应报文不经由Director,而由RS直接发往Client
  6. 不支持端口映射(端口不能修败)
  7. RS可使用大多数OS系统

1、配置各台主机网络

route

NAME="eth0"
DEVICE="eth0"
ONBOOT=yes
BOOTPROTO=none
IPADDR=10.0.0.68
PREFIX=24
TYPE=Ethernet

NAME="eth1"
DEVICE="eth1"
ONBOOT=yes
BOOTPROTO=none
IPADDR=192.168.0.68
PREFIX=24
TYPE=Ethernet

lvs

NAME=eth0
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=none
IPADDR=10.0.0.78
PREFIX=24
GATEWAY10.0.0.68
TYPE=Ethernet

rs1

NAME=eth0
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=none
IPADDR=10.0.0.88
PREFIX=24
GATEWAY10.0.0.68
TYPE=Ethernet

rs2

NAME=eth0
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=none
IPADDR=10.0.0.98
PREFIX=24
GATEWAY10.0.0.68
TYPE=Ethernet

rs1和rs2配置内核参数和vip,要先修改内核参数再添加地址

[root@rs1 ~]#echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@rs1 ~]#echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce 
[root@rs1 ~]#echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@rs1 ~]#echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
[root@rs1 ~]#ifconfig lo:1 10.0.0.100/32


net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
[root@rs1 ~]#sysctl -p
[root@rs1 ~]#ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet 10.0.0.100/0 scope global lo:1
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:95:6d:91 brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.88/24 brd 10.0.0.255 scope global noprefixroute eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::2550:cfe5:a6ee:9192/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
[root@rs2 ~]#ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet 10.0.0.100/0 scope global lo:1
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:02:d7:91 brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.98/24 brd 10.0.0.255 scope global noprefixroute eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe02:d791/64 scope link 
       valid_lft forever preferred_lft forever

lvs添加vip

[root@lvs ~]#ifconfig lo:1 10.0.0.100/32

安装软件包

[root@lvs ~]#yum install ipvsadm

设置规则

[root@lvs ~]#ipvsadm -A -t 10.0.0.100:80 -s rr 
[root@lvs ~]#ipvsadm -a -t 10.0.0.100:80 -r 10.0.0.88:80 -g
[root@lvs ~]#ipvsadm -a -t 10.0.0.100:80 -r 10.0.0.98:80 -g
[root@lvs ~]#ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  10.0.0.100:80 rr
  -> 10.0.0.88:80                 Route   1      0          0         
  -> 10.0.0.98:80                 Route   1      0          0 

访问

[root@centos08 ~]#curl  10.0.0.100
rs1
[root@centos08 ~]#curl  10.0.0.100
rs2
[root@centos08 ~]#curl  10.0.0.100
rs1
[root@centos08 ~]#curl  10.0.0.100
rs2

三、实现LVS+Keepalived高可用。

上一篇:nginx+keepalived实现主从模式双机热备份


下一篇:深入理解JVM-内存模型(jmm)和GC