3-5-基于LVS实现4层负载均衡配置和DR模型实战

DR类型
directer只响应请求报文,然后调度某一个RS,而响应报文由RS直接返回给请求者
RS和directer都需要配置VIP,(在同一网络中有可能冲突)
本地局域网通告(通告自己的IP),ARP广播通告,ARP广播请求的响应
RS配置VIP仅用于构建响应报文的源地址,不是用来真正通信的
为了实现请求报文直接发送给director,而不是RS,有三种方式
1、在路由器出口处做静态绑定,最不靠谱(因为director要做冗余的,需要重新绑定,二是不能阻断RS的ARP响应)
2、在RS上安装arptables,阻断RS的ARP通告和响应
3、利用给内核传递参数来阻断通告和响应

客户端的请求报文如何传递到director
客户端的请求报文-->路由器(解封装二层,然后封装新的二层给director)-->director
director怎么转发报文给RS
director发现是集群服务,重新封装二层mac,转发给RS

RS的网卡有物理接口和环回接口,RIP配置在物理接口,VIP配置在lo接口的别名上

视频中的课件:
负载均衡集群设计时要注意的问题:
(1)是否需要会话保持;
(2)是否需要共享存储;
共享存储:NAS,SAN,DS(分布式存储)
数据同步:
课外作业:rsync+inorify实现数据同步

lvs-nat:
设计要点:
(1)RIP与DIP在同一IP网络,RIP的网关要指向DIP;
(2)支持端口映射;
(3)Director要打开核心转发功能;

实践作业(博客):负载均衡两个PHP应用(wordpress,discuzx);
测试:(1)是否需要会话保持;(2)是否需要共享存储;

lvs-dr:
dr模型中,各主机上均需要配置VIP,解决地址冲突的方式有三种:
(1)在前端网关做静态绑定;
(2)在各RS使用arptables;
(3)在各RS修改内核参数,来限制arp响应和通告的级别;---对于linux来讲,IP属于内核而不是网卡,linux有三个网卡及IP,那么开机就会向各个网络通告自己所有的三个网卡MAC和IP(就是向每一个接口通告自己所有的网络地址和mac);如果连接这台服务器网卡的其他主机不在同一个网段,服务器仍然会响应,虽然接收请求的网卡不在同一网段
限制响应级别:arp_ignore---定义自己的应答方式,默认为0,还有其他的级别0~8
0:默认值,表示可使用本地任意接口上配置的任意地址进行响应;
1:仅在请求的目标IP配置在本地主机的接收到请求报文接口上时,才给予响应;
限制通告级别:arp_announce(响应)---定义自己的通告方式,默认为0
0:默认值,把本机上的所有接口的所有信息向每个接口上的网络进行通告;
1:尽量避免向非直接连接网络进行通告;
2:必须避免向非本网络通告;
实践作业(博客):负载均衡两个PHP应用(wordpress,discuzx);
测试:(1)是否需要会话保持(2)是否需要共享存储

RS的预配置脚本:
    #!/bin/bash
    #
    vip=10.1.0.5
    mask=255.0.0.0

    case $1 in
    start)
        echo 1> /proc/sys/net/ipv4/conf/all/arp_ignore---一般配置all就可以
        echo 1> /proc/sys/net/ipv4/conf/lo/arp_ignore---为了保险起见,才配置这个
        echo 2> /proc/sys/net/ipv4/conf/all/arp_announce
        echo 2> /proc/sys/net/ipv4/conf/lo/arp_announce

        ifconfig lo:0 $vip netmask $mask broadcast $vip up
        route add-host $vip dev lo:0
        ;;
    stop)
        ifconfig lo:0 down

        echo 0> /proc/sys/net/ipv4/conf/all/arp_ignore
        echo 0> /proc/sys/net/ipv4/conf/lo/arp_ignore
        echo 0> /proc/sys/net/ipv4/conf/all/arp_announce
        echo 0> /proc/sys/net/ipv4/conf/lo/arp_announce
        ;;
    *)
        echo "Usage:$(basename $0) start|stop"
        exit 1
        ;;
    esac

VS的配置脚本:
    #!/bin/bash
    #
    vip=‘10.1.0.5‘
    iface=‘eno16777736:0‘
    mask=‘255.255.255.255‘
    port=‘80‘
    rs1=‘10.1.0.7‘
    rs2=‘10.1.0.8‘
    scheduler==‘wrr‘
    type=‘-g‘

    case $1 in
    start)
        ifconfig $iface $vip netmask $mask broadcast $vip up
        iptables -F

        ipvsadm -A-t ${vip}:${port} -s $scheduler
        ipvsadm -a -t ${port} -r ${rs1} $type -w 1
        ipvsadm -a -t ${port} -r ${rs2} $type -w 1
        ;;
    stop)
        ipvsadm -C
        ifconfig $iface down
        ;;
    *)
        echo "Usage $(basename $0) start|stop"
        exit 1
        ;;
    esac

    课外扩展作业:vip与dip/rip不在同一网段的实验环境设计及配置实现;
    博客作业:lvs的详细应用
        讲清楚类型、调度方法;并且给出nat和dr类型的设计拓扑及具体实现;

下边是演示如何创建DR模型,三台服务器都只需要一块网卡,并且都是桥接模型。
Director:172.16.0.6/16
ifconfig---查看网卡接口172.16.0.6/16
route -n---查看路由信息,IP,网关
nmtui---修改ip地址,出现命令行窗口
systemctl restart network---重启下网络服务
ntpdate 172.16.0.1---同步一下时间

curl http://172.16.0.7
curl http://172.16.0.7/test1.html---这里请求RIP是没有问题的,但是请求VIP不会应答

下边是把VIP配置到Directory上。
ifconfig---查看一下有几个网卡
ifconfig eno16777736:0 172.16.0.99 netmask 255.255.255.255 broadcast 172.16.0.99 up---在物理网卡上配置VIP,一样可以使用4个255,broadcast这里的广播地址和4个255是不一样的,只是为了统一风格,在这个网络中,受限广播这个地址

yum install -y ipvsadm
ipvsadm -A -t 172.16.0.99:80 -s rr---添加一条规则,并且使用轮调机制,去往这个地址这个端口是一个集群服务
ipvsadm -ln---查看ipvs
ipvsadm -a -t 172.16.0.99:80 -r 172.16.0.7 -g---g表示dr类型
ipvsadm -a -t 172.16.0.99:80 -r 172.16.0.8 -g
for i in {1..20};do curl http://172.16.0.99/test1.html;done---循环20次访问这个url,有可能有保持连接的缘故,所以有可能不是轮掉
也可以使用arp-a看哪个ip在哪个mac上
此时去ping,会有应答,并且是directory响应的,两个realserver不会应答

rs1:172.16.0.7/16
hostnamectl set-hostname rs1.ilinux.io---重新修改主机名
yum repolist---列出仓库
yum clean all---清空仓库缓存
scp /etc/yum.repos.d/epel.repo 172.16.0.8:/etc/yum.repos.d/
yum install -y httpd php php-mysql---安装动态内容站点程序包
vim /var/www/html/phpinfo.php
<h1>RS1</h1>
<?php
phpinfo();
?>
vim /var/www/html/test1.html
<h1>RS1,172.16.0.7</h1>
scp /var/www/html/* 172.16.0.8:/var/www/html

先配置内核参数(不让其通告并响应),再配置IP地址
ls /proc/sys/net/ipv4/conf/网卡名称/arp_ignore---网卡名称有4个all,default,网卡,lo---一般配置all就可以了,为了保险网卡或lo需要再配置一下

为了配置方便,写一个配置脚本
vim setparameter.sh
#!/bin/bash
#
vip=‘172.16.0.99’
mask=255.255.255.255---为了限制广播域,因为广播地址就是自己,表明自己在一个网络
iface=‘lo:0’

    case $1 in
    start)
        echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore---一般配置all就可以
        echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore---为了保险起见,才配置这个
        echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
        echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce

        ifconfig $iface $vip netmask $mask broadcast $vip up
        route add -host $vip dev $iface
        ;;

    stop)
        ifconfig $iface down---停止的时候路由会自动删除

        echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore
        echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore
        echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce
        echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce
        ;;
    *)
        echo "Usage:$(basename $0) start|stop"
        exit 1
        ;;
    esac

bash -n setparameter.sh---测试语法有没有问题
bash -x setparameter.sh start---直接执行,加start是查看过程
cat /proc/sys/net/ipv4/conf/all/arp_announce---查看一下是不是改成2了
cat /proc/sys/net/ipv4/conf/all/arp_ignore---查看一下是不是改成1了
scp setparameter.sh 172.16.0.8:/root/---复制一下

ifconfig lo:0 172.16.0.99 netmask 255.255.255.255 broadcast 172.16.0.99 up---配置环回接口的IP,掩码,广播地址,并且启用up
使用ifconfig命令可以查看,并且从外部主机ping一下,不会应答
route add -host 172.16.0.99 dev lo:0---添加一条路由,如果目标地址是172,那么到达VIP的时候,要经由lo这个接口进来,并且经由这个接口出去---这里很重要,为了让信息到达网卡并转发给lo接口
systemctl start httpd---启动web服务
ss -tnl---查看80端口是否已经启动起来

rs2:172.16.0.8/16
nmtui---修改ip地址,出现命令行窗口172.16.0.8/16
systemctl restart network---重启下网络服务
ntpdate 172.16.0.1---同步一下时间
ifconifg---查看下修改后的ip对不对
hostnamectl set-hostname rs2.ilinux.io---重新修改主机名
hostname---查看下主机名
cd /var/www/html/
vim phpinfo.php---rs1创建的并复制过来的。
<h1>RS2</h1>
<?php
phpinfo();
?>
vim test1.html
<h1>RS2,172.16.0.8</h1>
上边rs1复制过来了修改内核参数的脚本,直接执行
bash -x setparameter.sh start---直接执行,加start是查看过程
ifconfig lo:0 172.16.0.99 netmask 255.255.255.255 broadcast 172.16.0.99 up---配置环回接口的IP,掩码,广播地址,并且启用up
使用ifconfig命令可以查看,并且从外部主机ping一下,不会应答
route add -host 172.16.0.99 dev lo:0---添加一条路由,如果目标地址是172,那么经由lo这个接口进来,并且经由这个接口出去
systemctl start httpd---启动web服务
ss -tnl---查看80端口是否已经启动起来

原文地址:https://blog.51cto.com/13852573/2364128

时间: 2024-07-29 11:08:19

3-5-基于LVS实现4层负载均衡配置和DR模型实战的相关文章

3-4-基于LVS实现4层负载均衡配置和nat模型实战

centos内核支持ipvs,只需在用户空间安装ipvsadm即可,首先应该准备好拓扑环境,了解编写规则的工具用法 yum install -y ipvsadmrpm -ql ipvsadm---可以看到用到了unit file,也就是脚本(开机启动不启动),ipvsadm不是一项服务,规则会保存到内存中不会永久有效,为什么会用到unitfile呢?因为需要在开机时使用restone重新载入规则 注意:对于集群类服务来说,不建议开机自动启动,需要手动开启,防止及其挂了.我们会有高可用集群服务器,

LVS详解及基于LVS实现web服务器负载均衡

前言 LVS(Linux Virtual Server)Linux虚拟服务器,是一个虚拟的服务器集群系统.本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一.通过LVS提供的负载均衡技术和Linux操作系统可实现一个高性能.高可用的服务器群集,从而以低成本实现最优的服务性能. 集群基础 集群简介 集群(Cluster)是一组相互独立的.通过高速网络互联的计算机,它们构成了一个组,并以单一系统的模式加以管理.一个客户与集群相互作用时,集群像是一个独立的服务器.集群配置是用

Nginx实现七层负载均衡配置指导

本文描述了如何使用Nginx实现在应用层实现7层负载均衡功能,Nginx支持虚拟主机,可以按照轮询,IP哈希,URL哈希,权重方式对后端服务器做负载均衡,还支持后端服务器健康检查功能.废话不多说,详细配置见下文~ 测试模型如下: 1.一台Nginx做负载负载均衡代理   具体配置centos5.8 ip 10.0.211.5 2.三台tomcat做业务逻辑处理        具体配置centos5.8 10.0.211.2 10.0.211.3 10.0.211.4 具体部署步骤: 1.    

3-2-基于LVS实现4层负载均衡原理讲解

对负载均衡来讲,最关键的就是调度器了网络传输层数:下四层由内核来管理及实现,被称为通信子网,最上面三层,叫应用层,在用户空间实现,叫做资源子网lvs是四层的负载均衡器,而且是真正附着在netfilter(内核通信过滤或操作框架)不需要向内核监听注册某一端口,不再受套接字文件数量的限制,直接修改报文扔给后端,不需要自己扮演任何角色tcp协议栈有65536个端口,主机只要向外发请求,就会用ip打开一个端口,像nginx这种运行在用户空间的进程,就需要通过自己的套接字(打开端口)向后端服务器的套接字传

3-3-基于LVS实现4层负载均衡模式和场景应用

回顾:linux的集群形式:LB负载均衡,HA高并发,HP高性能分布式系统:存储.计算(超算集群)lb cluster实现方式:软件四层:lvs.nginx(stream).haproxy(mode tcp)七层:http:nginx(http)/httpd/haproxy(mode http)/ats/perlbal/poundmysql:ProxySQL...硬件lvs:linux virtual servervs/rs,cip/vip/dip/riplvs type:nat/dr/tun/

四层和七层负载均衡的特点及常用负载均衡Nginx、Haproxy、LVS对比

一.四层与七层负载均衡在原理上的区别 图示: 四层负载均衡与七层负载均衡在工作原理上的简单区别如下图: 概述: 1.四层负载均衡工作在OSI模型中的四层,即传输层.四层负载均衡只能根据报文中目标地址和源地址对请求进行转发,而无法修改或判断所请求资源的具体类型,然后经过负载均衡内部的调度算法转发至要处理请求的服务器.四层负载均衡单纯的提供了终端到终端的可靠连接,并将请求转发至后端,连接至始至终都是同一个.LVS就是很典型的四层负载均衡. 2.七层负载均衡工作在OSI模型的第七层应用层,所以七层负载

[转] 四层和七层负载均衡的特点及常用负载均衡Nginx、Haproxy、LVS对比

一.四层与七层负载均衡在原理上的区别 1.图示 2.概述 四层负载均衡工作在 OSI 模型中的四层,即传输层.四层负载均衡只能根据报文中目标地址和源地址对请求进行转发,而无法修改或判断所请求资源的具体类型,然后经过负载均衡内部的调度算法转发至要处理请求的服务器.四层负载均衡单纯的提供了终端到终端的可靠连接,并将请求转发至后端,连接至始至终都是同一个.LVS 就是很典型的四层负载均衡. 七层负载均衡工作在 OSI 模型的第七层,即应用层,所以七层负载均衡可以基于请求的应用层信息进行负载均衡,例如根

四层and七层负载均衡

四层负载/七层负载 在常规运维工作中,经常会运用到负载均衡服务.负载均衡分为四层负载和七层负载,那么这两者之间有什么不同? 废话不多说,详解如下: 1.    什么是负载均衡 1)负载均衡(Load Balance)建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽.增加吞吐量.加强网络数据处理能力.提高网络的灵活性和可用性.负载均衡有两方面的含义:首先,大量的并发访问或数据流量分担到多台节点设备上分别处理,减少用户等待响应的时间:其次,单个重负载的运算分担到多台节

基于keepalived+nginx部署强健的高可用7层负载均衡方案20151214

高可用是个老生常谈的问题了,开源的高可用软件已经做的相当成熟了,之前也在debian下做过lvs+heartbeat的4层LB,一直很稳定(可惜流量不大啊),现在由于业务的需要,做一个基于keepalived+nginx的高可用7层负载均衡. 拓扑结构也比较简单,就不画拓扑图了:2个节点上分别安装配置keepalived和nginx,配置nginx反向代理后端的real server 比较关键的几个点: 1.为避免同一个局域网中有多个keepalived组中的多播相互响应,采用单播通信 2.状态