负载均衡集群介绍,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 条评论
登录 后参与评论

相关文章

来自专栏nnngu

01 整合IDEA+Maven+SSM框架的高并发的商品秒杀项目之业务分析与DAO层

项目源代码:https://github.com/nnngu/nguSeckill ---- 这是一个整合IDEA+Maven+SSM框架的高并发的商品秒杀项...

3608
来自专栏A周立SpringCloud

Spring Cloud各组件重试总结

最近挺多童鞋问我如何配置Spring Cloud xxx组件的重试。本篇进行一个总结。 Spring Cloud中的重试机制应该说是比较混乱的,不同的版本有一定...

3656
来自专栏用户画像

第一章

C)堆栈操作                             D)存储器按内部选择地址

462
来自专栏搜云库

ELK 集群 + X-Pack + Redis 集群 + Nginx ,实时日志(数据)搜集和分析的监控系统,简单上手使用

ELK 集群 + X-Pack + Redis 集群 + Nginx ,实时日志(数据)搜集和分析的监控系统,简单上手使用 简述 ELK实际上是三个工具的集合,...

4615
来自专栏Hadoop实操

如何使用CDSW在CDH集群通过sparklyr提交R的Spark作业

继上一章介绍如何使用R连接Hive与Impala后,Fayson接下来讲讲如何在CDH集群中提交R的Spark作业,Spark自带了R语言的支持,在此就不做介绍...

3516
来自专栏Hadoop实操

如何使用Sentry管理Hive外部表(补充)

/extwarehouse/student_hive数据目录不存,在创建外部表时自动生成,且数据目录属主为hive。

3604
来自专栏文渊之博

简述SQL2008部署多实例集群(学习)

数据库集群     集群的存在意义是为了保证高可用、数据安全、扩展性以及负载均衡。 什么是集群?      由二台或更多物理上独立的服务器共同组成的"虚拟"服...

18510
来自专栏运维小白

18.11 LVS DR模式搭建

LVS DR模式搭建 DR模式搭建 – 准备工作 三台机器 分发器,也叫调度器(简写为dir) 133.130 rs1 133.132 rs2 133.133 ...

1899
来自专栏编程

java调试技能之dubbo调试—telnet

dubbo作为一个远程调用框架,虽与同类型的框架,不知道谁优谁劣,但是就公司层面使用来说,还是很棒的。这里简单的写一下怎么使用和调试技巧,就算是作个使用总结吧,...

2496
来自专栏linux运维学习

linux学习第五十八篇: 负载均衡集群介绍,LVS介绍,LVS的调度算法,LVS NAT模式搭建

负载均衡集群介绍 主流开源软件LVS、keepalived、haproxy、nginx等 其中LVS属于4层(网络OSI 7层模型),nginx属于7层,hap...

2009

扫码关注云+社区