Centos7 LVS负载均衡DR模型单机以及高可用实践

1、负载均衡集群类型

负载均衡技术类型:基于 4 层负载均衡技术、基于 7 层负载均衡技术

负载均衡实现方式:硬件负载均衡设备、软件负载均衡

硬件负载均衡产品:F5 、深信服 、Radware

软件负载均衡产品: LVS(Linux Virtual Server)、 Haproxy、Nginx、Ats(apache traffic server)

2、LVS 就是一个四层(传输层)负载均衡器,支持 TCP/UDP 的负载均衡

三层结构:负载调度器、服务器池、共享存储。

架构对象

  • VS:Virtual Server,也称为 Director,负载均衡服务器
  • RS:Real Server,真正的服务器,集群中各节点
  • VIP:Director 向外部提供服务的 IP
  • DIP:Director 向内部与 RS 通信的 IP
  • RIP:真实服务器的 IP
  • CIP:客户端的 IP

3、LVS四种工作模式

LVS-NAT(NAT模式)

原理:客户端发送请求数据包到负载均衡器(CIP->VIP),负载均衡器改装数据包发送到服务器(CIP->RIP),服务端处理后返回数据包给负载均衡器(RIP->CIP),负载均器再进行数据包改装后返回给客户端(VIP->CIP),完成负载,该种模式无论流量进来还是出去都要经过负载均衡器。

LVS-DR(直接路由模式)

原理:DR模式的实现需要RS绑定LVS的vip,且保证该vip只是单个RS内部可见,对外不可见。一个请求打到负载均衡器(CIP->VIP),LVS 只需要将网络帧的 MAC 地址修改为某一台 RS 的 MAC,然后把该包转发到相应的RS处理,RS收到LVS转发过来的包,链路层发现MAC是自己的,到网络层,发现IP也是自己的(事先关联的LVS的ip),于是包被合法接收,响应时RS则直接向客户端返回,不再经过LVS。
DR模式流量不再经过lvs,且返回可以直接返回给客户端,只需要经过lvs一次,因此DR模式是性能最好的一种模式。

LVS-TUN(IP隧道(Tunnel)模式,不常用)

原理:负载均衡器把客户端发来的数据包(CIP->VIP),封装一个新的IP头标记(DIP-(CIP-VIP)-RIP)发给RS,RS收到后,先把数据包的头解开,还原数据包,处理后,直接返回给客户端,不需要再经过负载均衡器。注意,由于RS需要对负载均衡器发过来的数据包进行还原,所以说必须支持IPTUNNEL协议。所以,在RS的内核中,必须编译支持IPTUNNEL这个选项。
​ 

FULL-NAT模式(双向转换模式,不常用)

原理:客户端对负载均衡器VIP发起请求(CIP->VIP),负载均衡器接过请求发现是请求后端服务,对请求报文做full-nat,把源ip改为DIP{,把目标ip转换为任意后端RS的RIP,然后发往后端,RS接到请求后进行响应,响应源ip为RIP目标ip还是DIP,又内部路由路由到负载均衡器,负载均衡器接到响应报文,进行full-nat。将源地址为VIP,目标地址改为CIP,返回给客户端。

4、LVS 负载均衡算法

静态负载均衡

  • rr(round robin,轮询 )

  • wrr(weight round robin,加权轮询)

  • sh(source hashing,源地址 HASH)

  • dh(destination hashing,目标地址 HASH)


动态负载均衡

  • lc(leash-connection,最少连接 )

    • 简单算法:active * 256 + inactive (谁的小选谁)
  • wlc(加权最少连接)

    • 简单算法:(active * 256 + inactive) / weight(谁的小选谁)
  • sed(最少期望延迟)

    • 简单算法:(active + 1) * 256 / weight (谁的小选谁)
  • nq(never queue,永不排队)

  • LBLC(基于局部性的最少连接 )

  • LBLCR(基于局部性的带复制功能的最少连接)

5、实现DR模型搭建

(1)、节点准备
        node1:192.168.2.168 ----作为负载均衡器

        node2:192.169.2.136

        node3:192.168.2.134

(2)、开始搭建

 配置lvs负载均衡器vip网络子接口(node1)

ifconfig enp0s3:2 192.168.2.100/24
# 撤掉命令
ifconfig enp0s3:2 down

配置RS服务器(node02、node03)

修改arp协议(arp_ignore、arp_announce)

cd /proc/sys/net/ipv4/conf/enp0s3
# 修改协议(注意不可使用vi进行修改)
echo 1 > arp_ignore
echo 2 > arp_announce
# 查看是否修改成功
cat arp_ignore
cat arp_announce
# 退回到all目录进行全局修改
cd ../all
echo 1 > arp_ignore
echo 2 > arp_announce

设置隐藏vip(node2\node3)

ifconfig lo:2 192.168.2.100 netmask 255.255.255.255

 搭建http服务(node2\node3)

# 安装httpd服务
yum install httpd -y
# 启动服务
service httpd start
# 创建主页(用于测试服务)
vi /var/www/html/index.html
# index填充内容node2
node2:form 192.168.2.136
# index填充内容node3
node3:form 192.168.2.134

 打开浏览器测试httpd服务是否成功

 LVS服务配置(node01)

# 安装ipvsadm
yum install ipvsadm
# 配置LVS入口规则(采用轮询机制),IP为新创建的enp0s3:2对应ip
ipvsadm -A -t 192.168.2.100:80 -s rr
#配置出口规则(192.168.2.136\192.168.2.134 分别是node2、3的ip,分配权重为1)
ipvsadm -a  -t 192.168.2.100:80  -r  192.168.2.136 -g -w 1
ipvsadm -a  -t 192.168.2.100:80  -r  192.168.2.134 -g -w 1

查看配置是否成功

ipvsadm -ln

验证

浏览器访问192.168.2.100,疯狂F5,查看浏览器是否在node2、node3之间切换,在node1~3上分别使用命令 netstat -natp查看socket连接,会发现node1上没有socket记录,node2、node3上存在socket记录,进一步说明负载均衡器,不会和客服端建立连接。
6、DR+keepalived高可用搭建

(1)、准备节点

        node1:192.168.2.168 --lvs主机

        node2:192.169.2.136

        node3:192.168.2.134

        node4:192.168.2.181 --lvs备机

注意:如果手动搭建过,lvs单机版本(node1)可先把安装的IP删掉

# 卸载ipvsadm
ipvsadm -C
# 这里安装过enp0s3:2
ifconfig enp0s3:2 down

node2和node3保持单机版导通的配置

安装keeplived(node1\node4)

# 安装keeplived服务
yum install keepalived ipvsadm -y
# 修改配置
cd /etc/keepalived/
# 备份配置文件
cp keepalived.conf keepalived.conf.bak
# 打开并修改配置文件
vi keepalived.conf
# 修改配置(node1为master配置,node4配置区别地方有特殊说明,其余地方和node相同)
# vrrp_strict # 注意一定要注解掉,否则配置的vip接口ping不通
vrrp_instance VI_1 {
    state MASTER   # node4 BACKUP
    interface enp0s3 # 设置自己虚拟机使用的虚拟网络
    virtual_router_id 51
    priority 100    # node4 50
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass root # 主备机服务器密码要设置一致
    }
    virtual_ipaddress {
        192.168.2.100/24 dev enp0s3label  enp0s3:2
    }
}

# 注意virtual_server 只保留一个
virtual_server 192.168.2.100 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR   # 负载模式设置成DR
    nat_mask 255.255.255.0 #设置子网掩码
    persistence_timeout 0 # 多少秒内访问同一个服务器
    protocol TCP

    real_server 192.168.2.136 80 {
        weight 1
        HTTP_GET {
            url {
              path /
              status_code 200
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
    real_server 192.168.2.134 80 {
        weight 1
        HTTP_GET {
            url {
              path /
              status_code 200
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

复制keepalived.conf到node4,并修改相应配置,参考上步骤(仅仅修改区分地方即可)

scp  ./keepalived.conf  root@node04:`pwd`

启动keepalived服务(node1\node4)

# 启动服务
systemctl start keepalived
# 停止服务
systemctl stop keepalived

验证:浏览器访问返回node2或者node3主页结果表示成功

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值