负载均衡(LVS DR模式搭建,DR只用一个公网ip,Keepalived+LVS DR)

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
EMR Serverless StarRocks,5000CU*H 48000GB*H
应用型负载均衡 ALB,每月750个小时 15LCU
简介:

一、LVS DR模式搭建

准备工作

三台机器:

分发器,dir:192.168.52.100

rs1:192.168.52.101  (网关改回来,之前nat模式改成100)

rs2: 192.168.52.102  (网关改回来,之前nat模式改成100)

vip:192.168.52.200   (这个虚拟ip需要绑定在每台机器上)


分发器dir上:

[root@congji ~]# iptables -F

[root@congji ~]# vim /usr/local/sbin/lvs.dr.sh 

#! /bin/bash

echo 1 > /proc/sys/net/ipv4/ip_forward

ipv=/usr/sbin/ipvsadm

vip=192.168.52.200

rs1=192.168.52.101

rs2=192.168.52.102

#注意这里的网卡名字

ifdown ens33

ifup ens33

ifconfig ens33:2 $vip broadcast $vip netmask 255.255.255.255 up

route add -host $vip dev ens33:2

$ipv -C

$ipv -A -t $vip:80 -s wrr

$ipv -a -t $vip:80 -r $rs1:80 -g -w 1

$ipv -a -t $vip:80 -r $rs2:80 -g -w 1

[root@congji ~]# sh /usr/local/sbin/lvs.dr.sh 

成功断开设备 'ens33'。

成功激活的连接(D-Bus 激活路径:/org/freedesktop/NetworkManager/ActiveConnection/1)


rs1:192.168.52.101和rs2:192.168.52.102都执行以下脚本

[root@zhuji ~]# vim /usr/local/sbin/lvs_rs.sh

#/bin/bash

vip=192.168.52.200

#把vip绑定在lo上,是为了实现rs直接把结果返回给客户端

ifdown lo

ifup lo

ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up

route add -host $vip lo:0

#以下操作为更改arp内核参数,目的是为了让rs顺利发送mac地址给客户端

#参考文档www.cnblogs.com/lgfeng/archive/2012/10/16/2726308.html

echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore

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

[root@zhuji ~]# sh /usr/local/sbin/lvs_rs.sh 


测试:DR模式是没有办法用浏览器显著的看出结果,也不能用rs1,rs2访问,因为vip绑定在lo上,他们会默认访问自己,最好的办法就是从新开启一个虚拟机,ip设置在同一网段,用curl查看。


二、DR模式只用一个IP实现

201006241277382974737.jpg

在前面加一个路由器,原理就是让 路由器把所有的80端口请求都分给VIP,分发器再分给每个web服务器,而web服务器处理完请求后跟客户连接就不走分发器了,直接通过路由器去外网了,这样就实现了只用一个公网IP也能用DR模式

先从内网找了三台服务器分别是:

192.168.1.166 web1

192.168.1.167 web2

192.168.1.160 分发器

192.168.1.169 VIP

192.168.1.1   路由器内网ip(网关) 路由器是随便找的一台tplink adal路由器,凑合着测试用的

211.83.113.119 路由器的WAN口IP (随便蒙的,重复莫怪)


先安装ipvsadm 直接yum install ipvsadm就行了,不多说

分发器上的设置

global_defs {

   notification_email {

        ufo@xman.com

   }


notification_email_from Alexandre.Cassen@firewall.loc

   smtp_server smtp.qq.com

   smtp_connect_timeout 30

   router_id LVS_DEVEL

}


vrrp_sync_group VG1 {

        group{

        VI_1

                }

                    }

vrrp_instance VI_1 {

        state MASTER

        interface eth0

        virtual_router_id 51

        priority 100

        advert_int 1


        authentication {

        auth_type PASS

        auth_pass 33210

                        }


        virtual_ipaddress {

        192.168.1.169

                          }


        virtual_server 192.168.1.169 80 {

        delay_loop 6

        lb_algo rr

        lb_kind DR

        protocol TCP


                real_server 192.168.1.166 80 {

                weight 1

                inhibit_on_failure

                TCP_CHECK {

                connect_timeout 5

                nb_get_retry 3

                delay_before_retry 3

                connect_port 80

                          }

                                              }

                real_server 192.168.1.167 80 {

                weight 1

                inhibit_on_failure

                TCP_CHECK {

                connect_timeout 5

                nb_get_retry 3

                delay_before_retry 3

                connect_port 80

                          }

                                              }

配置文件写完了,然后就是

mkdir /etc/keepalived  #系统默认会到这里去找配置文件

cp /usr/local/keepalive/etc/keepalived/keepalived.conf /etc/keepalived/

cp /usr/local/keepalive/etc/rc.d/init.d/keepalived /etc/init.d/

cp /usr/local/keepalive/etc/sysconfig/keepalived /etc/sysconfig/

cp /usr/local/keepalive/sbin/keepalived /bin/ #将可执行程序放入sbin 或者 bin目录里


vim /etc/sysctl.conf

net.ipv4.ip_forward = 1

保存退出 后执行sysctl -p

route add defaule gw 192.168.1.1 把路由内网地址添加为默认网关

web服务器设置

两台web服务器也要修改 /etc/sysctl.conf 修改内容如下

vim /etc/sysctl.conf

# LVS

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

sysctl -p

之后还要增加vip

ifconfig lo:1 192.168.1.169 netmask 255.255.255.255 别忘了加到rc.local里面

route add defaule gw 192.168.1.1 把路由内网地址添加为默认网关


路由器设置

路由器的设置没什么好说的,除了上网设置以外还要做一个端口映射,就是把80端口映射到 vip上也就是192.168.1.169


现在启动keepalived吧

/etc/init.d/keepalived start

开始的时候比较慢,大概1分钟后系统日志里面出现下面这条记录就OK了

avahi-daemon[3012]: Registering new address record for 192.168.1.169 on eth0


我们访问一下 http://211.83.113.119

我把我们的应用程序放到了上面跑了一下,呵呵测试成功

ipvsadm -L -n

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

TCP  192.168.1.169:80 rr

  -> 192.168.1.166:80             Route   1      5          6         

  -> 192.168.1.167:80             Route   1      3          9


   后来遇到了一个问题,由于这套应用处在一个大网站的后台,所以大部分的请求都来自同一个IP地址,而有一部分程序需要给每个连接做session粘滞,

这样我就不能用lvs 的-p参数来设置ip粘滞时间,如果用lvs的粘滞时间的话大部分的请求都将分给同一台web服务器(注意:这里是session粘滞而不是IP粘滞),

lvs可做不到这点,怎么办呢?

在cu论坛上询问后得知有很多朋友做过类似的项目,他们的解决办法是 将session共享,共享到什么地方就有很多选择了

我们是把所有web服务器的php session都给memcached ,这样你不管分发器把 ip连接分给哪个web服务器都不会有问题了,配置方法很简单,就在php的配置文件内

增加一条语句就可以了,不过前提你需要装好memcache模块

[Session]

; Handler used to store/retrieve data.

session.save_handler = memcache

session.save_path = "tcp://192.168.1.161:11213"




三、keepalived + LVS DR

1.完整架构需要两台分发器(角色为dir),两台dir上要安装keepalived软件,目的是实现高可用,但keepalived本身也有负载均衡的功能,所以当一台分发器宕机后,不会影响工作,本次实验装一台Keeplived

2.keepalived内置了ipvsadm的功能,所以不需要暗转ipvsadm包,也不用编写和执行dir上的脚本,但是两台rs上的脚本还是要编写和执行的。

3.keepalived有一个较好的功能,如果后台一台rs宕机,便不会再把请求发送过去。

4.在进行实验之前,需要执行2条命令,把之前ipvsadm规则清空掉,重新加载网卡,把之前设置的vip清空掉。

[root@congji ~]# ipvsadm -C

[root@congji ~]# ipvsadm -ln

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

[root@congji ~]# systemctl restart network


配置:

编写dir上keepalived的配置文件如下:

vrrp_instance VI_1 {

    #备用服务器上为 BACKUP

    state MASTER

    #绑定vip的网卡为ens33,你的网卡可能不一样

    interface ens33

    virtual_router_id 51

    #备用服务器上为90

    priority 100

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass aminglinux

    }

   #设置vip

    virtual_ipaddress {

        192.168.52.200

    }

}

virtual_server 192.168.52.200 80 {

    #(每隔10秒查询realserver状态)

    delay_loop 10

    #(lvs 算法)

    lb_algo rr

    #(DR模式)

    lb_kind DR

    #(同一IP的连接60秒内被分配到同一台realserver)

    persistence_timeout 60

    #(用TCP协议检查realserver状态)

 protocol TCP

    real_server 192.168.52.101 80 {

        #(权重)

        weight 100

        TCP_CHECK {

        #(10秒无响应超时)

        connect_timeout 10

        nb_get_retry 3

        delay_before_retry 3

        connect_port 80

        }

    }

    real_server 192.168.52.102 80 {

        weight 100

        TCP_CHECK {

        connect_timeout 10

        nb_get_retry 3

        delay_before_retry 3

        connect_port 80

        }

     }

}


配置两台rs的配置文件如下:

rs1:192.168.52.101和rs2:192.168.52.102都执行以下脚本

[root@zhuji ~]# vim /usr/local/sbin/lvs_rs.sh

#/bin/bash

vip=192.168.52.200

#把vip绑定在lo上,是为了实现rs直接把结果返回给客户端

ifdown lo

ifup lo

ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up

route add -host $vip lo:0

#以下操作为更改arp内核参数,目的是为了让rs顺利发送mac地址给客户端

#参考文档www.cnblogs.com/lgfeng/archive/2012/10/16/2726308.html

echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore

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

[root@zhuji ~]# sh /usr/local/sbin/lvs_rs.sh 


测试:在dir上启动keepalived,查看Ipvsadm的规则。和LVS DR模式一样,需要配置一台同网段的虚拟机测试,浏览器看不出结果。

[root@congji ~]# systemctl start keepalived

[root@congji ~]# ipvsadm -ln

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

TCP  192.168.52.200:80 rr persistent 60

  -> 192.168.52.101:80            Route   100    0          0         

  -> 192.168.52.102:80            Route   100    0          0   










本文转自 小新锐 51CTO博客,原文链接:http://blog.51cto.com/13407306/2067530,如需转载请自行联系原作者
相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
相关文章
|
2月前
|
运维 负载均衡 网络协议
LVS+Keepalived 负载均衡
LVS+Keepalived 负载均衡
72 8
LVS+Keepalived 负载均衡
|
2月前
|
域名解析 运维 负载均衡
LVS+Keepalived 负载均衡(二)28-1
【8月更文挑战第28天】LVS+Keepalived 负载均衡 配置 LVS VIP
63 5
|
6月前
|
负载均衡 网络协议 算法
LVS 负载均衡部署的三种模式 与搭建dr模式具体步骤
LVS 负载均衡部署的三种模式 与搭建dr模式具体步骤
|
3月前
|
负载均衡 网络协议
使用LVS搭建集群实现负载均衡(二)安装使用
【8月更文挑战第8天】使用LVS搭建集群实现负载均衡(二)安装使用
69 5
|
3月前
|
存储 负载均衡 算法
使用LVS搭建集群实现负载均衡(一)
【8月更文挑战第8天】使用LVS搭建集群实现负载均衡
149 5
|
3月前
|
缓存 负载均衡 算法
在Linux中, LVS负载均衡有哪些策略?
在Linux中, LVS负载均衡有哪些策略?
|
4月前
|
负载均衡 网络协议 算法
使用IPVSADM配置LVS负载均衡
使用IPVSADM配置LVS负载均衡
|
5月前
|
负载均衡 运维 监控
负载均衡与容错性:集群模式在分布式系统中的应用
本文由小米分享,解释了分布式系统中的集群模式。集群模式是通过组合多个服务器节点,共同提供服务,实现高可用性、负载均衡和扩展性。文章介绍了主控节点的角色及其高可用性策略,如主备模式和选举机制,并以Zookeeper为例详细阐述了其工作机制。集群模式的优势在于高可用性、负载均衡、扩展性和数据一致性,但也面临节点通信、数据一致性、故障检测和管理等挑战。最后,作者鼓励读者讨论和交流相关技术问题。
282 5
|
负载均衡 应用服务中间件 Linux
企业实战(13)LVS负载均衡NAT(网络地址转换)模式实战详解(一)
企业实战(13)LVS负载均衡NAT(网络地址转换)模式实战详解(一)
171 0
|
存储 负载均衡 网络协议
企业实战(13)LVS负载均衡DR(直接路由)模式实战详解(二)
企业实战(13)LVS负载均衡DR(直接路由)模式实战详解(二)
217 0