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)

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

WEB集群——LVS-DR 群集、nginx负载均衡_第1张图片

首先,来自客户端计算机 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服务器1 192.168.186.103
web服务器2 192.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  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)客户端测试

WEB集群——LVS-DR 群集、nginx负载均衡_第2张图片

 (5)测试

 WEB集群——LVS-DR 群集、nginx负载均衡_第3张图片

WEB集群——LVS-DR 群集、nginx负载均衡_第4张图片

 二、nginx负载均衡

1、反向代理工作过程

WEB集群——LVS-DR 群集、nginx负载均衡_第5张图片

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

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

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

 2、反向代理服务配置

主机 IP地址
反向代理服务器 192.168.186.100
web服务器1 192.168.186.101
web服务器2 192.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

WEB集群——LVS-DR 群集、nginx负载均衡_第6张图片

 (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 文件,实现网站的域名访问

WEB集群——LVS-DR 群集、nginx负载均衡_第7张图片 

 (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、负载均衡

WEB集群——LVS-DR 群集、nginx负载均衡_第8张图片

       负载均衡( 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服务器1 192.168.186.101
web服务器2 192.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)测试

你可能感兴趣的:(前端,lvs,nginx)