• 如何部署lvs负载均衡集群 DR模式


    Lvs _DR 模式

    也是最常见的lv负载方式 DR DIRECT ROUTING 直接路由模式

    DR模式工作过程

    1 .客户端请求vip

    2、LVS的调度器接受请求之后,根据算法选择一台后端的真实服务器, 请求转发到后端RS,请求的报 文的目的MAC地址,修改成后端真实服务器的MAC地址。转发。

    3、后端真实服务器接受请求,处理完成之后,由于后端服务器直接把响应结果转发给客户端,响应报文中的目的MAC地址修改成客户端的MAC地址。直接把响应报文转发到客户端。

    4、调度器,后端真实服务器都有vip地址,调度的地址和后端真实服务器在同一网段。

    DR模式的特点

    1调度器的ip和真是服务器的ip必须在同一个物理网络中

    2真实服务器的IP地址可以是私有地址,也可以是公网地址,如果配置的是公网,通过互联网直接可以访问RIP

    3调度器只作为入口,但是不做网关(不转发数据包),要把服务器的转发功能关闭

    4真实服务器的网关也不能指向调度器,真实服务器的数据不允许经过调度器

    5后端真实服务器 基于lo接口配置vip 的Ip地址。

    ARP协议:网络层协议将Ip地址解析为物理MAC地址

    ARP 请求主机A和主机B

    ARP解决局域网内部的通信,IP地址和MAC地址映射。

    DR模式的调度器和后端服务器都在一个网段中,通过ARP请求实现

    问题1:

    由于调度器和后端真实服务器的都有相同的vip地址,导致响应冲突,ARP通信紊

    对真实服务器进行处理,真实服务器不响应针对VIP的arp请求

    VIP地址使用LO的虚拟地址:arp_ignore=1

    后端真实服务器只响应目的IP为本地IP地址,也就是rip,后端服务器的真正IP地址 ens提供的地址

    问题2;

    返回报文使用的原地址还是vip,调度器也是vip怎么把响应返回到客户端不经过调度器呢后端真实服务器做一内核参数的优化,ARP_announce=2 系统不同使用ip数据吧的源地址,来设置arp 的请求 真实的物理网卡的地址

    DR模式:核心就是响应客户端由后端的真实服务器完成,不需要经过调度器

    vip地址,调度器和后端服务器都要有vip地址

     VIP地址:是暴露访问地址,调度器转发请求的标识,调度器和后端服务器进行通信,高可用dr 模式的高可用 其他所有的请求和响应都是禁用的

    修改VIP的调度算法:

    ipvsadm -E -t 192.168.233.100:80 -s wrr

    修改权重:

    TCP 192.168.233.100:80 wrr

    #表示VIP地址,wrr负载均衡的调度算法

    -> 192.1 68.233.20:80  Route 1 0 0

    -> 192.1 68.233.30:80  Route 1 0 0

    #指向后端的真实服务器

    Forward:   

    # 负载均衡算法和负载均衡方式。route 就是DR模式

    weight:      

    #后端服务器的轮询权重

    ActiveConn:   

    #活跃连接,表示调取器正在处理的活动连接数这些连接正在进行传输数据或者正在进行交互。

    InActConn:    

    #表示挡圈处于非活动状态的连接数。已经建立连接但是目前没有数据传输,第二个连接处于的等待状态。

    DR实验步骤

    如何实现DR模式的负载均衡:

    调度器 20.0.0.20  

    集群1 20.0.0.30

    集群2 20.0.0.40

    NFS 20.0.0.50

    vip地址 20.0.0.100

    客户机随机

    20.0.0.20:

     systemctl stop firewalld

    [root@localhost ~]# setenforce 0

    [root@localhost ~]# modprobe ip_vs

    [root@localhost ~]# yum -y install ipvsadm

    #配置公网vip地址

    [root@localhost ~]# ifconfig ens33:0 20.0.0.100/24

    [root@localhost ~]# ifconfig

    #调度器的内核优化

    [root@localhost ~]# vim /etc/sysctl.conf

    #检测下

    [root@localhost ~]# sysctl -p

    调度器的内核优化

    net.ipv4.ip_forward = 0

    #关闭服务器作为网关的转发功能

    net.ipv4.conf.all.send_redirects = 0

    #控制是否发送icmp的重定向消息,禁止重定向

    net.ipv4.conf.default.send_redirects = 0

    #默认网络接口,就是调度器的网卡,发送icmp的重定向消息

    net.ipv4.conf.ens33.send_redirects = 0

    #指明网卡设备,ens33 不发送重定向消息

    #调度器上配置策略  添加vip地址 指定算法

    [root@localhost ~]# ipvsadm -A -t 20.0.0.100:80 -s rr

    [root@localhost ~]# ipvsadm -a -t 20.0.0.100:80 -r 20.0.0.30:80 -g

    [root@localhost ~]# ipvsadm -a -t 20.0.0.100:80 -r 20.0.0.40:80 -g

    [root@localhost ~]# ipvsadm-save > /etc/sysconfig/ipvsadm

    [root@localhost ~]# systemctl restart ipvsadm.service

    #查询当前配置的策略

    [root@localhost ~]# ipvsadm -ln

    IP Virtual Server version 1.2.1 (size=4096)

    Prot LocalAddress:Port Scheduler Flags

      -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

    TCP  127.0.0.1:80 rr

      -> 20.0.0.30:80                 Route   1      0          0

      -> 20.0.0.40:80                 Route   1      0          0

    #删除重新配

    [root@localhost ~]# ipvsadm -D -t 20.0.0.100:80

    No such service

    [root@localhost ~]# ipvsadm -D -t 127.0.0.1:80

    [root@localhost ~]# ipvsadm -ln

    #已删除

    IP Virtual Server version 1.2.1 (size=4096)

    Prot LocalAddress:Port Scheduler Flags

      -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

    #添加真实服务器地址

    [root@localhost ~]# ipvsadm -A -t 20.0.0.100:80 -s rr

    [root@localhost ~]# ipvsadm -a -t 20.0.0.100:80 -r 20.0.0.30:80 -g

    [root@localhost ~]# ipvsadm -a -t 20.0.0.100:80 -r 20.0.0.40:80 -g

    [root@localhost ~]# ipvsadm-save > /etc/sysconfig/ipvsadm

    [root@localhost ~]# systemctl restart ipvsadm.service

    [root@localhost ~]# ipvsadm -ln

    IP Virtual Server version 1.2.1 (size=4096)

    Prot LocalAddress:Port Scheduler Flags

      -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

    TCP  20.0.0.100:80 rr

      -> 20.0.0.30:80                 Route   1      0          0

      -> 20.0.0.40:80                 Route   1      0          0

    20.0.50

    [root@www ~]# systemctl stop firewalld

    [root@www ~]# setenforce 0

    [root@www ~]# mkdir /opt/kgc

    [root@www ~]# mkdir /opt/benet

    [root@www ~]#

    #配置共享目录

    [root@www ~]# vim /etc/exports

    /opt/kgc 20.0.0.0/24(rw,sync)

    /opt/benet 20.0.0.0/24(rw,sync)

    [root@www ~]# chmod 777 /opt/kgc/ /opt/benet/

    [root@www ~]# systemctl restart rpcbind

    [root@www ~]# systemctl restart nfs

    [root@www ~]# exportfs -rv

    exporting 20.0.0.0/24:/opt/benet

    exporting 20.0.0.0/24:/opt/kgc

    [root@www ~]# showmount -e

    #设置页面

    [root@www ~]# cd /opt

    [root@www opt]# echo "this is kgc" > kgc/index.html

    [root@www opt]# echo "this is benet" > benet/index.html

    20.0.0.30

    [root@localhost ~]# systemctl restart nginx

    [root@localhost ~]# systemctl restart rpcbind

    [root@localhost ~]# systemctl restart nfs

    #暴露功能共享目录

    [root@localhost ~]# showmount -e 20.0.0.50

    Export list for 20.0.0.50:

    /opt/benet 20.0.0.0/24

    /opt/kgc   20.0.0.0/24

    [root@localhost ~]# mount 20.0.0.50:/opt/kgc /usr/share/nginx/html/

    [root@localhost ~]# curl 20.0.0.30

    this is kgc

    [root@localhost ~]# cd /etc/sysconfig/network-scripts/

    [root@localhost network-scripts]# ls

    #基于Lo 这个回环接口创建虚拟网卡 绑定vip

    [root@localhost network-scripts]# cp ifcfg-lo ifcfg-lo:0

    cp: overwrite ‘ifcfg-lo:0’? yes

    [root@localhost network-scripts]# vim ifcfg-lo:0

    #100dd

    DEVICE=lo:0

    ONBOOT=yes

    IPADDR=20.0.0.100

    NETMASK=255.255.255.255

    #打开lo 已经有了

    [root@localhost network-scripts]# ifup lo:0

    [root@localhost network-scripts]# ifconfig

    lo:0: flags=73  mtu 65536

            inet 20.0.0.100  netmask 255.255.255.255

            loop  txqueuelen 1  (Local Loopback)

    #把VIP的地址绑定到lo:0,作为LVs 的VIP地址,标识,告诉调度器,进行转发请求的ip 地址寻址

    [root@localhost network-scripts]# route add -host 20.0.0.100 dev lo:0

    #做内核化 只能让真实的ip地址作为访问请求 vip要给办掉

    [root@localhost network-scripts]# vim /etc/sysctl.conf

    net.ipv4.conf.lo.arp_ignore = 1

    #设置lo接口忽略来自任何接口的ARP请求

    net.ipv4.conf.lo.arp_announce = 2

    设置lo接口仅会响应本地的IP地址,其他的接口ARP请求,全部忽略

    net.ipv4.conf.all.arp_ignore = 1

    所有接口忽略来自任务接口的ARP请求

    net.ipv4.conf.all.arp_announce = 2

    # 所有接口仅会响应本地的IP地址的ARP请求,其他的接口的ARP请求全部忽略

    #查看内核优化文件

    [root@localhost network-scripts]# sysctl -p

    20.0.0.40

    [root@localhost ~]# systemctl restart nginx

    [root@localhost ~]# systemctl restart rpcbind

    [root@localhost ~]# systemctl restart nfs

    #暴露功能共享目录

    [root@localhost ~]# showmount -e 20.0.0.50

    [root@localhost ~]# mount 20.0.0.50:/opt/benet /usr/local/nginx/html/

    [root@localhost ~]# cd /etc/sysconfig/network-scripts/

    [root@localhost network-scripts]# cp ifcfg-lo ifcfg-lo:0

    [root@localhost network-scripts]# vim ifcfg-lo:0

    #100dd

    DEVICE=lo:0

    ONBOOT=yes

    IPADDR=20.0.0.100

    NETMASK=255.255.255.255

    [root@localhost network-scripts]# ifup ifcfg-lo:0

    [root@localhost network-scripts]# ifconfig

    lo:0: flags=73  mtu 65536

            inet 20.0.0.100  netmask 255.255.255.255

            loop  txqueuelen 1  (Local Loopback)

    [root@localhost network-scripts]# route add -host 20.0.0.100 dev lo:0

    回到30查看内核优化文件复制过来

    [root@localhost network-scripts]# sysctl -p

    net.ipv4.conf.lo.arp_ignore = 1

    net.ipv4.conf.lo.arp_announce = 2

    net.ipv4.conf.all.arp_ignore = 1

    net.ipv4.conf.all.arp_announce = 2

    #配置内核文件

    [root@localhost network-scripts]# vim /etc/sysctl.conf

    [root@localhost network-scripts]# sysctl -p

  • 相关阅读:
    分辨率兼容学习笔记
    鸡尾酒学习——长岛冰茶
    Go Gin Gorm Casbin权限管理实现 - 2. 使用Gorm存储Casbin权限配置以及`增删改查`
    mysql基础
    EasyExcel的简单读取操作
    彻底搞懂cookie、session和token
    安装网页书签收藏夹Shiori
    Linux su sudo命令
    House of apple 一种新的glibc中IO攻击方法
    LeetCode(力扣)860. 柠檬水找零Python
  • 原文地址:https://blog.csdn.net/Lachewuxian/article/details/133996484