负载均衡集群介绍,LVS介绍, LVS调度算法,LVS NAT模式搭建

负载均衡集群介绍:

负载均衡集群:简单地说就是让多台服务器均衡地去承载压力。

实现负载均衡的开源软件有:LVS,keepalived,haproxy,nginx等

其中相对于(网络OSI七层模型),LVS属于四层,Nginx属于七层,haproxy既可以认为四层,也可以认为是七层。

keepalived的负载均衡功能其实就是lvs

lvs这种4层的负载均衡是可以分发出80外的其他端口通信的,比如Mysql,而七层nginx仅仅支持http.https,mail,haproxy也支持mysql这种。

相比较来说,LVS这种4层的更稳定,能承受更多的情趣,而Nginx这种7层的更加灵活,能实现更多的个性化需求。

LVS介绍:

LVS由国人章文嵩开发,流行度不亚于httpd,基于TCP/IP做的路由和转发,稳定性和效率很高

LVS有三种常见的模式:NAT,DR,IP Tunnel

LVS架构中有一个核心角色叫做分发器(Load Balancer),它用来分发用户的请求,还有诸多处理用户请求的服务器(RealServer,简称rs)

LVS的NAT模式:

这种模式借助iptables的nat表来实现,用户的请求到分发器后,通过预设的iptables规则,把请求的数据包转发到后端的rs上去。

rs需要设定网关为分发器的内网ip,用户请求的数据包和返回的用户的数据包全部经过分发器,所以分发器成为瓶颈。

优点:在NAT模式中,只需要分发器有公网Ip,分发器和rs之间可以用内网通信,所以比较节省公网ip资源

缺点:分发器成为瓶颈,请求量不能太大。规模保持在10台左右。

LVS IP Tunnel模式:

我们可以想象分发器和每个rs之间建立了一个虚拟通道。这种模式,需要有一个公共的IP配置在分发器和所有rs上,我们把它叫做vip,

原理是客户端请求的目标IP为vip,分发器接收到请求数据包后,会对数据包做一个交工,会把目标IP由vip更改为rs的IP,这样数据包就到了rs上。

rs接受数据包后,会还原原始数据包,这样目标IP为vip,因为所有的rs上配置了这样一个vip,所以它会认为是它自己。

LVS DR模式:

这种模式也需要一个公共的ip配置在分发器和所有rs上,也就是vip,

和IP Tunnel不同的是,它会把所有的MAC地址修改为rs的MAC,

rs接收数据包后,会还原原始数据包,这样目标IP为vip,因为所有rs上配置了这个vip,所以它会认识是它自己。

LVS调度算法:

常用的4种

轮询:Round-Robin rr                        (任务均衡的分发到rs上)

加权轮询:Weight Round-Robin wrr                 (带权重的轮询,例如一个rs的配置好,你可以将它权重设置高一点)

最小连接:Least-Connection lc                     (把新的任务发送到请求数少的rs上)

加权最小连接:Weight Least-Connection wlc           (带权重的最小连接)

不常用的4种

基于局部性的最小连接:Locality-Based Least Connections lblc    

带复制的基于局部性最小链接:Locality-Based Least Connections with Replication lblcr

目标地址散列调度:Destination Hashing dh

源地址散列调度:Source Hashing sh

LVS NAT模式搭建:

准备3台机器

A机器为分发器,也叫调度器(简写为dir)

A机器 192.168.64.128         外网地址为192.168.64.128  (主机模式的网卡)

B机器  192.168.64.100

C机器  192.168.64.200

B机器和C机器的网关需要设置为192.168.209.132        (设置为和A机器的网卡IP一模一样)

A主机配置:

配置一下ens37主机模式的IP不需要设置网关

配置完成以后重启一下网卡

Windows上面可以成功ping通说明网络正常

然后接下来需要关闭三台机器的防火墙。(顺便都给三台机器装上 yum install -y iptables-services)

[root@aming-01 ~]# systemctl stop firewalld             #停止防火墙服务
[root@aming-01 ~]# systemctl disable firewalld         #彻底关闭防火墙
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@aming-01 ~]# iptables -nvL          # 查看防火墙规则,出现下面内容说明防火墙关闭
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

防火墙关闭完以后再关闭三台机器的selinux。

[root@aming-01 ~]# setenforce 0        #暂时关闭selinux
[root@aming-01 ~]# vi /etc/selinux/config              #保险起见修改配置文件永久关闭selinux

还需要把B和C机器的网关设置成A机器的IP

vi /etc/sysconfig/network-scripts/ifcfg-ens33      =配置IP

[root@aminglinux-03 ~]# route -n         #检测网关
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.209.132 0.0.0.0         UG    100    0        0 ens33
192.168.209.0   0.0.0.0         255.255.255.0   U     100    0        0 ens33

分发器上安装ipvsdam

[root@aming-01 sbin]# yum install -y ipvsadm              #在A(dir)机器只需要安装在A机器

然后在A机器上面编辑一个脚本

vim /usr/local/sbin/lvs_nat.sh

#脚本文件内容,注意区分自己的网卡名称
#! /bin/bash
# director 服务器上开启路由转发功下面一行就是
echo 1 > /proc/sys/net/ipv4/ip_forward
# 关闭icmp的重定向(伪装功能)
echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/default/send_redirects
# 注意区分网卡名字,阿铭的两个网卡分别为ens33和ens37
echo 0 > /proc/sys/net/ipv4/conf/ens33/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/ens37/send_redirects
# director 设置nat防火墙
iptables -t nat -F
iptables -t nat -X
iptables -t nat -A POSTROUTING -s 192.168.133.0/24  -j MASQUERADE
# director设置ipvsadm
IPVSADM='/usr/sbin/ipvsadm'
$IPVSADM -C
$IPVSADM -A -t 192.168.147.144:80 -s rr        #表示算法上面有具体讲解
$IPVSADM -a -t 192.168.147.144:80 -r 192.168.133.132:80 -m -w 1
$IPVSADM -a -t 192.168.147.144:80 -r 192.168.133.133:80 -m -w 1

然后运行一下脚本,没有输出一般说明没问题

[root@aming-01 ~]# sh /usr/local/sbin/lvs_nat.sh

B和C机器上面都需要安装nginx服务

netstat -lntp 查看80端口是否是nginx 如果不是那么启动nginx服务

/etc/init.d/nginx start     = 启动nginx服务

B机器

C机器

测试: 如下说明搭建Ok

[root@aming-01 ~]# curl 192.168.64.128
aminglinx03
[root@aming-01 ~]# curl 192.168.64.128
aminglinux02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏吴裕超

要不要用gzip优化前端项目

这两天在做项目优化,注意到webpack有一个compression-webpack-plugin插件,可以打包成gzip格式部署到服务器,了解到了GZIP,其...

6978
来自专栏高性能服务器开发

C++日志系统如何设计

笔者在写作本章节的时候,并不敢把此章节的标题叫做《高性能日志系统的设计》,之所以不敢加上“高性能”三个字的原因是,第一,我的对于日志系统设计知识和经验都来自于学...

902
来自专栏iKcamp

iKcamp|基于Koa2搭建Node.js实战(含视频)☞ 解析JSON

视频地址:https://www.cctalk.com/v/15114923886141 JSON 数据 我颠倒了整个世界,只为摆正你的倒影。 前面的文章中,...

3839
来自专栏北京马哥教育

LVS原理知多少?

LVS简介   Internet的快速增长使多媒体网络服务器面对的访问数量快速增加,服务器需要具备提供大量并发访问服务的能力,因此对于大负载的服务器来讲, CP...

3746
来自专栏CSDN技术头条

五个解决方案让MongoDB拥有RDBMS的鲁棒性事务

【编者按】在分布式存储解决方案中谈事务一直是件很痛苦的事情,而事务也成了大部分NoSQL解决方案短板所在。近日,MongoDB公司的Antoine Girbal...

1875
来自专栏FreeBuf

Linux设备TCP连接曝高危漏洞:只要接入网络就可能被攻击

一般我们会认为,要确认互联网上的任意两台主机设备是否建立TCP连接通讯,其实并不容易——攻击者如果不在双方的通讯路径中,就更是如此了。另外如果攻击者并不在通讯路...

2268
来自专栏SDNLAB

容器 Flannel vxlan 基本原理和验证

作者简介:yangjunsss,曾就职于IBM、青云QingCloud,现就职于华为,研究方向:容器微服务、IaaS、P2P分布式。邮箱 cj.yangjun@...

1082
来自专栏Coding+

如何多端同步 Hexo 框架博客

这个必要性其实不用多说,用着用着你就自己能体会到,比如头天晚上在家里发布了一篇技术文章,第二天在公司 Coding 的过程中突然想到之前发的文某个地方有 Bug...

471
来自专栏软件

测试人员的“偷懒大法”

(文 松心耐雪作品) 偷懒大法 测试一项重复而又累的工作,我想作为一个测试人员应该都是深有体会的,那么如何给自己减负呢?那就要学会“偷懒”。对测试来说繁杂的事情...

1795
来自专栏腾讯架构师的专栏

从 10 Gb 到 40 Gb,从百万级到千万级转发,打造高性能 TGW

TGW 是一套实现多网接入的负载均衡系统,为腾讯业务提供着外网接入服务。随着 TGW 影响力的提升,越来越多的业务接入 TGW,对于 TGW 的整体负载能力要求...

1.4K1

扫码关注云+社区