lvs的nat模式

lvs的nat图解:
linux

lvs的nat模式和dr模式的主要的差异就是nat模式的调度器要负责消息的接收和发送,而dr模式中的调度器只须要负责消息的接收,至于消息的发送直接有后面的realserver直接返回给客户端;vim


须要遵循如下规则:(dir为调度器的ip,rip为realserver的ip)bash

1.调度器中的dip和rip要在同一个网络中,若是Dip和rip不在同一网络中,就不能将报文送达到realserver,同时realserver的网关要设置为和Dip同样的网关,不然报文从realserver没法到达DIP服务器

2.Rip一般为私有地址,仅能和集群节点中(Dip通讯)。网络

3.Director位于clientrealserver之间,处理进去的全部通讯。负载均衡

4.Realserver必须将网关指向Dip框架

5.Director支持端口映射。向外提供服务的端口和realserver的端口可能不一致。curl

Realserver可使用任意操做系统,只用directorlinux就能够。tcp


lvs的工做模式和iptables的工做模式有类似之处:
ide

iptables:在内核空间是netfilter,而在用户空间是iptables,咱们经过iptables写规则,这些规则会在netfilter上面生效;

lvs:在内核空间工做的是ipvs,而在用户空间是ipvsadm,经过命令ipvsadm写规则在内核上面的ipvs框架上生效;


注意:iptables和lvs不能同时使用。缘由是:

iptables中的5个钩子为:(本身理解的,有点粗俗)

prerouting:刚刚进入网络层的数据包经过此节点,尚未到达路由以前,源地址转换在此

input:通过路由以后,如何是访问本机的就会经过此节点

ouput:从本机取到数据以后,出来时要通过的节点,而后走postrouting

forward:定义的转发规则从这里转发到后面的主机

postrouting:出去的时候数据包通过此节点,目标地址转换在此


因为咱们对外公布的地址就是负载均衡本地的地址,因此会经过input连将请求送达到本机上,若是本机的确有个端口在响应这个用户请求,就会回复的,负责拒绝。

很显然,在Lvs中咱们不能让用户的请求到达本机上面去,如何作?

其实咱们的LVS工做在input链上面的,咱们在input上面设置规则,一旦发现用户请求是一个集群服务,就会强行修改这个报文的行程的,原本是到达本机的,结果强行修改行程以后,到达post_routing--->其余主机上

这是有点反常与iptables机制的,因此LVSiptables不能同时使用。



安装以及配置:

首先dir上面配置两个网卡:(192.168.116.137为桥接的,192.168.113.128为host-only模式)

image.png

在其余两台主机上配置一个网卡,度为host-only模式,而且和dir的host-only在同一个网段中,网关指定为192.168.113.128。

在dir上面下载lvs:

#yum install  ipvsadm
打开转发机制:
[root@localhost ~]# echo 1 >/proc/sys/net/ipv4/ip_forward #打开ipv的ip转发机制,当前生效
[root@localhost ~]# vim /etc/sysctl.conf 
#打开ipv的ip转发机制,永久生效
net.ipv4.ip_forward = 1

下来再realserver上面下载安装httpd。并分别编辑访问页面为rs1和rs2.

测试以下:

[root@localhost conf]# curl 127.0.0.1
rs 1
[root@localhost conf]#

下来就是写规则了:

ipvsadm:
    管理集群服务
        添加:-A -t|u|f service-address [-s scheduler]
            -t: TCP协议的集群 
            -u: UDP协议的集群
                service-address:     IP:PORT
            -f: FWM: 防火墙标记 
                service-address: Mark Number
        修改:-E
        删除:-D -t|u|f service-address

   

    管理集群服务中的RS
        添加:-a -t|u|f service-address -r server-address [-g|i|m] [-w weight]
            -t|u|f service-address:事先定义好的某集群服务
            -r server-address: 某RS的地址,在NAT模型中,可以使用IP:PORT实现端口映射;
            [-g|i|m]: LVS类型    
                -g: DR模型
                -i: TUN模型
                -m: NAT模型
            [-w weight]: 定义服务器权重
        修改:-e
        删除:-d -t|u|f service-address -r server-address


    查看
        -L|l
            -n: 数字格式显示主机地址和端口
            --stats:统计数据
            --rate: 速率
            --timeout: 显示tcp、tcpfin和udp的会话超时时长
            -c: 显示当前的ipvs链接情况

    删除全部集群服务
        -C:清空ipvs规则
    保存规则
        -S 
        # ipvsadm -S > /path/to/somefile
    载入此前的规则:
        -R
        # ipvsadm -R < /path/form/somefile

我这里在dir上面添加的规则以下:

ipvsadm -A -t 192.168.116.137:80 -s rr
ipvsadm -a -t 192.168.116.137:80 -r 192.168.113.129 -m
ipvsadm -a -t 192.168.116.137:80 -r 192.168.113.130 -m

而后再dir上面访问测试页面:

image.png


注意:ipvs是在内核中工做,下次重启会致使服务不见了,因此要保存规则

相关文章
相关标签/搜索