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

实验架构

准备工作

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

Client IP

route add default gw 172.20.17.19

Route

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

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

后端主机

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

route  add -net  172.20.17.0 netmask 255.255.255.0 gw 192.168.214.133

部署HTTPserver

RS1与RS2安装web环境

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

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

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

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

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

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

RS1和RS2都执行

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

LVS,RS1,RS2添加VIP

三台主机执行:

ip addr add  192.168.214.140 dev lo

配置LVS集群规则

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

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

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

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

[root@LVS ~]# ipvsadm -a -t 192.168.214.140:80 -r 192.168.214.145 -g
[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规则信息

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

Client查看测试

[root@yufu ~]# for i in {1..10};do curl 192.168.214.140;done
RS 1 SERVER
RS 2 SERVER
RS 1 SERVER
RS 2 SERVER
RS 1 SERVER
RS 2 SERVER
RS 1 SERVER
RS 2 SERVER
RS 1 SERVER
RS 2 SERVER

部署DNS

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

安装DNS

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

启动服务

[root@DNS ~]# systemctl start named

编辑named.conf文件内容如下

options {
// listen-on port 53 { 127.0.0.1; };
listen-on port 53 { any; };
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
// allow-query { localhost; };
allow-query { any; };

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

zone "yufu123.com" IN {
type master;
file "yufu123.com.zone"; };

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

vim /var/named/yufu123.com.zone

$TTL 1D
@ IN SOA ns1.yufu123.com. admin.yufu.com ( 20180703
1H
5M
7D
1D ) IN NS ns1.yufu123.com.
ns1 IN A 172.20.17.20
www.yufu123.com. IN A 192.168.214.140
yufu123.com. IN A 192.168.214.140

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

[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

使用域名测试访问

[root@yufu ~]# for i in {1..10};do curl http://www.yufu123.com;done
RS 1 SERVER
RS 2 SERVER
RS 1 SERVER
RS 2 SERVER
RS 1 SERVER
RS 2 SERVER
RS 1 SERVER
RS 2 SERVER
RS 1 SERVER
RS 2 SERVER

不带www测试

[root@yufu ~]# for i in {1..10};do curl http://yufu123.com;done
RS 1 SERVER
RS 2 SERVER
RS 1 SERVER
RS 2 SERVER
RS 1 SERVER
RS 2 SERVER
RS 1 SERVER
RS 2 SERVER
RS 1 SERVER
RS 2 SERVER

一些问题

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

ldirectord监控和控制LVS

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

安装ldirectord

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

复制配置文件

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

编辑内容

# Global Directives
checktimeout=3
checkinterval=1
#fallback=127.0.0.1:80
#fallback6=[::1]:80
autoreload=yes
logfile="/var/log/ldirectord.log"
#logfile="local0"
#emailalert="admin@x.y.z"
#emailalertfreq=3600
#emailalertstatus=all
quiescent=no # Sample for an http virtual service
virtual=192.168.214.140:80
real=192.168.214.143:80 gate
real=192.168.214.145:80 gate
# real=192.168.6.6:80 gate
fallback=127.0.0.1:80 gate
service=http
scheduler=rr
#persistent=600
#netmask=255.255.255.255
protocol=tcp
checktype=negotiate
checkport=80
request="index.html"
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. echarts解决一些大屏图形配置方案汇总

    本文主要记录使用echarts解决各种大屏图形配置方案. 1.说在前面 去年经常使用echarts解决一些可视化大屏项目,一直想记录下使用经验,便于日后快速实现.正好最近在整理文档,顺道一起记录在博客 ...

  2. jmeter中CSV Data Set Config各项说明

    Config the CSV Data Source: 1)Filename:csv文件的名称(包括绝对路径,当csv文件在bin目录下时,只需给出文件名即可) 2)File encoding:csv ...

  3. 一、选择与安装——Linux学习笔记

    A)为什么要用Linux做服务器? 网络理由: 1.linux本身是网络操作系统,支持所有TCP/IP协议,网络功能是内核中六大模块之一 2.linux和unix兼容,unix是早期的服务器霸主,现在 ...

  4. 为我们的SSR程序添加热更新功能

    前沿 通过上一篇文章 通过vue-cli3构建一个SSR应用程序 我们知道了什么是SSR,以及如何通过vue-cli3构建一个SSR应用程序.但是最后遗留了一些问题没有处理,就是没有添加开发时的热更新 ...

  5. Orchard Core 文档翻译 (五)自动路由 Autoroute (OrchardCore.Autoroute)

    Autoroute (OrchardCore.Autoroute) 此模块允许您为内容项指定自定义URL(永久链接 permalink). Autoroute Part 将此部分附加到内容类型以指定内 ...

  6. May 25th 2017 Week 21st Thursday

    Follow your heart, but take your brain with you. 跟随你的内心,但是请别失去理智. I was ever told that we should fol ...

  7. May 10th 2017 Week 19th Wednesday

    Imagination is the source of creation. 想象是创作之源. Sometimes, creation and innovation are very simple, ...

  8. Fiori里花瓣的动画效果实现原理

    Fiori里的busy dialog有两种表现形式,一种是下图里的花朵形状,由5个不断旋转的花瓣组成.另一种是下图的3/4个圆环不断旋转的效果. 关于前者的效果,可以看我制作的这个视频.这个视频是手动 ...

  9. oozie 完整流程实例

    Oozie概述: Oozie是一个基于Hadoop工作流引擎,也可以称为调度器,它以xml的形式写调度流程,可以调度mr,pig,hive,shell,jar,spark等等.在实际工作中,遇到对数据 ...

  10. 读REDIS数据结构

    一.DICT 主要有两个问题: 1.散列冲突,解决办法是拉链法 typedef struct dictEntry { void *key; union { void *val; uint64_t u6 ...