lvs服务器需要开启web服务么_LVS+Keepalived+Nginx+ web 四七层负载及高可用集群构建...

之前我们介绍了四层负载均衡LVS,七层负载均衡HAProxy 和 Nginx,以及keepalived,heartbeat 搭建高可用集群。今天我们就结合之前讲过的内容搭建一个四七层负载均衡(LVS+Nginx)以及高可用(keepalived)的集群。

你要知道现在公司一般的架构都是F5(LVS)+keepalived + nginx + app + DB。 那么为什么不用keepalived + nginx + app + DB 这种架构模式呢?

在keepalived+nginx的主备容灾高可用的架构中,nginx是作为外部访问系统的唯一入口,理论上一台nginx的最大并发量可以高达50000,但是当并发量更大的时候,keepalived+nginx的高可用机制是没办法满足需求的,因为keepalived+nginx的架构中确确实实是一台nginx在工作,只有当master宕机或异常的时候,备份机才会上位。那么如何解决更大的高并发问题呢,也许你会问能不能搭建nginx集群,直接对外提供访问?很显然这是欠妥当的,因为当nginx作为外部的唯一访问入口,没办法直接以集群的形式对外提供服务,没有那么多的公网ip资源可用,既太浪费也不友好。但是在内网环境下,是可以用nginx集群(nginx横向扩展服务集合)的,当然总得有一个对外入口,所以需要在nginx集群之上,在加一层负载均衡器LVS,作为系统的唯一入口。

废话不多说, 我们开始搭建LVS(DR模式)+Keepalived+Nginx+ web 集群吧。

首先我们看一下今天要搭建的集群的基本架构拓扑图, 便于你的理解:

00a899ee5a899936df7264116187461a.png

然后我们开始真正的集群构建。

一、准备工作

准备:至少6台虚拟机,用于测试。

(当然在实际工作环境中, nginx 服务器是可以横向扩展的, 你可以创建多台nginx服务器。web 服务器也是可以横向扩展的, 你可以创建多台web服务器。)

系统版本:CentOS 7

主机名IP作用
192.168.93.200虚拟IP(VIP)
lvskeepalived1192.168.93.100LVS+ Keepalived Master  (LVS将请求负载至nginx1 或者 nginx2)
lvskeepalived2192.168.93.101LVS+ Keepalived Backup  (lvskeepalived1的备机)
nginx1192.168.93.110Nginx1(将请求负载至后端web1 或者 web2)
nginx2192.168.93.111Nginx2(将请求负载至后端web1 或者 web2)
web1192.168.93.210Web1(静态web服务器)
web2192.168.93.211Web2(静态web服务器)

二、安装软件及配置

1. 在lvskeepalived1 和 lvskeepalived2 机器上面安装 ipvsadm 和 keepalived:

yum -y install ipvsadm keepalived

查看两台负载均衡机器是否支持lvs:

lsmod |grep ip_vs

6688507536058a9b332e713d3f0fb831.png

如果上述命令没有任何结果,则执行ipvsadm命令启动ipvs之后,再通过上述命令进行查看即可。

2. 在nginx1 和 nginx2 机器上面安装nginx

yum -y install nginx

3. 在web1 和 web2 上面安装apache

yum -y install httpd

配置网页: 

实际配置网页内容应该一样,但是为了演示nginx负载均衡效果,我们将网页内容一个配置成web1, 一个配置成web2。

#在web1配置如下:cd /var/www/htmlecho "web1" > index.htmlsystemctl restart httpd#在web2配置如下:cd /var/www/htmlecho "web2" > index.htmlsystemctl restart httpd

4. 配置keepalived

1) 在lvskeepalived1也就是master 机器上面配置:

vim /etc/keepalived/keepalived.conf# Global Configurationglobal_defs {lvs_id director1  # 指定lvs的id}# VRRP Configurationvrrp_instance LVS {state MASTER    # 指定当前节点为master节点interface ens33    # 这里是网卡的名称,通过ifconfig或者ip addr可以查看virtual_router_id 51    # 这里指定的是虚拟路由id,master节点和backup节点需要指定一样的priority 151    # 指定了当前节点的优先级,数值越大优先级越高,master节点要高于backup节点advert_int 1    # 指定发送VRRP通告的间隔,单位是秒authentication {auth_type PASS    # 鉴权,默认通过auth_pass 123456    # 鉴权访问密码}virtual_ipaddress {192.168.93.200    # 指定了虚拟ip}}# Virtual Server Configuration - for www server# 后台真实主机的配置virtual_server 192.168.93.200 80 {delay_loop 1    # 健康检查的时间间隔lb_algo rr    # 负载均衡策略,这里是轮询lb_kind DR    # 调度器类型,这里是DRpersistence_time 1    # 指定了持续将请求打到同一台真实主机的时间长度protocol TCP    # 指定了访问后台真实主机的协议类型  # Real Server 1 configuration  # 指定了真实主机1的ip和端口 , 也就是Nginx1的IP和端口real_server 192.168.93.110 80 {weight 1    # 指定了当前主机的权重TCP_CHECK {connection_timeout 10    # 指定了进行心跳检查的超时时间nb_get_retry 3    # 指定了心跳超时之后的重复次数delay_before_retry 3    # 指定了在尝试之前延迟多长时间}}  # Real Server 2 Configuration  # 指定了真实主机2的ip和端口 , 也就是Nginx2的IP和端口real_server 192.168.93.111 80 {weight 1    # 指定了当前主机的权重TCP_CHECK {connection_timeout 10    # 指定了进行心跳检查的超时时间nb_get_retry 3    # 指定了心跳超时之后的重复次数delay_before_retry 3    # 指定了在尝试之前延迟多长时间}}}

2)在lvskeepalived2也就是backup 机器上面配置keepalived:

只和master 有以下三处不同:

lvs_id director1 改成 lvs_id director2

state MASTER 改成 state BACKUP

priority 151 改成 priority 101

vim /etc/keepalived/keepalived.conf# Global Configurationglobal_defs {lvs_id director2  # 指定lvs的id}# VRRP Configurationvrrp_instance LVS {state BACKUP # 指定当前节点为master节点interface ens33    # 这里是网卡的名称,通过ifconfig或者ip addr可以查看  virtual_router_id 101    # 这里指定的是虚拟路由id,master节点和backup节点需要指定一样的priority 101    # 指定了当前节点的优先级,数值越大优先级越高,master节点要高于backup节点advert_int 1    # 指定发送VRRP通告的间隔,单位是秒authentication {auth_type PASS    # 鉴权,默认通过auth_pass 123456    # 鉴权访问密码}virtual_ipaddress {192.168.93.200    # 指定了虚拟ip}}# Virtual Server Configuration - for www server# 后台真实主机的配置virtual_server 192.168.93.200 80 {delay_loop 1    # 健康检查的时间间隔lb_algo rr    # 负载均衡策略,这里是轮询lb_kind DR    # 调度器类型,这里是DRpersistence_time 1    # 指定了持续将请求打到同一台真实主机的时间长度protocol TCP    # 指定了访问后台真实主机的协议类型  # Real Server 1 configuration  # 指定了真实主机1的ip和端口 , 也就是Nginx1的IP和端口real_server 192.168.93.110 80 {weight 1    # 指定了当前主机的权重TCP_CHECK {connection_timeout 10    # 指定了进行心跳检查的超时时间nb_get_retry 3    # 指定了心跳超时之后的重复次数delay_before_retry 3    # 指定了在尝试之前延迟多长时间}}  # Real Server 2 Configuration  # 指定了真实主机2的ip和端口 , 也就是Nginx2的IP和端口real_server 192.168.93.111 80 {weight 1    # 指定了当前主机的权重TCP_CHECK {connection_timeout 10    # 指定了进行心跳检查的超时时间nb_get_retry 3    # 指定了心跳超时之后的重复次数delay_before_retry 3    # 指定了在尝试之前延迟多长时间}}}

5. 配置Nginx

1)在nginx1 和 nginx2 机器上面配置负载均衡:(两台机器一模一样的配置)

实现将访问本机80端口的请求轮询定向到后端的两台apache服务器:

我们这里只演示两台apache web 服务器, 你也可以配置多台。

vim /etc/nginx/nginx.confuser nginx;worker_processes auto;error_log /var/log/nginx/error.log;pid /run/nginx.pid;include /usr/share/nginx/modules/*.conf;events {worker_connections 1024;}http {log_format  main  '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';access_log  /var/log/nginx/access.log  main;sendfile            on;tcp_nopush          on;tcp_nodelay         on;keepalive_timeout   65;types_hash_max_size 2048;include             /etc/nginx/mime.types;default_type        application/octet-stream;# Load modular configuration files from the /etc/nginx/conf.d directory.# See http://nginx.org/en/docs/ngx_core_module.html#include# for more information.include /etc/nginx/conf.d/*.conf;upstream serverList {server 192.168.93.210:80;  #web server1,后端真实服务器server 192.168.93.211:80;  #web server2,后端真实服务器    }server {listen 80;#server_name  localhost; # server_name:是客户端请求的域名地址#root   html;#index  index.html index.htm index.php;location / {proxy_pass  http://serverList; # 指向负载的列表的模块,如serverListproxy_redirect     off;proxy_set_header   Host             $host;    }    }}

2)在nginx1 和 nginx2 机器上面配置虚拟IP: (两台nginx机器, 一模一样的配置)

因为我们使用的lvs调度器是DR模式,前面我们讲到过,这种模式下,对客户端的响应是真实服务器直接返回给客户端的,而真实服务器需要将响应报文中的源ip修改为虚拟ip,这里配置的虚拟ip就是起这个作用的。我们编辑/etc/init.d/lvsrs文件,写入如下内容:

[root@nginx1 nginx]# cd /etc/init.d/[root@nginx1 init.d]# vim lvsrs#虚拟的vip 根据自己的实际情况定义SNS_VIP=192.168.93.200/etc/rc.d/init.d/functionscase "$1" instart)       ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP       /sbin/route add -host $SNS_VIP dev lo:0       echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore       echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce       echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore       echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce       sysctl -p >/dev/null 2>&1       echo "RealServer Start OK"       ;;stop)       ifconfig lo:0 down       route del $SNS_VIP >/dev/null 2>&1       echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore       echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce       echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore       echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce       echo "RealServer Stoped"       ;;*)       echo "Usage: $0 {start|stop}"       exit 1esacexit 0

然后更改脚本权限并执行脚本:(两台nginx机器都要执行)

[root@nginx1 init.d]# chmod 755 lvsrs[root@nginx1 init.d]# ./lvsrs start

ec7cae20d19e5c927ee55c9531ba8e54.png

b84966b50f28c787784ef2822031af26.png

查看ip lo:0 和路由是否添加成功:

058e6f86f24eeaa3a22027b76709ec1e.png

fe63fbf4d0ed8c69d5e77b9d3b48e77e.png

77a06f0879afd52fed06b19ec0568a52.png

4ea1e1054a4e3e88acfc653ae3c621c9.png

如果可以看到上述结果,证明 lo:0和路由都已经配置成功。

三、测试

1. 启动Nginx 服务, 验证Nginx负载功能

systemctl start nginxsystemctl enable nginx

测试分别访问nginx1和nginx2的网页, 可以看到请求轮询定向到后端的两台web服务器上, 所以Nginx 负载功能验证成功。 

while [ TRUR ]; do curl http://192.168.93.110:80; sleep 2 ; done

739edac2c9d1206939187831b88d514f.png

while [ TRUR ]; do curl http://192.168.93.111:80; sleep 2 ; done

5aef7e1dfc7c0d7ed63e6bccef3e819c.png

2. 启动keepalived

在lvskeepalived1 和 lvskeepalived2 服务器上启动keepalived.

systemctl start keepalivedsystemctl enable keepalived

过几秒后可以看到VIP(192.168.93.200) 在master 机器上面:

5a8ad87717edb509b196d7ecaaf1d5b5.png

2ffb1d6b822065dc985655393b7d0578.png

通过VIP访问网页:

b3d92a5d033f8427c4690642fc6812f1.png

b58360e58b9471f9964513c049177c7d.png

访问成功, 可见LVS 成功将请求转发到了后端web server 上。

3. KeepAlived高可用测试

  • 停掉主keepalived:

190813ea4ffe809a59e694c3d75e48fb.png

vip漂移至备服务器:

5dd381a9ccb17353c0387791f5ad7183.png

此时网页访问:192.168.93.200依然能够正常访问,分发依然正常:

68d0f955b556d9a53166060cc3b9af87.png

ff28976ec976c58031a9a3309af2c2cd.png

  • 重启主keepalived

主服务恢复之后;vip又会自动漂移回主服务

45ac0fdce3bdade0677f8696dfebff4f.png

至此, keepalived 高可用验证成功。 

4. LVS监控真实服务测试
  • 查看最新的虚拟ip对应的RealServer的情况

VIP:192.168.93.200

Realserver1 IP: 192.168.93.110

Realserver2 IP: 192.168.93.111

a2f0cdd2c8ebf05c664ea6b519380981.png

可以看出192.168.93.110和192.168.93.111两台真实服务器都还在

  • 访问VIP并使用ipvsadm -lnc查看请求转发情况

看到lvs将请求转发到110 和 111 两台真实服务器上:

c4d1bb12948e385dbc0cbb289d0917b6.png

  • 测试停掉192.168.93.110的nginx 服务

4ae159860b278952d644c4a93629140a.png

  • 再次查看虚拟ip对应的RealServer的情况

可以看出192.168.93.110这台已经挂掉的服务器已经被移除了

9c043a7d128021e8a70e34bc542154be.png

  • 测试访问虚拟ip

18d0192eb1111b7b1bce38d88dd52b82.png

可以看到网页访问正常。

使用ipvsadm -lnc 查看请求转发情况: 

可以看到所有的访问都只会转发到192.168.93.111的真实服务器上

0608a2f913caed5d26a54041c7ec2c66.png

  • 恢复192.168.93.110

lvs又会自动监控并加入192.168.93.110

78da12edd3c8ef4427f958e480cc56a1.png

d071eba1e9e44026d5d26e4cbee415e7.png

至此,验证了LVS 可以监控真实服务器的服务的状态。 

通过验证, 我们今天的LVS+Keepalived+Nginx+ web 集群搭建成功!

那么今天我们就先介绍到这里,之后会继续更新MySQL集群的内容。敬请关注!

往期精选

高可用篇之Heartbeat(Heartbeat+HAProxy搭建高可用负载均衡集群)

高可用篇之Keepalived (HAProxy+keepalived 搭建高可用负载均衡集群)

HAProxy负载均衡器用法详解

Linux 集群总结 + LVS(负载均衡器)原理及配置

Nginx可以做什么? 看完这篇你就懂了!

希望此文对大家有所帮助,也希望大家持续关注转载。关注公众号获取相关资料请回复:typescript,springcloud,springboot,nodejs,nginx,mq,javaweb,java并发实战,java并发高级进阶,实战java并发,极客时间dubbo,kafka,java面试题,ES,zookeeper,java入门到精通,区块链,java优质视频,大数据,kotlin,瞬间之美,HTML与CSS,深入体验java开发,web开发CSS系列,javaweb开发详解,springmvc,java并发编程,spring源码,python,go,redis,docker,即获取相关资料。回复001,获取价值1w的课程视频,需要其他视频可以联系小编

e9a43e8f3fcbf972bfad19170a73e761.gif

fda43f936c8feb879ccd74526578567e.png

长按二维码

关注我们

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值