什么是集群?

一组相互独立的计算机,利用高速通信网络组成的一个计算机系统,对于客户机来说像是一个单一服务器,实际上是一组服务器。简而言之,一堆机器协同工作就是集群。集群的基本特点:高性能、高并发、高吞吐、经济实惠成本低、可伸缩性、可扩展性、高可用性、7*24提供服务、透明性、松耦合、可管理性、可编程性等。集群分为负载均衡集群 LB、高可用集群 HAC、高性能计算集群 HPC等,常见的集群软件有lvs、haproxy、nginx、keepalived、heartbeat,硬件有硬件:F5、Netscaler、Radware、A10,工作模式类似haproxy,内部还是安装软件然后进行优化。

LVS负载均衡技术

LVS属于四层负载均衡,主要采用IP负载均衡技术,实现LVS功能的是IPVS,IPVS工作在内核层,ipvsadm管理ipvs,工作在用户层;LVS真正实现调度的工具是IPVS,管理工具ipvsadm,keepalived也可以管理。LVS模式分为NAT网络地址转换模式、TUN隧道模式、DR直接路由模式、FULLNAT模式等。

LVS负载均衡DR模式

DR模式通过改写请求报文的目标MAC地址,将请求发给真实服务器,而真实服务器将响应后的处理结果直接返回给客户端,不经过负载均衡器。通常来说返回的数据比请求数据要大得多,所以DR的效率高。
 
NAT模式由于将VIP修改为RIP,所以响应报文也必须经过LVS发回客户端,故LVS可能成为性能瓶颈。
所以,为了达到直接返回客户端的目的,VIP就不能变化,于是衍生出TUN模式和DR模式。
TUN模式不改变VIP,而是采用在VIP报文基础上直接封装一层RIP包头的方式,达到向后转发的目的。
但TUN模式需要LVS和RS都支持IP隧道,比较麻烦,于是想到向后转发除了使用RIP地址之外,还可以直接修改数据帧MAC地址,于是衍生出DR模式。
DR模式和TUN模式功能上相同,区别在于转发机制,在于如何区分定位RS,前者通过二层MAC,后者通过三层IP。
 
DR模式核心点在于不修改VIP,所以配置的关键点在于
  1. RS要绑定VIP才能接收数据包,同时VIP又不能出现在同一子网,于是绑定在lo或任一其它子网的网卡。
  2. 局域网有了相同的VIP就要抑制RS的ARP响应。

CIP:client ip VIP:virtual ip RS:realserver

安装LVS

LVS核心是ipvs模块,该模块已经整合进linux内核,我们安装的其实是ipvsadm管理工具
cd /server/tools
wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.26.tar.gz
yum install libnl* popt* -y
tar xf ipvsadm-1.26.tar.gz
cd ipvsadm-1.26
make
make install
lsmod | grep ip_vs
modprobe ip_vs 或者 /sbin/ipvsadm

手动配置LVS

1. 绑定VIP
ifconfig eth0:0 10.0.0.10/24 up
ping 10.0.0.10
2. 配置lvs
ipvsadm --help
ipvsadm -C //清空
ipvsadm --set 30 5 60 //设定超时
ipvsadm -A -t 10.0.0.10:80 -s rr -p 20 //添加实例
ipvsadm -a -t 10.0.0.10:80 -r 10.0.0.13 -g -w 1 //添加节点
ipvsadm -a -t 10.0.0.10:80 -r 10.0.0.14 -g -w 1 //添加节点
ipvsadm -L -n //查看
ipvsadm -D -t 10.0.0.10:80 //删除实例
ipvsadm -d -t 10.0.0.10:80 -r 10.0.0.13 //删除节点
3. RS节点绑定VIP到lo网卡
ifconfig lo:10 10.0.0.10 netmask 255.255.255.255 up
route add -host 10.0.0.10 dev lo
ifconfig
lo网卡子网掩码255.255.255.255只是一个推荐值,lo的IP通常只用于本机测试,不对外通信,所以网段内只有自己一台主机,故将子网掩码设为/32。
4. 抑制RS端ARP响应
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
我们可以看到,LVS的配置很简单,工作中通常需要用脚本来批量添加。

脚本配置LVS

#!/bin/bash
. /etc/init.d/functions
VIP=10.0.0.10
PORT=80
RIP=(
10.0.0.13
10.0.0.14
)
start(){
ifconfig eth0:0 $VIP/24 up
route add -host $VIP dev eth0
ipvsadm -C
ipvsadm --set 30 5 60
ipvsadm -A -t $VIP:$PORT -s rr -p 20
for ((i=0;i<${#RIP[*]};i++))
do
ipvsadm -a -t $VIP:$PORT -r ${RIP[$i]} -g -w 1
done
}
stop(){
ifconfig eth0:0 down
route del -host $VIP dev eth0
ipvsadm -C
}
case "$1" in
start)
start
echo "ipvs is started"
;;
stop)
stop
echo "ipvs is stopped"
;;
restart)
stop
echo "ipvs is stopped"
start
echo "ipvs is started"
;;
*)
echo "Usage:$0 {start|stop|restart}"
esac

RS脚本绑定VIP并抑制ARP

#!/bin/bash
VIP=(
10.0.0.10
)
. /etc/init.d/functions
start(){
echo "start LVS of RIP"
for ((i=0;i<`echo ${#VIP[*]}`;i++))
do
interface="lo:`echo ${VIP[$i]}|awk -F "." '{print $4}'`"
/sbin/ifconfig $interface ${VIP[$i]}/32 up
route add -host ${VIP[$i]} dev $interface
done
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
}
stop(){
for ((i=0;i<`echo ${#VIP[*]}`;i++))
do
interface="lo:`echo ${VIP[$i]}|awk -F "." '{print $4}'`"
/sbin/ifconfig $interface ${VIP[$i]}/32 down
route del -host ${VIP[$i]} dev $interface
done
echo "stop LVS of RIP"
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
*)
echo "Usage:$0 {start|stop|restart}"
;;
esac

LVS负载均衡DR模式的更多相关文章

  1. lvs负载均衡(DR模式)

    lvs负载均衡(DR模式) 系统环境:lvs+keepalivedcentos7.5 ip:192.168.1.157 vip:192.168.1.150(主)centos7.5 ip:192.168 ...

  2. LVS负载均衡DR模式实现

    LVS负载均衡之DR模式配置 DR 模式架构图: 操作步骤 实验环境准备:(centos7平台) 所有服务器上配置 # systemctl stop firewalld //关闭防火墙 # sed - ...

  3. LVS负载均衡DR模式部署

    目录: 1. 拓扑图 2. 搭建环境 3. LVS服务器部署 4. 测试 1. 拓扑图     LVS-DR模式采的IP地址全部为外网IP.    本例中IP的设置全部采用临时设置IP的方式,重启后会 ...

  4. LVS负载均衡DR工作流程

    LVS负载均衡DR工作流程 (a) 当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链. 此时报文的源IP为CIP,目标IP为VIP (b) PRE ...

  5. LVS负载均衡NAT模式实现

    LVS负载均衡之NAT模式配置 NAT 模式架构图: 操作步骤 实验环境准备:(centos7平台) 所有服务器上配置 # systemctl stop firewalld //关闭防火墙 # sed ...

  6. LVS负载均衡工作模式和调度算法

    原文链接:https://blog.csdn.net/weixin_40470303/article/details/80541639 一.LVS简介 LVS(Linux Virtual Server ...

  7. lvs负载均衡net模式

    环境配置,一台双网卡的ens33,ens37,ens37的网关是ens33的IP,指定一下nginx ens33,192.168.30.22,ens37,172.16.1.1nginx  192.16 ...

  8. LVS负载均衡NAT模式原理介绍以及配置实战

    LVS基本原理 流程解释: 当用户向负载均衡调度器(Director Server)发起请求,调度器将请求发往至内核空间 PREROUTING 链首先会接收到用户请求,判断目标 IP 确定是本机 IP ...

  9. lvs 负载均衡 NAT模式

    1.原理 基于NAT机制实现.当用户请求到达director之后,director将请求报文的目标地址(即VIP)改成选定的realserver地址,同时将报文的目标端口也改成选定的realserve ...

随机推荐

  1. 状态压缩---UVA6625 - Diagrams & Tableaux

    比赛的时候刷出来的第一个状态DP.(期间有点没有把握是状态DP呢.) 题意:题意还是简单的.K行的方格.之后输入L1~LK 代表每一行方格数.在这些往左紧挨的方格子里填上1~N的数字. 其中右边格子的 ...

  2. [牛客练习赛29D]禁止动规

    description newcoder 你在一个无限长的数轴上,一开始你在原点 本来你只有两种操作:向左dp,以及向右dp 然而由于禁止dp 于是你只能另寻出路 万幸的是,dp之神随机给了你n个变量 ...

  3. bzoj 1877: [SDOI2009]晨跑 (网络流)

    明显拆点费用流: type arr=record toward,next,cap,cost:longint; end; const mm=<<; maxn=; maxm=; var edg ...

  4. BZOJ1085:[SCOI2005]骑士精神——题解+IDA*粗略讲解

    http://www.lydsy.com/JudgeOnline/problem.php?id=1085 Description 在一个5×5的棋盘上有12个白色的骑士和12个黑色的骑士, 且有一个空 ...

  5. BZOJ 1010: [HNOI2008]玩具装箱toy | 单调队列优化DP

    原题: http://www.lydsy.com/JudgeOnline/problem.php?id=1010 题解: #include<cstdio> #include<algo ...

  6. java里的 懒汉和恶汉模式-----讲解

    ------------java中的恶汉模式 public void Test{ private static Test inte = new Test(); // 内部自己创建好实例,私有属性(不建 ...

  7. Ubuntu中python多版本管理工具-pyenv

    ubuntu系统版本:16.04 # lsb_release -aNo LSB modules are available.Distributor ID: UbuntuDescription: Ubu ...

  8. STL之一:字符串用法详解

    转载于:http://blog.csdn.net/longshengguoji/article/details/8539471 字符串是程序设计中最复杂的变成内容之一.STL string类提供了强大 ...

  9. Java的switch是否支持String作为参数,还支持哪些类型?

    在Java5以前,switch(expr)中,exper只能是byte,short,char,int类型. 从Java5开始,java中引入了枚举类型,即enum类型. 从Java7开始,exper还 ...

  10. 通过反射获取T.class代码片段

    说明 持久化框架MyBatis和Hibernate中我们多多少少都会自己取写工具类!但是我们一般都会处理结果集转换成持久化对象,但是我们都要使用类! 代码片段 abstract public clas ...