LVS负载均衡群集之DR模式+keepalived群集机构(理论+实践篇)

LVS-DR数据包流向分析

  • 为方便进行原理分析,将Client与群集机器放在同一网络中,数据包流经的路线为1-2-3-4

  • Client向目标VIP发出请求, Director (负载均衡器)接收
  • Director根据负载均衡算法选择RealServer 1,不修改也不封装IP报文,而是将数据帧的MAC地址改为RealServer 1的MAC地址,然后在局域网上发送。
  • RealServer_ _1收到这个帧,解封装后发现目标IP与本.机匹配(RealServer事先绑定 了VIP),于是处理这个报文。随后重新封装报文,发送到局域网。
  • Client将收到回复报文。Client认为得到正常的服务 ,而不会知道是哪一台服务器处理的
  • 注意:如果跨网段,那么报文通过路由器经由Internet返回给用户

LVS-DR中的ARP问题

  • 在LVS-DR负载均衡集群中,负载均衡器与节点服务器都要配置相同的VIP地址
  • 在局域网中具有相同的IP地址,势必会造成各服务器ARP通信的紊乱
    • 当一个ARP广播发送到LVS-DR集群时因为负载均衡器和节点服务器都是连接到相同的网络上的,它们都会接收到ARP广播
    • 此时只有前端的负载均衡器进行响应,其他节点服务器不应该响应ARP广播
  • 对节点服务器进行处理,使其不响应针对VIP的ARP请求
    • 使用虚接口lo:0承载VIP地址
    • 设置内核参数arp_ ignore=1: 系统只响应目的IP为本地IP的ARP请求
  • RealServer返回报文(源IP 是VIP)经路由器转发,在重新封装报文时,需要先获取路由器的MAC地址
  • 发送ARP请求时,Linux默认使用IP包的源IP地址( 即VIP)作为ARP请求包中的源IP地址,而不使用发送接口(例如ens33) 的IP地址
  • 路由器收到ARP请求后,将更新ARP表项
  • 原有的VIP对应Director的MAC地址会被更新为VIP对应RealServer的MAC地址
  • 此时新来的请求报文,路由器根据ARP表项,会将该报文转发给RealServer,从而导致Director的VIP失效

解决ARP的两个问题的设置方法

  • 修改/etc/sysctl.conf文件

    • 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

Keepalived

  • 在企业应用中,单台服务器承担应用存在单点故障的危险,在企业应用集群中,存在了至少两处单点故障危险,单点故障一旦发生,企业服务将发生中断,造成极大的危害

Keepalived工具介绍

专为LVS和HA设计的一-款健康检查工具

Keepalived实现原理剖析

  • Keepalived采用VRRP热备份协议实现Linux服务器的多机热备功能
  • VRRP,虚拟路由冗余协议,是针对路由器的一-种备份解决方案
    • 由多台路由器组成一个热备组,通过共用的虚拟IP地址对外提供服务
    • 每个热备组内同- -时刻只有一台主路由器提供服务,其他路由器处于冗余状态
    • 若当前在线的路由器失效,则其他路由器会根据设置的优先级自动接替虚拟IP地址,继续提供服务

    Keepalived master服务器的配置

  • Keepalived配置目录位于F/etc/keepalived/
  • keepalived.conf是主配置文件
    • global_ defs ...}区段指定全局参数
    • vrp_ instance实例名称{..}区段指定VRRP热备参数
    • 注释文字以"!"符号开头
    • 目录samples/,提供了许多配置样例作为参考

常用配置选项讲解

  • router_id HA_TEST_R1: 本路由器(服务器)的名称
  • vrrp_instance VI_1 :定义VRRP热备实例
  • state MASTER:热备状态,MASTER表示主服务器
  • interface ens33 :承载VIP地址的物理接口
  • virtual_router_id 1 :虚拟路由器的ID号每个热备组保持-致
  • priority 80:优先级,数值越大优先级越高
  • advert_int 1:通告间隔秒数(心跳频率)
  • auth_type PASS:认证类型
  • auth_pass 123456:密码字串
  • virtual_ipaddress {vip}:指定漂移地址(VIP),可以有 多个

Keepalived备份服务器的配置与master的配置有三个选项不同

  • router_id:设为自有名称
  • state:设为BACKUP
  • priority:值低于主服务器
  • 其他选项与master相同

负载均衡+高可用群集

  • Keepalived的设计目标是构建高可用的LVS负载均衡群集,可以调用ipvsadm工具来创建虚拟服务器、 管理服务器池,而不仅仅用作双机热备
  • 使用Keepalived构建LVS群集更加简便易用,主要优势体现在:
    • 对LVS负载调度器实现热备切换,提高可用性
    • 对服务器池中的节点进行健康检查,自动移除失效节点,恢复后再重新加入

LVS——DR模式+keepalived群集实践

实验环境

  • 虚拟ip地址:192.168.100.10
  • lvs1调度服务器IP地址:192.168.100.110
  • lvs2调度服务器IP地址:192.168.100.111
  • web1服务器IP地址:192.168.100.200
  • web2服务器IP地址:192.168.100.222
  • client测试机IP地址:192.168.100.20

在lvs1调度服务器上安装keepalived,ipvsadm服务

[email protected] ~]# yum install keepalived ipvsadm -y
[[email protected] ~]# vim /etc/sysctl.conf             //配置路由转发功能
net.ipv4.ip_forward=1                           //路由功能
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0      //proc响应关闭重定向功能
net.ipv4.conf.ens33.send_redirects = 0
[[email protected] ~]# sysctl -p                     //加载生效
[[email protected] ~]# cd /etc/sysconfig/network-scripts/
[[email protected] network-scripts]# cp -p ifcfg-ens33 ifcfg-ens33:0      //复制虚拟网卡的配置文件
[[email protected] network-scripts]# vim ifcfg-ens33:0
DEVICE=ens33:0                                    //添加配置文件信息,原有的信息删除
ONBOOT=yes
IPADDR=192.168.100.10
NETMASK=255.255.255.0
[[email protected] network-scripts]# cd /etc/init.d/            //创建脚本便于service使用
[[email protected] init.d]# vim dr.sh
#!/bin/bash
GW=192.168.100.1
VIP=192.168.100.10                              //虚拟ip
RIP1=192.168.100.200                           //真实web服务器ip
RIP2=192.168.100.222
case "$1" in
start)
                /sbin/ipvsadm --save > /etc/sysconfig/ipvsadm               //保存配置
                systemctl start ipvsadm                                       //启动服务
                /sbin/ifconfig ens33:0 $VIP broadcast $VIP netmask 255.255.255.255 broadcast $VIP up   //设置ens33:0地址,广播地址,子网掩码,并开启
                /sbin/route add -host $VIP dev ens33:0               //添加路由网段信息
                /sbin/ipvsadm -A -t $VIP:80 -s rr                    //指定虚拟服务访问入口,指定轮询算法
                /sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -g               //指定真实服务器,dr模式
                /sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -g
                echo "ipvsadm starting --------------------[ok]"
                ;;
stop)
                /sbin/ipvsadm -C                               //清空缓存
                systemctl stop ipvsadm                        //关闭服务
                ifconfig ens33:0 down                          //关闭接口
                route del $VIP                                   //删除路由信息
                echo "ipvsamd stoped----------------------[ok]"
                 ;;
status)
                if [ ! -e /var/lock/subsys/ipvsadm ];then                  //判断文件存在与否决定状态
                echo "ipvsadm stoped---------------"
                exit 1
                                else
                                echo "ipvsamd Runing ---------[ok]"
                fi
                ;;
*)
                echo "Usage: $0 {start|stop|status}"
                exit 1
esac
exit 0
[[email protected] init.d]# chmod +x dr.sh                                //给执行权限

修改lvs1服务器为仅主机模式,并修改网卡配置

[[email protected] init.d]# vim /etc/sysconfig/network-scripts/ifcfg-ens33       //修改网卡信息
BOOTPROTO=static
IPADDR=192.168.100.110
NETMASK=255.255.255.0
GATEWAY=192.168.100.1
[[email protected] init.d]# service network restart                //重启网络服务
[[email protected] init.d]# ifup ens33:0                          //开启虚拟网卡
[[email protected] init.d]# service dr.sh start                      //开启lvs服务
ipvsadm starting --------------------[ok]
[[email protected] init.d]# systemctl stop firewalld.service              //关闭防火墙
[[email protected] init.d]# setenforce 0

修改lvs2调度服务器配置

[[email protected] ~]# yum install keepalived ipvsadm -y
[[email protected] ~]# vim /etc/sysctl.conf                 //配置路由转发功能
net.ipv4.ip_forward=1                        //路由功能
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0     //proc响应关闭重定向功能
net.ipv4.conf.ens33.send_redirects = 0
[[email protected] ~]# sysctl -p                   //加载生效
[[email protected] ~]# cd /etc/sysconfig/network-scripts/
[[email protected] network-scripts]# cp -p ifcfg-ens33 ifcfg-ens33:0    //复制虚拟网卡的配置文件
[[email protected] network-scripts]# vim ifcfg-ens33:0
DEVICE=ens33:0                       //添加配置文件信息,原有的信息删除
ONBOOT=yes
IPADDR=192.168.100.10
NETMASK=255.255.255.0
[[email protected] network-scripts]# cd /etc/init.d/             //创建脚本便于service使用
[[email protected] init.d]# vim dr.sh
#!/bin/bash
GW=192.168.100.1
VIP=192.168.100.10      //虚拟ip
RIP1=192.168.100.200          //真实web服务器ip
RIP2=192.168.100.222
case "$1" in
start)
                /sbin/ipvsadm --save > /etc/sysconfig/ipvsadm     //保存配置
                systemctl start ipvsadm             //启动服务
                /sbin/ifconfig ens33:0 $VIP broadcast $VIP netmask 255.255.255.255 broadcast $VIP up   //设置ens33:0地址,广播地址,子网掩码,并开启
                /sbin/route add -host $VIP dev ens33:0            //添加路由网段信息
                /sbin/ipvsadm -A -t $VIP:80 -s rr               //指定虚拟服务访问入口,指定轮询算法
                /sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -g         //指定真实服务器,dr模式
                /sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -g
                echo "ipvsadm starting --------------------[ok]"
                ;;
stop)
                /sbin/ipvsadm -C           //清空缓存
                systemctl stop ipvsadm        //关闭服务
                ifconfig ens33:0 down          //关闭接口
                route del $VIP           //删除路由信息
                echo "ipvsamd stoped----------------------[ok]"
                 ;;
status)
                if [ ! -e /var/lock/subsys/ipvsadm ];then        //判断文件存在与否决定状态
                echo "ipvsadm stoped---------------"
                exit 1
                                else
                                echo "ipvsamd Runing ---------[ok]"
                fi
                ;;
*)
                echo "Usage: $0 {start|stop|status}"
                exit 1
esac
exit 0
[[email protected] init.d]# chmod +x dr.sh             //给执行权限

[[email protected] init.d]# vim /etc/sysconfig/network-scripts/ifcfg-ens33         //修改网卡信息,切换为仅主机模式
BOOTPROTO=static
IPADDR=192.168.100.111
NETMASK=255.255.255.0
GATEWAY=192.168.100.1
[[email protected] init.d]# service network restart           //重启网络服务
[[email protected] init.d]# ifup ens33:0                  //开启虚拟网卡
[[email protected] init.d]# service dr.sh start              //开启lvs服务
ipvsadm starting --------------------[ok]
[[email protected] init.d]# systemctl stop firewalld.service   ##关闭防火墙
[[email protected] init.d]# setenforce 0

配置web1节点服务器

[[email protected] ~]# yum install httpd -y         //安装web服务
[[email protected] ~]# systemctl stop firewalld.service          //关闭防火墙
[[email protected] ~]# setenforce 0
[roo[email protected] ~]# echo "this is kgc web" > /var/www/html/index.html        //创建网站页面
[[email protected] ~]# cd /etc/sysconfig/network-scripts/
[[email protected] network-scripts]# cp -p ifcfg-lo ifcfg-lo:0          //修改回环网卡的虚拟网卡
[[email protected] network-scripts]# vim ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.100.10
NETMASK=255.255.255.0
ONBOOT=yes
[[email protected] network-scripts]# cd /etc/init.d/
[[email protected] init.d]# vim web.sh                 //编写arp脚本
#!/bin/bash
VIP=192.168.100.10
                case "$1" in
                start)
                                ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP
                                /sbin/route add -host $VIP dev lo:0
                                echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore       //arp忽略
                                echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
                                echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
                                echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
                                sysctl -p >/dev/null 2>&1
                                echo "RealServer Start OK "
                                ;;
                stop)
                                ifconfig lo:0 down
                                route del $VIP /dev/null 2>&1
                                echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore       //arp开启
                                echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
                                echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
                                echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
                                echo "RealServer Stopd"
                                ;;
                *)
                                echo "Usage: $0 {start|stop}"
                                exit 1
                esac
                exit 0
[[email protected] init.d]# chmod +x web.sh          //给权限

配置web1网卡

[[email protected] init.d]# vim /etc/sysconfig/network-scripts/ifcfg-ens33        //修改网卡,仅主机模式
BOOTPROTO=static
IPADDR=192.168.100.200
NETMASK=255.255.255.0
GATEWAY=192.168.100.1
[[email protected] init.d]# service network restart         //重启网络服务
[[email protected] init.d]# service web.sh start         //启动脚本
RealServer Start OK
[[email protected] init.d]# systemctl start httpd.service       //开启web服务
[[email protected] init.d]# ifup lo:0                 //开启回环虚拟网卡

配置web2节点服务器和web1相同的配置

[[email protected] ~]# yum install httpd -y               //安装web服务
[[email protected] ~]# systemctl stop firewalld.service      //关闭防火墙
[[email protected] ~]# setenforce 0
[[email protected] ~]# echo "this is accp web" > /var/www/html/index.html     //创建网站页面
[[email protected] ~]# cd /etc/sysconfig/network-scripts/
[[email protected] network-scripts]# cp -p ifcfg-lo ifcfg-lo:0        //修改回环网卡的虚拟网卡
[[email protected] network-scripts]# vim ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.100.10
NETMASK=255.255.255.0
ONBOOT=yes
[[email protected] network-scripts]# cd /etc/init.d/
[[email protected] init.d]# vim web.sh                //编写arp脚本
#!/bin/bash
VIP=192.168.100.10
                case "$1" in
                start)
                                ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP
                                /sbin/route add -host $VIP dev lo:0
                                echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore      //arp忽略
                                echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
                                echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
                                echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
                                sysctl -p >/dev/null 2>&1
                                echo "RealServer Start OK "
                                ;;
                stop)
                                ifconfig lo:0 down
                                route del $VIP /dev/null 2>&1
                                echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore       //arp开启
                                echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
                                echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
                                echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
                                echo "RealServer Stopd"
                                ;;
                *)
                                echo "Usage: $0 {start|stop}"
                                exit 1
                esac
                exit 0
[[email protected] init.d]# chmod +x web.sh             //给权限

配置web2网卡

[[email protected] init.d]# vim /etc/sysconfig/network-scripts/ifcfg-ens33      //修改网卡,仅主机模式
BOOTPROTO=static
IPADDR=192.168.80.222
NETMASK=255.255.255.0
GATEWAY=192.168.80.1
[[email protected]]# service network restart           //重启网络服务
[[email protected]]# service web.sh start            //启动脚本
RealServer Start OK
[[email protected] init.d]# systemctl start httpd.service       //开启web服务
[[email protected] init.d]# ifup lo:0            //开启回环虚拟网卡

配置lvs1上keepalived部署

[[email protected] init.d]# vim /etc/keepalived/keepalived.conf
global_defs {
    ...
    smtp_server 127.0.0.1              //指向本地
    router_id LVS_01        //指定名称,备份服务器不同名称
    ...
}

vrrp_instance VI_1 {
    state MASTER                 //备份服务器是BACKUP
    virtual_router_id 10        //组号相同
    ...
    auth_pass abc123             //验证密码
    priority 100                //优先级备份小于主服务器
    ...
    virtual_ipaddress {
                192.168.100.10
        }
    ...
virtual_server 192.168.100.10 80 {
...
    real_server 192.168.100.200 80 {
                weight 1
                TCP_CHECK {
                        connect_port 80
                        connect_timeout 3
                        nb_get_retry 3
                        delay_before_retry 3
                }
        }
        real_server 192.168.100.222 80 {
                weight 1
                TCP_CHECK {                       //tcp
                        connect_port 80                  //添加端口
                        connect_timeout 3
                        nb_get_retry 3
                        delay_before_retry 3
                }
        }
}
[[email protected] init.d]# systemctl start keepalived.service
[[email protected] init.d]# scp /etc/keepalived/keepalived.conf [email protected]:/etc/keepalived/    //复制到lvs2服务器上

在lvs2服务器上修改keepalived配置文件

[[email protected] init.d]# vim /etc/keepalived/keepalived.conf   ##修改keepalive配置文件
router_id LVS_02   ##router_id不能相同
...
state BACKUP     ##备服务器
...
priority 90    ##优先级低于主服务器
[[email protected] init.d]# systemctl start keepalived.service    ##启动keepalive服务

使用client测试机测试(访问不到重启全部服务即可)

原文地址:https://blog.51cto.com/14473285/2460198

时间: 2024-10-17 00:49:37

LVS负载均衡群集之DR模式+keepalived群集机构(理论+实践篇)的相关文章

LVS负载均衡架设,DR模式

lvs-dr模型 : 直接路由 Director在实现转发时不修改请求报文的IP首部,而是通过直接封装MAC首部来完成转发,目标MAC是Director根据调度方法挑选出的某RS的MAC地址 拓扑结构有别于NAT类型 架构特性: (1) 保证前端路由器将目标地址为VIP的请求报文通过ARP地址解析后送往Director 解决方案: 1.静态绑定:在前端路由直接将VIP对应的目标MAC静态配置为Director的MAC地址,不靠谱也不常用 2.arptables:在各RS上,通过arptables

LVS负载均衡的三种模式和八种算法总结

三种LVS负载均衡模式 调度器的实现技术中,IP负载均衡技术是效率最高的,IP虚拟服务器软件(IPVS)是在linux内核中实现的? LVS负载均衡模式---1.NAT模式 NAT用法本来是因为网络IP地址不足而把内部保留IP地址通过映射转换成公网地址的一种上网方式(原地址NAT)?如果把NAT的过程稍微变化,就可以成为负载均衡的一种方式?原理其实就是把从客户端发来的IP包的IP头目的地址在DR上换成其中一台REALSERVER的IP地址并发至此REALSERVER,而REALSERVER则在处

LVS负载均衡架设,NAT模式

lvs-nat模型:类似于DNAT,但支持多目标转发, 就是多目标的DNAT 它通过修改请求报文的目标地址为根据调度算法所挑选出的某RS的RIP来进行转发 架构特性: (1) RS应该使用私有地址,即RIP应该为私有地址,各RS的网关必须指向DIP (2) 请求报文和响应报文都经由Director转发:高负载场景中,Director易于成为系统瓶颈 (3) 支持端口映射 (4) RS可以使用任意类型的OS (5) RS的RIP必须与Director的DIP在同一网络 架设NAT模式的LVS负载均

Web负载均衡(ipvsadm,DR模式)

Ubuntu 上ipvsadm负载均衡(DR模式,以80端口为例) 说明:3台服务器,ip分别为:10.0.1.2  10.0.1.3  10.0.1.4  虚拟ip:10.0.1.10 ipvsadm服务器(10.0.1.2) $ sudo apt-get install ipvsadm $ sudo ifconfig eth0:0 10.0.1.10 netmask 255.255.255.255 broadcast 10.0.1.10 $ sudo ip a (查看设置是否生效) $ su

构建LVS负载均衡集群--NET模式

1.准备四台虚拟机(一台Linux配置LVM,两台Web,一台windows机测试) 2.关闭Linux虚拟机的防火墙和安全机制 systemctl stop firewalld iptables -F setenforce 0 一.配置LVM主机(给主机添加两个网卡,两个网卡不在一个模式下,分别配置IP地址) 网卡一:NET模式网卡二:VMnet2模式[[email protected] ~]# ip a | grep eno 2: eno16777728: <BROADCAST,MULTIC

LVS负载均衡之二:LVS-NAT搭建web群集

实现LVS的NAT模式 其原理及特点详细介绍请看LVS负载均衡之一:LVS-NAT.LVS-DR模式的原理详细介绍 1.实验环境 IP地址规划 客户端访问服务的请求IP地址:VIP 12.0.0.1 Server IP 系统 Director Server DIP 192.168.10.1 CentOS7 NFS Server 192.168.10.50 RedHat6 Real Server1 RIP 192.168.10.51 CentOS7 Real Server2 RIP 192.168

通过keepalived搭建高可用的LVS负载均衡集群

一.keepalived软件简介 keepalived是基于vrrp协议实现高可用功能的一种软件,它可以解决单点故障的问题,通过keepalived搭建一个高可用的LVS负载均衡集群时,keepalived还能检测后台服务器的运行状态. 二.vrrp协议原理简介 vrrp(虚拟路由器冗余协议),是为了解决网络上静态路由出现的单点故障的问题,举个例子,如下图 主机A和B均在同一个局域网内,C和D均是该局域网的网关,即A和B想与外网通信,需指网关到C或D,那究竟指向C好还是指向D好呢?都不好!当指向

LVS负载均衡三种模式的实现

何为lvs负载均衡? lvs负载均衡(linux virtual server)又名linux虚拟服务器.由章文嵩博士主导的负载均衡项目,目前LVS已经被集成到Linux内核模块中.该项目在Linux内核中实现了基于IP的数据请求负载均衡调度方案.如下图所示,互联网用户通过web请求访问到lvs调度器,然后调度器再根据算法把请求送给后端的linux web服务器上.比如这里拿负载均衡模式来说,由于web服务器都是连接的相同的存储,又都是跑的相同的服务,所以不论哪个服务器回应客户端,内容则都是一致

CentOS7Linux中服务器LVS负载均衡、高可用集群搭建(NAT、DR)

目录 集群 声明 集群概念 集群特性 Web服务器并发相应瓶颈 集群的分类 LB实现方法: LVS集群 负载调度器 服务器池 共享存储 LVS负载均衡的三种模式 负载均衡 集群 声明 文档不断更新中... 集群概念 一组相互独立又相互依赖的,通过网络连接的由计算机组,以单一的模式进行管理,为对方提供服务,对于用户来说,用户会认为对方是一个服务. DIP:用来和后端服务器进行数据交互的IP CIP:客户端的IP VIP:是域名解析的IP,是集群对外的公网IP RIP:真实服务器的IP 节点:一组计