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

简介:

一、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,如需转载请自行联系原作者
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
目录
相关文章
|
网络协议 调度
|
负载均衡 算法 Linux
LVS+Keepalived:实现高效软负载均衡的利器
本文介绍了如何使用LVS(Linux Virtual Server)和Keepalived搭建高可用负载均衡集群。LVS通过不同调度算法将请求转发给后端服务器,而Keepalived基于VRRP协议实现服务高可用,避免IP单点故障。具体步骤包括环境准备、安装配置ipvsadm和Keepalived、启动服务及测试。文中还详细解释了配置文件中的关键参数,并提供了故障转移测试方法。最后,文章简要对比了软件、硬件和云负载均衡方案的特点,帮助读者选择合适的负载均衡策略。
1989 4
|
负载均衡 算法 Ubuntu
ipvsadm命令详解
ipvsadm命令详解
1603 4
|
负载均衡 算法 网络协议
LVS 负载均衡服务器搭建(详细)
转载:http://blog.51cto.com/xuding/1740228 一、LVS概述  1.LVS:Linux Virtual Server  四层交换(路由):根据请求报文的目标IP和目标PORT将其转发至后端主机集群中的某台服务器(根据调...
3563 0
|
存储 负载均衡 应用服务中间件
LVS负载均衡群集——NAT模式实操
LVS负载均衡群集——NAT模式实操
1729 0
就是要你懂负载均衡--lvs和转发模式
> 本文希望阐述清楚LVS的各种转发模式,以及他们的工作流程和优缺点,同时从网络包的流转原理上解释清楚优缺点的来由,并结合阿里云的slb来说明优缺点。 如果对网络包是怎么流转的不太清楚,推荐先看这篇基础:[程序员的网络知识 -- 一个网络包的旅程](https://www.atatech.org/articles/80573) ,对后面理解LVS的各个转发模式非常有帮助。
14075 0
|
应用服务中间件 Linux nginx
详细解读docker国内镜像源docker镜像大全
详细解读docker国内镜像源docker镜像大全
4412 0
|
Kubernetes 应用服务中间件 nginx
二进制安装Kubernetes(k8s)v1.32.0
本指南提供了一个详细的步骤,用于在Linux系统上通过二进制文件安装Kubernetes(k8s)v1.32.0,支持IPv4+IPv6双栈。具体步骤包括环境准备、系统配置、组件安装和配置等。
4861 11
|
缓存 Linux 开发工具
CentOS 7- 配置阿里镜像源
阿里镜像官方地址http://mirrors.aliyun.com/ 1、点击官方提供的相应系统的帮助 :2、查看不同版本的系统操作: 下载源1、安装wget yum install -y wget2、下载CentOS 7的repo文件wget -O /etc/yum.
270519 0

热门文章

最新文章

下一篇
开通oss服务