本篇文章主要梳理一下LVS前端调度过程及用户请求过程

实验架构

准备工作

添加各主机路由联通主机通信

Client IP

  1. route add default gw 172.20.17.19

Route

路由主机开启地址转发功能

  • 将/etc/sysctl.conf文件中的net.ipv4.ip_forward 值改为 1,后执行sysctl -p

后端主机

后端主机包括LVS,web server 主机,在其主机添加响应路由

  1. route add -net 172.20.17.0 netmask 255.255.255.0 gw 192.168.214.133

部署HTTPserver

RS1与RS2安装web环境

  1. [root@www ~]# yum install httpd php-fpm php-mysql -y

在RS1和RS2主机的httpd.conf中添加如下内容

  1. <IfModule dir_module>
  2. DirectoryIndex index.html
  3. DirectoryIndex index.php #添加这一行
  4. </IfModule>
  5. #
  6. AddType application/x-httpd-php .php
  7. AddType application/x-httpd-php-source .phps
  8. ProxyRequests Off
  9. ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/var/www/html/$1

配置完成后重启服务单点测试web服务

RS1和RS2服务设置arp抑制规则

ARP抑制要在添加VIP之前,否正会产生不轮询的现象

RS1和RS2都执行

  1. [root@www ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
  2. [root@www ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_announce
  3. [root@www ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
  4. [root@www ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

LVS,RS1,RS2添加VIP

三台主机执行:

  1. ip addr add 192.168.214.140 dev lo

配置LVS集群规则

  1. [root@LVS ~]# yum install ipvsadm -y

添加LVS集群,定义调度模式为RR轮询

  1. [root@LVS ~]# ipvsadm -A -t 192.168.214.140:80 -s rr

将后端两台RS 主机加入集群,设置工作模式为DR模型

  1. [root@LVS ~]# ipvsadm -a -t 192.168.214.140:80 -r 192.168.214.145 -g
  2. [root@LVS ~]# ipvsadm -a -t 192.168.214.140:80 -r 192.168.214.143 -g

工作模式

  • -g: gateway, dr模式,默认

  • -i: ipip, tun模式

  • -m: masquerade, nat模式

  • -w weight:权重

查看ipvsadm规则信息

  1. [root@LVS ~]# ipvsadm -Ln
  2. IP Virtual Server version 1.2.1 (size=4096)
  3. Prot LocalAddress:Port Scheduler Flags
  4. -> RemoteAddress:Port Forward Weight ActiveConn InActConn
  5. TCP 192.168.214.140:80 rr
  6. -> 192.168.214.143:80 Route 1 0 0
  7. -> 192.168.214.145:80 Route 1 0 0

Client查看测试

  1. [root@yufu ~]# for i in {1..10};do curl 192.168.214.140;done
  2. RS 1 SERVER
  3. RS 2 SERVER
  4. RS 1 SERVER
  5. RS 2 SERVER
  6. RS 1 SERVER
  7. RS 2 SERVER
  8. RS 1 SERVER
  9. RS 2 SERVER
  10. RS 1 SERVER
  11. RS 2 SERVER

部署DNS

这里用DNS是让客户端使用域名解析的方式访问web服务,这样比较完整地模拟出正常环境下用户的请求响应过程

安装DNS

  1. [root@DNS ~]# yum install bind -y

启动服务

  1. [root@DNS ~]# systemctl start named

编辑named.conf文件内容如下

  1. options {
  2. // listen-on port 53 { 127.0.0.1; };
  3. listen-on port 53 { any; };
  4. directory "/var/named";
  5. dump-file "/var/named/data/cache_dump.db";
  6. statistics-file "/var/named/data/named_stats.txt";
  7. memstatistics-file "/var/named/data/named_mem_stats.txt";
  8. // allow-query { localhost; };
  9. allow-query { any; };

编辑named.rfc1912.zones文件添加如下配置段

  1. zone "yufu123.com" IN {
  2. type master;
  3. file "yufu123.com.zone";
  4. };

在/var/named/目录下创建yufu123.com.zone

vim /var/named/yufu123.com.zone

  1. $TTL 1D
  2. @ IN SOA ns1.yufu123.com. admin.yufu.com (
  3. 20180703
  4. 1H
  5. 5M
  6. 7D
  7. 1D )
  8. IN NS ns1.yufu123.com.
  9. ns1 IN A 172.20.17.20
  10. www.yufu123.com. IN A 192.168.214.140
  11. yufu123.com. IN A 192.168.214.140

给DNS主机添加一条路由指向路由器的网口

  1. [root@DNS ~]# route add -net 192.168.214.0 netmask 255.255.255.0 gw 172.20.17.19

Client使用域名测试

使用域名解析时,需要将路由表中的地址改为DNS服务的主机地址,如下

echo "nameserver 172.20.17.20" > /etc/resolv.conf

使用域名测试访问

  1. [root@yufu ~]# for i in {1..10};do curl http://www.yufu123.com;done
  2. RS 1 SERVER
  3. RS 2 SERVER
  4. RS 1 SERVER
  5. RS 2 SERVER
  6. RS 1 SERVER
  7. RS 2 SERVER
  8. RS 1 SERVER
  9. RS 2 SERVER
  10. RS 1 SERVER
  11. RS 2 SERVER

不带www测试

  1. [root@yufu ~]# for i in {1..10};do curl http://yufu123.com;done
  2. RS 1 SERVER
  3. RS 2 SERVER
  4. RS 1 SERVER
  5. RS 2 SERVER
  6. RS 1 SERVER
  7. RS 2 SERVER
  8. RS 1 SERVER
  9. RS 2 SERVER
  10. RS 1 SERVER
  11. RS 2 SERVER

一些问题

至此LVS前端负载调度的过程已经实现了,但是还存在很多的问题:比如LVS的角度节点存在单点问题,因为我只部署了一台,在图中画出了备用的节点,可以使用Keepalived实现LVS的高可用,但是这里并不打算实现高可用的架构。此外,还存在另一个问题,就是LVS无法对后端的RS进行健康状态监测,LVS只有调度功能,没有健康状态监测的功能,如果后端服务down机,lvs还是会一如既往地往故障主机上调度请求的,要实现健康状态监测,可以自己编写检测脚本实现,或者使用第三方工具辅助。后面的内容,就来实现基于第三方工具实现LVS的自动检测后端主机并自动添加删除RS节点的功能。

ldirectord监控和控制LVS

ldirectord 可以监控和控制LVS守护进程,还可以管理LVS规则

安装ldirectord

  1. [root@LVS ~]# yum install ldirectord-3.9.6-0rc1.1.1.x86_64.rpm -y

复制配置文件

  1. [root@LVS ~]# cp /usr/share/doc/ldirectord-3.9.6/ldirectord.cf /etc/ha.d/ldirectord.cf

编辑内容

  1. # Global Directives
  2. checktimeout=3
  3. checkinterval=1
  4. #fallback=127.0.0.1:80
  5. #fallback6=[::1]:80
  6. autoreload=yes
  7. logfile="/var/log/ldirectord.log"
  8. #logfile="local0"
  9. #emailalert="admin@x.y.z"
  10. #emailalertfreq=3600
  11. #emailalertstatus=all
  12. quiescent=no
  13. # Sample for an http virtual service
  14. virtual=192.168.214.140:80
  15. real=192.168.214.143:80 gate
  16. real=192.168.214.145:80 gate
  17. # real=192.168.6.6:80 gate
  18. fallback=127.0.0.1:80 gate
  19. service=http
  20. scheduler=rr
  21. #persistent=600
  22. #netmask=255.255.255.255
  23. protocol=tcp
  24. checktype=negotiate
  25. checkport=80
  26. request="index.html"
  27. receive="RS"

通过上面的配置,无需再使用ipvsadm工具手动添加规则,在ldirectord配置文件中定义好集群规则即可。当后端主机故障无法连通时,ldirectord会自动剔除故障节点,节点恢复时自动添加

LVS-DR模式实现调度负载的更多相关文章

  1. LVS DR模式 负载均衡服务搭建

    LVS 负载均衡 最近在研究服务器负载均衡,阅读了网上的一些资料,发现主要的软件负载均衡方案有nginx(针对HTTP服务的负载均衡),LVS(针对IP层,MAC层的负载均衡).LVS模式工作在网络层 ...

  2. CentOS下LVS DR模式负载均衡配置详解

    一安装LVS准备: 1.准备4台Centos 6.2 x86_64 注:本实验关闭 SELinux和IPtables防火墙. 管理IP地址 角色 备注 192.168.1.101 LVS主调度器(Ma ...

  3. LVS DR模式搭建 keepalived lvs

    LVS DR模式搭建• 三台机器 • 分发器,也叫调度器(简写为dir)172.16.161.130 • rs1 172.16.161.131 • rs2 172.16.161.132 • vip 1 ...

  4. Linux centosVMware Linux集群架构LVS DR模式搭建、keepalived + LVS

    一.LVS DR模式搭建 三台机器 分发器,也叫调度器(简写为dir) davery :1.101 rs1 davery01:1.106 rs2 davery02:11.107 vip 133.200 ...

  5. LVS DR模式实验

    LVS DR模式实验 三台虚拟机,两个台节点机(Apache),一台DR实验调度机 一:关闭相关安全机制 systemctl stop firewalld iptables -F setenforce ...

  6. lvs dr 模式请求过程

    一. lvs dr 模式请求过程 1.整个请求过程如下: client在发起请求之前,会发一个arp广播的包,在网络中找"谁是vip",由于所有的服务器,lvs和rs都有vip,为 ...

  7. Keepalived+LVS DR模式高可用架构实践

    Keepalived最初是为LVS设计,专门监控各服务器节点的状态(LVS不带健康检查功能,所以使用keepalived进行健康检查),后来加入了VRRP(虚拟路由热备协议(Virtual Route ...

  8. 一个公网地址部署LVS/DR模式

    http://blog.chinaunix.net/uid-7411781-id-3436142.html 一个公网地址部署LVS/DR模式   网上看了很多关于LVS的文章,在选取2种模式LVS/D ...

  9. LVS DR模式搭建、keepalived+lvs

    1.LVS DR模式搭建 条件: 即三台机器,在同一内网. 编辑脚本文件:/usr/local/sbin/lvs_dr.sh #! /bin/bashecho 1 > /proc/sys/net ...

  10. lvs之 lvs+nginx+tomcat_1、tomcat_2+redis(lvs dr 模式)

    前提:已经安装好 lvs+nginx+tomcat_1.tomcat_2+redis环境 ,可参考 (略有改动,比如tomcat_1.tomcat_2安装在两台机器上,而不是单机多实例 ,自行稍稍变动 ...

随机推荐

  1. PHP性能检测与优化—XHProf 数据阅读

    PHP性能检测与优化—XHProf 数据阅读 一.      效果如下 请求总揽 函数调用情况 二.      参数含义 Inclusive Time              包括子函数所有执行时间 ...

  2. 有关background 背景图片不能显示

    首先有两个概念 绝对路径,从根目录为起点到你所在的目录: 相对路径,从一个目录为起点到你所在的目录. 例如:              ┍ A文件夹           C -|            ...

  3. 隐藏 google 地图 Logo 隐藏 百度 地图 Logo

    Google 地图 var isFirstLoad=true; //地图瓦片加载完成之后的回调 google.maps.event.addListener(map, 'tilesloaded', fu ...

  4. March 22 2017 Week 12 Wednesday

    Satisfaction doesn't come from the outside, but from the inside. 满足感并非来自外界,而是来自内心. Everything that e ...

  5. 最简单的dockerfile使用教程 - 创建一个支持SSL的Nginx镜像

    什么是dockerfile?简单的说就是一个文本格式的脚本文件,其内包含了一条条的指令(Instruction),每一条指令负责描述镜像的当前层(Layer)如何构建. 下面通过一个具体的例子来学习d ...

  6. python+pymssql+selenium 获取短信验证码登录(实战练习)

    登录页面输入手机号, 获取短信验证码(验证码有10分钟有效期) 1 连接sql server数据库,获取10分钟之内的有效短信验证码 2 页面输入手机号,并获取验证码.若存在有效验证码则输入验证码,若 ...

  7. 《机器学习实战》中贝叶斯分类中导入RSS源例子

    跟着书中代码往下写在这里卡住了,考虑到可能还会有其他同学也遇到了这样的问题,记下来分享. 先吐槽一下,相信大部分网友在这里卡住的主要原因是伟大的GFW,所以无论是软件FQ还是肉身FQ的小伙伴们估计是无 ...

  8. note02-计算机网络

    2.物理层 通信系统模型(源->发送器->XXX->接收器->终),源发出数字信号,调制器编码为模拟信号,进行传输,解调器解码模拟信号为数字信号给终 信噪比,香农公式,C=B  ...

  9. IOS开发之——IOS模拟器调试蓝牙BLE

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/zhenyu5211314/article/details/24399887 因为在iPhone 4s ...

  10. RHEL6.5和RHEL7 的区别(转)

    Rhel6.5实验环境搭建 1)操作系统安装 RHEL7是一站式安装   2)网卡配置文件 RHEL6: /etc/sysconfig/network-scripts/ifcfg-eth0 RHEL7 ...