WEB集群——LVS-DR 群集、nginx负载均衡

1、基于 CentOS 7 构建 LVS-DR 群集。
2、配置nginx负载均衡。


一、 LVS-DR 群集

1、LVS-DR工作原理

LVS-DR(Linux Virtual Server Director Server)

名称缩写说明

虚拟IP地址(Virtual IP Address)

VIPDirector用于向客户端计算机提供服务的IP地址
真实IP地址(Real Server IP Address)RIP在集群下面节点上使用IP地址
Director的IP地址(Director IP Address)DIPDirector用于连接内外网络的IP地址
客户端主机IP地址(Client IP Address)CIP客户端用户计算机请求集群服务器的IP地址,该地址用作发送集群的请求的源IP地址  

首先,来自客户端计算机 CIP 的请求被发送到 Director 的 VIP 。

接着,Director 使用相同的 VIP 目的 IP 地址将 请求发送到集群节点或真实服务器。

然后,集群某个节点将回复该数据包,并将该数据包直接发送到客户端计算机(不经过director ),并且以此回复数据包使用的目的 VIP 地址作为源 IP 地址。

因此,实际上 是客户计算机被“ 欺骗 ” 了,客户计算机始终认为它正与同一台计算机对话,而实际上它正在发送请求数 据包给一台计算机(LB ),并从另一台计算机( RS )接收回复的数据包。 

2、LVS-DR模式的特点

(1)所有集群节点 RS 必须和 Director 在相同的物理网段(即同一个局域网中);

(2)所有客户端入站(而不是出站)请求由 Director 首先接收,并转发给集群节点 RS ;

(3)集群节点 RS 通常来说最好带外部 IP ,而不使用 Director 及某固定机器作为默认网关,以便将数据包直 接回复给客户端计算机,且不会产生回包的瓶颈;

(4)所有集群节点 RS 上必须在 lo 网卡上绑定 VIP 地址,以便验证通过目的 IP 非 RS 的数据包;

(5)由于所有集群节点 RS 上必须在 lo 网卡上绑定 VIP 地址,因此,带来 arp 问题,即集群节点 RS 默认会相 应发往Director VIP 的数据包。因此要对所有集群节点 RS 做 ARP 抑制处理,把响应 VIP 的请求交给 LVS Director;

(6)很多操作系统都可以用在集群内部的 RS 真实服务器上只要该操作系统能够实现 ARP 隐藏,如: Windows, linux , unix ;

(7) LVS/DR 模式不需要开启调度器转发功能,这点和 LVS/NAT 模式是不同的。

(8) LVS/DR Director (服务器数量 100 台)可以比 LVS-NAT Director (服务器数量 10-20 台)承受更多的 并发请求和转发更多的服务器数量。

3、部署LVS-DR集群

主机IP地址
DR服务器192.168.186.100
web服务器1192.168.186.103
web服务器2192.168.186.102
客户端192.168.206.100
vip(虚拟换回)

192.168.186.200

(1)配置负载调度器(192.168.186.100) 

#关闭防火墙
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 0
 
#安装ipvsadm工具
[root@localhost ~]# yum install ipvsadm -y
 
#配置虚拟IP地址(VIP:192.168.186.200)
[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# cp ifcfg-ens33 ifcfg-ens33:0
 
[root@localhost network-scripts]# vim ifcfg-ens33:0
#删除UUID,dns与网关,注意子网
NAME=ens33:0
DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.186.200
NETMASK=255.255.255.255
 
#重启网络服务、启动网卡
[root@localhost network-scripts]# systemctl restart network
[root@localhost network-scripts]# ifup ifcfg-ens33:0
 
##调整/proc响应参数 对于 DR 群集模式来说,由于 LVS 负载调度器和各节点需要共用 VIP 地址,应该关闭 Linux 内核的重定向参数响应服务器不是一台路由器,那么它不会发送重定向,所以可以关闭该功能
[root@localhost network-scripts]# vim /etc/sysctl.conf 
net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
 
#刷新配置
[root@localhost network-scripts]# sysctl -p
net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
 
#加载模块
[root@localhost network-scripts]# modprobe ip_vs
[root@localhost network-scripts]# cat /proc/net/ip_vs
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port Forward Weight ActiveConn InActConn
 
#配置负载分配策略,并启动服务
[root@localhost network-scripts]# ipvsadm-save > /etc/sysconfig/ipvsadm
[root@localhost network-scripts]# systemctl start ipvsadm
 
#手工执行配置添加LVS服务并增加两台RS
##添加真实服务器-a  
##指定VIP地址及TCP端口-t   
##指定RIP地址及TCP端口 -r 
##指定DR模式-g
[root@localhost network-scripts]# ipvsadm -C
[root@localhost network-scripts]# ipvsadm --set 30 5 60
[root@localhost network-scripts]# ipvsadm -A -t 192.168.186.200:80 -s rr
[root@localhost network-scripts]# ipvsadm -a -t 192.168.186.200:80 -r 192.168.186.103:80 -g
[root@localhost network-scripts]# ipvsadm -a -t 192.168.186.200:80 -r 192.168.186.102:80 -g
 
#保存设置
[root@localhost network-scripts]# 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.186.200:80 wlc
  -> 192.168.186.103:80           Route   1      0          0        
  -> 192.168.186.102:80           Route   1      0          0         
 

 (2)第一台web节点服务器(192.168.186.103)

#关闭防火墙
[root@web1 ~]# systemctl stop firewalld
[root@web1 ~]# setenforce 0
 
#安装httpd,开启服务
[root@web1 ~]# yum install httpd -y
[root@web1 ~]# systemctl start httpd 
 
#创建一个站点文件并写入内容
[root@web1 ~]# echo "this is 192.168.186.103" > /var/www/html/index.html 
 
#添加环回网卡,修改环回网卡名,IP地址,子网掩码
[root@web1 ~]# cd /etc/sysconfig/network-scripts/
[root@web1 network-scripts]# cp ifcfg-lo ifcfg-lo:0
[root@web1 network-scripts]# vim ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.186.200
NETMASK=255.255.255.255
NETWORK=127.0.0.0
 
#重启网络
[root@web1 network-scripts]# systemctl restart network
 
 
##添加路由
[root@web1 network-scripts]# ifup lo:0
[root@web1 network-scripts]# ifconfig lo:0
lo:0: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 192.168.186.200  netmask 255.255.255.255
        loop  txqueuelen 1000  (Local Loopback)
[root@web1 network-scripts]# route add -host 192.168.169.200 dev lo:0
 
 
##调整proc相应参数
[root@web1 network-scripts]vim /etc/sysctl.conf
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
 
[root@web1 network-scripts]sysctl -p

(3)第二台web节点服务器(192.168.186.102) 

#关闭防火墙
[root@web2 ~]# systemctl stop firewalld           
[root@web2 ~]# setenforce 0
 
#安装httpd,开启服务
[root@web2 ~]# yum install httpd -y
[root@web2 ~]# systemctl start httpd
 
#创建站点文件
[root@web2 ~]# echo "this is 192.168.186.102" > /var/www/html/index.html
 
 
#添加环回网卡,修改环回网卡名,IP地址,子网掩码
[root@web2 ~]# cd /etc/sysconfig/network-scripts/
[root@web2 network-scripts]# cp ifcfg-lo ifcfg-lo:0
[root@web2 network-scripts]# vim ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.185.200
NETMASK=255.255.255.255
NETWORK=127.0.0.0
 
#设置路由
[root@web2 network-scripts]# route add -host 192.168.186.200 dev lo:0
[root@web2 network-scripts]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.186.2   0.0.0.0         UG    100    0        0 ens33
192.168.186.0   0.0.0.0         255.255.255.0   U     100    0        0 ens33
192.168.186.200 0.0.0.0         255.255.255.255 UH    0      0        0 lo
 
#开机执行命令
[root@web2 network-scripts]# vim /etc/rc.d/rc.local 
/usr/sbin/route add -host 192.168.59.188 dev lo:0
 
#调整 proc 响应参数
[root@web2 network-scripts]# vim /etc/sysctl.conf 
[root@web2 network-scripts]# sysctl -p
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
 

(4)客户端测试

 (5)测试

 

 二、nginx负载均衡

1、反向代理工作过程

 从图 6-2可知,若用户A 、用户B 、用户C 同时对反向代理服务器发送请求,反向代理服务器则根据其内部的具体配置,将用户的请求分发给后端服务器进行处理,并将后端服务器处理后的响应结果作为自己的响应结果返回给用户。 反向代理服务器的整个处理过程,用户并不知情 。因此,从上述对代理和反向代理的介绍可以总结出两者的特性,主要有以下几点:

(1)安全性: 正向代理的客户端能够在隐藏自身信息的同时访问任意网站,这给网络安 全带来了极大的威胁。因 此, 在使用时必须采取安全措施以确保仅为经过授权的客 户端用户提供服务 而反向代理的客户端用户只能通过外网来访问代理服务器,并且用户并不知道自己访问的是一个代理服务器,好处就是反向代理将真正的处理放在内网中,有效地提高了网络安全性。

(2)功能性 : 正 向代理的主要用途是为在防火墙内的局域网用户提供访问 Int rnet途径 而反向代理的主要用途是将防火墙后的服务器提供给 Internet 用户访问,还可以为多个后端服务器提供负载均衡功能、缓存功能等。

 2、反向代理服务配置

主机IP地址
反向代理服务器192.168.186.100
web服务器1192.168.186.101
web服务器2192.168.186.102

(1)安装Nginx 

#配置虚拟机ip,网卡等
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
 
#安装C语言编译库和依赖包,使用gcc
[root@localhost ~]# yum install gcc gcc-c++ -y
[root@localhost ~]# yum install pcre-devel openssl-devel -y
 
#解压,执行安装即可
[root@localhost ~]# tar zxvf nginx-1.22.0.tar.gz 
[root@localhost nginx-1.22.0]# ./configure --prefix=/usr/local/nginx
[root@localhost nginx-1.22.0]# make 
[root@localhost nginx-1.22.0]# make install
 
#启动nginx及配置nginx开机启动
[root@localhost nginx-1.22.0]# cd /usr/local/nginx/sbin/
[root@localhost sbin]# ./nginx 
 
#编写一个脚本称谓系统服务
[root@localhost sbin]# vim /usr/lib/systemd/system/nginx.service
[Unit]
Description=nginx - web server
After=network.target remote-fs.target nss-lookup.target
 
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/usr/local/nginx/sbin/nginx -s reload	#重启nginx
ExecStop=/usr/local/nginx/sbin/nginx -s stop	#停止
ExecQuit=/usr/local/nginx/sbin/nginx -s quit	#优雅停止nginx
PrivateTmp=true
 
[Install]
WantedBy=multi-user.target
 
#重新加载系统服务
[root@localhost sbin]# systemctl daemon-reload 
 
#启动服务
[root@localhost sbin]# systemctl status nginx

 (2)配置反向代理

[root@localhost sbin]# vim /etc/nginx/conf.d/vhost.conf
#配置域名为www.wangp.com的虚拟主机
server {
        listen  80;
        server_name www.wangp.com;
        
        #域名www.wangp.com的请求全部转发到Web服务器192.168.186.101
        location / {
                proxy_pass http://192.168.186.101;
        }
}
 
#配置域名为www.openlab.com的虚拟主机
server {
        listen  80;
        server_name www.openlab.com;
        
        #域名www.openlab.com的请求全部转发到Web服务器192.168.186.102
        location / {
                proxy_pass http://192.168.186.102;
        }
}

(3)配置hosts文件

编辑 C: \ Window s\Sys t em32\drivers \etc 目录下的 hosts 文件,实现网站的域名访问

 

 (4)在web1服务器和web2服务器编写index.html

[root@web1 ~]# mkdir /www/
[root@web1 ~]# echo "Welcome to web1 server:192.168.186.101" > /www/index.html
[root@web1 ~]# cd /www/
[root@web1 www]# ls
index.html
[root@web1 www]# cat index.html 
Welcome to web1 server:192.168.186.101
 
[root@web2 ~]# mkdir /www/
[root@web2 ~]# echo "Welcome to web2 server:192.168.186.102" > /www/index.html
[root@web2 ~]# cd /www/
[root@web2 www]# ls
index.html
[root@web2 www]# cat index.html 
Welcome to web2 server:192.168.186.102

3、负载均衡

       负载均衡( load balance )就是将负载分摊到多个操作单元上执行,从而提高服务的可用性和响应速度,带给用户更好的体验。

       图6-5演示了负载均衡服务器地工作方式,其中客户端用户A和B同时请求了域名为test. ng. test 的网站,负载均衡服务器 (192. 168. 78. )会根据具体配置进行不同的分配。

        这里假设用户 的请求被分配到 Web 服务器 1(192. 168. 78. 128 )中处理,用户 的请求被 分配到另一个闲置的 Web 服务器 2(192. 168. 78. 200 )中处理 通过负载均衡,可以将一台 服务器的工作扩展到多台服务器中执行,提高整个网站的负载能力

4、负载均衡地配置

(1)准备服务器

主机IP地址
负载均衡服务器192.168.186.100
web服务器1192.168.186.101
web服务器2192.168.186.102

(2)配置一般轮询负载均衡

#配置域名为www.openlab1.com的虚拟主机
[root@localhost ~]# vim /etc/nginx/conf.d/nginx.conf
 
server{
        listen 80;
        server_name www.openlab1.com;
        location /{
                proxy_pass http://web_server;
   }
}
#配置负载均衡服务器组
upstream web_server{
        server 192.168.186.101;
        server 192.168.186.102;
}

(3)在web1服务器和web2服务器编写index.html

[root@web1 ~]# echo "Welcome to web1 server:192.168.186.101" > /root/index.html
[root@web1 ~]# echo "Welcome to web2 server:192.168.186.102" > /root/index.html

(4)配置hosts文件

 (5)测试

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/71739.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

TCP网络服务器设计

最近设计了一个网络服务器程序&#xff0c;对于4C8G的机器配置&#xff0c;TPS可以达到5W。业务处理逻辑是简单的字符串处理。服务器接收请求后对下游进行类似广播的发送。在此分享一下设计方式&#xff0c;如果有改进思路欢迎大家交流分享。 程序运行在CentOS7.9操作系统上&a…

【uniapp】uniapp设置安全区域:

文章目录 一、效果图:二、实现代码: 一、效果图: 二、实现代码: {"path": "pages/index/index","style": {"navigationStyle": "custom","navigationBarTextStyle": "white","navigationBarTitle…

Unity之ShaderGraph 节点介绍 UV节点

UV节点 Flipbook&#xff08;翻页或纹理帧动画&#xff09; Polar Coordinates&#xff08;将输入 UV 的值转换为极坐标。&#xff09; Radial Shear&#xff08;径向剪切变形&#xff09; Rotate&#xff08;将UV 的值旋转&#xff09; Spherize&#xff08;鱼眼镜头的球形变…

CentOS7连接网络

1.下载centos7镜像文件 2.安装centos7 3.修改网卡,ens33. 注意: 这里使用的是dhcp,设置IPADDR192.168.31.64一方面是为了后面使用crt或者MobaXterm连接,另一方面它和windows电脑的网卡要一致.这样才可以连接到网络.win r,输入cmd,打开命令窗口输入ipconfig.可以看到IPv4: 102…

windows安装apache-jmeter-5.6.2教程

目录 一、下载安装包&#xff08;推荐第二种&#xff09; 二、安装jmeter 三、启动jmeter 一、下载安装包&#xff08;推荐第二种&#xff09; 1.官网下载&#xff1a;Apache JMeter - Download Apache JMeter 2.百度云下载&#xff1a;链接&#xff1a;https://pan.baidu.…

FLStudio21水果最新中文版升级下载

FLStudio21最新中文版是一款非常专业的后期编曲音频处理软件&#xff0c;对于音乐编辑处理的领域内的人而言&#xff0c;是非常能够满足需求的一款工具。FL Studio21拥有强大且专业的创作工具&#xff0c;这是先进的创作工具&#xff0c;让你的音乐突破想象力的限制。FL Studio…

数据结构-栈的实现(C语言版)

前言 栈是一种特殊的线性表&#xff0c;只允许在固定的一端进行插入和删除的操作&#xff0c;进行数据插入和删除的一端叫做栈顶&#xff0c;另一端叫做栈底。 栈中的数据元素遵循后进先出的的原则。 目录 1.压栈和出栈 2. 栈的实现 3.测试代码 1.压栈和出栈 压栈&#xff…

C数据结构与算法——无向图(邻接矩阵) 应用

实验任务 (1) 掌握图的邻接矩阵存储及基本算法&#xff1b; (2) 掌握该存储方式下的DFS和BFS算法。 实验内容 实现图的邻接矩阵存储结构实现基于邻接矩阵的相关算法及遍历算法 实验源码 #include <malloc.h> #include <stdio.h>#define MAXSIZE 1000 #define …

(6)(6.3) 复合连接的故障处理

文章目录 6.3 复合连接的故障处理 6.4 相关话题 6.3 复合连接的故障处理 带有 F7 或 H7 处理器并有 CAN 接口的自动驾驶仪使用的固件提供两个 USB 接口。一个用于正常的 MAVLink 连接&#xff0c;一个用于 SLCAN 串行连接到 CAN 接口进行配置和固件更新。这被称为复合型 USB…

WebRTC | 实现数据流的一对一通信

目录 一、浏览器对WebRTC的支持 二、MediaStream与MediaStreamTrack 三、RTCPeerConnection 1. RTCPeerConnection与本地音视频数据绑定 2. 媒体协商SDP 3. ICE &#xff08;1&#xff09;Candidate信息 &#xff08;2&#xff09;WebRTC收集Candidate &#xff08;3&…

常见的几大排序问题

前言&#xff1a;排序问题&#xff0c;是数据结构中的一大重要的组成板块&#xff0c;很多的面试机试中都会多多少少的涉及到排序问题&#xff0c;之前在上数据结构的那个学期整理过排序问题&#xff0c;不过大都是囫囵吞枣&#xff0c;不求甚解&#xff0c;今天&#xff0c;我…

如果你需要使用重试机制,请使用Spring官方的Spring Retry

Spring Retry 是 Spring Framework 中的一个模块&#xff0c;提供了一种简单的方式来在应用程序中实现重试机制。 在应用程序中&#xff0c;如果遇到了一些不可避免的错误&#xff0c;比如网络连接失败、数据库连接失败等&#xff0c;我们通常需要对这些错误进行重试&#xff…

SQL 语句解析过程详解

SQL 语句解析过程详解&#xff1a; 1&#xff0e;输入SQL语句 2&#xff0e;词法分析------flex 使用词法分析器&#xff08;由Flex生成&#xff09;将 SQL 语句分解为一个个单词&#xff0c;这些单词被称为“标记“。标记包括关键字、标识符、运算符、分隔符等。 2.1 flex 原…

环保行业如何开发废品回收微信小程序

废品回收是近年来受到越来越多人关注的环保行动。为了推动废品回收的普及和方便&#xff0c;我们可以利用微信小程序进行制作&#xff0c;方便人们随时随地参与废品回收。 首先&#xff0c;我们需要注册并登录乔拓云账号&#xff0c;并进入后台。乔拓云是一个提供微信小程序制作…

CAS服务端入门使用实践

CAS服务端入门使用实践 一、前言 1.简介 CAS 是一个企业多语言单点登录解决方案&#xff0c;支持大量附加身份验证协议和功能&#xff0c;满足身份验证和授权需求的综合平台。 2.环境 Windows 10JDK 1.8git version 2.41.0.windows.3Tomcat 9.0.78Maven 3.5.3cas-overlay-…

SpringMVC的架构有什么优势?——视图与模型(二)

前言 「作者主页」&#xff1a;雪碧有白泡泡 「个人网站」&#xff1a;雪碧的个人网站 「推荐专栏」&#xff1a; ★java一站式服务 ★ ★ React从入门到精通★ ★前端炫酷代码分享 ★ ★ 从0到英雄&#xff0c;vue成神之路★ ★ uniapp-从构建到提升★ ★ 从0到英雄&#xff…

String(字符串)

1、String概述 java.lang.String类代表字符串&#xff0c;Java程序中的所有字符串文字&#xff08;例如“abc”&#xff09;都为此类的对象。 1.1、String的注意点 字符串的内容是不会发生改变的&#xff0c;它的对象在创建后不能被更改。 1.2、总结 String是Java定义好的一个类…

【计算机组成原理】24王道考研笔记——第四章 指令系统

第四章 指令系统 一、指令系统 指令是指示计算机执行某种操作的命令&#xff0c;是计算机运行的最小功能单位。一台计算机的所有指令的集合构成该 机的指令系统&#xff0c;也称为指令集。 指令格式&#xff1a; 1.1分类 按地址码数目分类&#xff1a; 按指令长度分类&…

c#在设计时调试自定义 Windows 窗体控件

private string demoStringValue null; [Browsable(true)] public string DemoString {get{return this.demoStringValue;}set{demoStringValue value;} } 参考链接 在设计时调试自定义控件 - Windows Forms .NET Framework | Microsoft Learnhttps://learn.microsoft.com/z…

小游戏扫雷实现教学(详解)

目录 【前言】 一、模块化程序设计&#xff08;多文件编程&#xff09;介绍 1.概述 2.传统编程的方式 3.模块化程序设计的方法 二、扫雷代码设计思路 三、扫雷代码设计 1.创建菜单函数 2.实现9x9扫雷 3.初始化棋盘 4.打印棋盘 5.随机布置雷的位置 6.排查雷的信息 7.回…