本篇文章主要梳理一下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. OLEDB 枚举数据源

    在之前的程序中,可以看到有这样一个功能,弹出一个对话框让用户选择需要连接的数据源,并输入用户名和密码,最后连接:而且在一些数据库管理软件中也提供这种功能--能够自己枚举出系统中存在的数据源,同时还可以 ...

  2. Csharp:字符串操作

    public class StringControl { /// <summary> /// 客户端浏览器 /// http://en.wikipedia.org/wiki/Web_bro ...

  3. vuex深入浅出

    本文主要记录使用vuex的使用场景.重要组成部分和学习心得. 1.说在前面 学习vue有两周的时间了,目前已经对vue的基础使用比较熟悉了.但是一直对vuex的使用耿耿于怀,这么说是因为总是不太理解, ...

  4. 深入理解JavaScript函数

    本篇文章主要介绍了"深入理解JavaScript函数",主要涉及到JavaScript函数方面的内容,对于深入理解JavaScript函数感兴趣的同学可以参考一下. JavaScr ...

  5. spark编程python实例

    spark编程python实例 ValueError: Cannot run multiple SparkContexts at once; existing SparkContext(app=PyS ...

  6. 【读书笔记】如何高效学习(Learn More ,Study Less)

    导读: 你会不会好奇为什么学习好的人会学的越来越好?那些课下不学习的人却比你考的好?一个人是怎么同时拿到好几个学位?为啥反复背的知识要领总是忘?为啥看个书总是不停走神?为啥总是苦逼似得看书直至厌烦? ...

  7. 【Leetcode】【Easy】ZigZag Conversion

    The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows like ...

  8. Ubuntu 14.04默认以字符界面启动

    在windows上跑虚拟机比较资源,特别当以图形界面启动时,如果宿主机性能不好,就相当卡. 让Ubuntu 14.04默认以字符界面启动的方法: 编辑文件:etc/default/grub 将  GR ...

  9. Oracle分区表分批迁移

    遇到个分区表数据量超大的case,磁盘空间不够,所以考虑使用数据泵分批导数据,测试如下: source : oracle windows 32bit 10.2.0.1target  :  oracle ...

  10. 安装PYTHON PIL包

    安装pillow而不是PIL pip install pillow 参考: https://github.com/python-pillow/Pillow