专栏首页linux系统运维负载均衡集群介绍,LVS介绍, LVS调度算法,LVS NAT模式搭建

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

相关文章

  • iptables filter表案例和iptables nat表的应有

    叶瑾
  • 原 shell脚本中的逻辑判断,文件目录属

    叶瑾
  • 目录权限已经更改所有者及所有组

    叶瑾
  • 图卷积网络图深度学习(下)

    通过将邻接矩阵A与D[1]的逆矩阵相乘,可以通过节点度对特征表示进行规范化[1]。因此,我们的简化传播规则如下所示:

    AiTechYun
  • How to resolve Unable to load groups error message

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

    Jerry Wang
  • 关于ORA-00020问题的反思(r2笔记第3天)

    今天在生产环境中查看alert日志,发现了如下的一段错误。这个错误确实没有太多需要解释的。很明显就是因为session leak的经典问题。 ORA-000...

    jeanron100
  • Session原理和Tomcat实现分析

    这篇文章挖掘Session的原理和tomcat实现机制。     由于HTTP是无状态的协议,客户程序每次都去web页面,都打开到web服务器的单独的连接,并...

    bear_fish
  • Python3-定时任务四种实现方式

    老猫最近做一个小程序开发任务,主要负责后台部分开发;根据项目需求老猫需要实现三个定时任务:

    py3study
  • 2018-3-8 11周3次课 php

    make install会把redis.so放在 /usr/local/php7/lib/php/extensions/no-debug-zts-2016030...

    py3study
  • 微服务架构设计 第五步: 微服务的 User Stories 的拆分与澄清

    2016.9.11, 深圳, Ken Fang 特性负责人与架构师, 开发骨干人员, 测试经理, 资深测试人员, 经由协作, 完成了: 1.  微服务边界上下文...

    Ken Fang 方俊贤

扫码关注云+社区

领取腾讯云代金券