基于LVS的负载均衡

负载均衡集群简介

主流开源软件LVS、Keepalived、haproxy、Nginx等
LVS属于4层负载均衡,Nginx属于7层负载均衡,Haproxy可以认为是4层,也可以做7层使用。
LVS这种4层的负载均衡是可以分发除80以外的其他端口通信的,比如MySQL的,而Nginx仅仅支持HTTP、HTTPS、MAIL;Haproxy也支持MySQL这种。
相比较来说,LVS这种4层的更稳定,能承受更多的请求,而Nginx这种7层的更加灵活,能实现更多个性化需求。

LVS简介

1.LVS是由国人章文嵩开发。
2.LVS是基于TCP/IP做的路由和转发,稳定性和效率很高。
3.LVS是工作于Linux内核中的
4.LVS有三种常见的模式NAT、DR、IP Tunnel
5.LVS架构中有一个核心角色叫做分发器(Load Balancer),它用来分发用户的请求。

一个LVS集群往往包含以下角色:

1、DS:Director Server,指的是前端负载均衡器节点
2、RS:Real Server,后端真实的工作服务器
3、VIP:向外部直接面向用户请求,作为用户请求的目标的IP地址。
4、DIP:Director Server IP,主要用于和内部主机通讯的IP地址
5、RIP:Real Server IP,后端服务器的IP地址。
6、CIP:Client IP,访问客户端的IP地址。

LVS NAT模式

这种模式借助iptables的nat表来实现
用户的请求到分发器后,通过预设的iptables规则,把请求的数据报转发到后端的RS上去。
RS需要设定网关为分发器的内网IP
用户请求的数据包和返回给用户的数据包全部经过分发器,所以分发器成为瓶颈
在NAT模式中,只需要分发器有公网IP即可,所以比较节省公网IP资源

LVS IP Tunnel模式

这种模式需要有一个公共的IP配置在分发器和所有的RS上,我们把它叫做VIP
客户端请求的目标IP为VIP,分发器接收到请求数据包后,会对数据包做一个加工,会把目标IP改为RS的IP,这样数据包就到了RS上。
RS接受数据包后,会还原原始数据包,这样目标IP为VIP,因为所有RS上配置了这个VIP,所以他会认为是他自己

LVS DR模式

这种模式,也需要有一个公共的IP配置在分发器和所有RS上,也就是VIP
和IP Tunnel不同的是,他会把数据包的MAC地址修改为RS的MAC地址。
RS接收数据包后,会还原原始数据包,这样目标IP为VIP,因为所有RS上配置了这个VIP,所以他会认为是他自己

LVS调度算法

针对不同的网络服务需求和服务器配置,IPVS调度器实现了如下八种负载调度算法
轮询(Round Robin)
加权轮询(Weighted Round Robin)
最少连接(Least Connections)
加权最少连接(Weighted Least Connections)
基于局部性的最少连接(Locality-Based Least Connections)
带复制的基于局部性最少连接(Locality-Based Least Connections with Replication)
目标地址散列(Destination Hashing)
源地址散列(Source Hashing)

LVS集群搭建

环境准备

虚拟机 VMware15.01
虚拟主机
centos7.6.1810 192.168.1.221
centos7.6.1810 192.168.1.222
centos7.6.1810 192.168.1.223
centos7.6.1810 192.168.1.224
系统服务LVS,Keeplived
Web服务Nginx
集群搭建LVS DR模式

host1 192.168.1.221 VIP 192.168.1.220 director1 ipvs/keepalived
host2 192.168.1.222 VIP 192.168.1.220 director1 ipvs/keepalived
host3 192.168.1.223 realserver nginx/lvsrs
host4 192.168.1.224 realserver nginx/lvsrs

安装软件

host1、host2 sudo yum install ipvsadm安装ipvs
host1、host2 sudo yum install keepalived安装Keepalived
host3、host4 sudo yum install nginx安装Nginx

ipvsadm开启ipvs
sudo lsmod | grep ip_vs查询是否开启了ipvs
/etc/keepalived目录下有一个默认的keepalived.conf配置文件

Keepalived的配置

# Global Configuration
global_defs {
   lvs_id director1
}

# VRRP Configuration
vrrp_instance LVS {
    state MASTER
    interface ens33
    virtual_router_id 51
    priority 151
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
}

virtual_ipaddress {
   192.168.200.220
 }

# Virtual Server Configuration - for www server
virtual_server 192.168.1.220 80 {
    delay_loop 1
    lb_algo rr
    lb_kind DR
    persistenct_time 0
    protocol TCP

    # Real Server 1 configuration
    real_server 192.168.1.223 80 {
    	weight 1
    	TCP_CHECK {
       	    connection_timeout 10
       	    nb_get_retry 3
            delay_before_retry 3
   	 }
    }
    
    # Real Server 2 configuration
    real_server 192.168.1.224 80 {
    	weight 1
    	TCP_CHECK {
       	    connection_timeout 10
       	    nb_get_retry 3
            delay_before_retry 3
   	 }
    }
}

host3的Nginx配置为监听80端口,返回200 Hello, Nginx! Server Host3@192.168.1.223
host4的Nginx配置为监听80端口,返回200 Hello, Nginx! Server Host3@192.168.1.224

ps -ef | grep nginx检查Nginx是否正在运行
启动Nginx,并且两台Nginx必须可以交叉访问

编写lvsrs脚本

#!/bin/bash

ifconfig lo:0 192.168.1.220 netmask 255.255.255.255 broadcast 192.168.1.220 up
route add -host 192.168.1.220 lo:0

echo "0" > /proc/sys/net/ipv4/ip_forward
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

exit 0

sudo chmod +x /etc/init.d/lvsrs使文件可执行
执行lvsrs脚本

在host1、host2执行systemctl start keepalived启动Keepalived服务
执行ipvsadm -ln

在host1执行curl -i 192.168.1.220访问虚拟ip

在host1上停止keepalived服务,没有负载均衡信息,重启可以继续访问
至此实现基于VIP的负载均衡和基于keepalived的高可用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值