前言:初期应用较小,一般以单机部署为主,即可满足业务的需求,随着业务的不断扩大,单机部署的模式无法承载这么大的业务量,需要进行服务集群化的部署,本文主要介绍服务器Tomcat多实例部署,搭载Keepalived + Nginx,实现Web服务的高可用。

Nginx 是一个高性能的 HTTP反向代理服务器Keepalived 是一个基于VRRP协议来实现的服务高可用方案,可以利用其来避免服务的单点故障

Nginx作为反向代理服务器,来提供负载均衡的能力,使我们的Web服务器,能够水平扩容,这时反向代理服务器(Nginx)又变成了一个单点,如果挂掉,整合Web服务器就不能被外界访问到;所以需要结合Keepalived来保障反向代理服务器(Nginx)的高可用;

环境准备

CentOS7系统

Keepalived-2.0.15

Nginx-1.14.2

Tomcat8

准备2台服务器,每台上部署安装Nginx+Keepalived和Tomcat,另外一个VIP(虚拟IP);这里省略了2台,这样在实际模拟中方便演练(Tomcat不单独部署在一台服务器而已)

1、Nginx的安装

2、Keepalived的安装

3、配置Keepalived + Nginx,实现高可用

准备的2台服务器上,一台作为MASTER,一台作为BACKUP;每台上需要准备文件如下图

执行如下的约定,上面安装脚本也是按照这个执行的

1. keepalived 和 nginx 都编译安装到/usr/local目录下面,名称分别是keepalived 和 nginx

2. ck_ng.sh、 keepalived.conf 文件放置到/etc/keepalived/目录, ck_ng.sh文件权限设置成755

3. nginx.service、 keepalived.service 文件放置到/usr/lib/systemd/system目录

3.1、MASTER配置

keepalived.conf配置

global_defs { #notification_email { # localhost@163.com #} #notification_email_from Keepalived@localhost #smtp_server 163@smtp.com #smtp_connect_timeout 30 router_id 192.168.1.101 #MASTER服务器的IP地址}#配置vrrp_script,主要用于健康检查,以及检查失败后执行的动作。vrrp_script chk_nginx { #健康检查脚本,当脚本返回值不为0时认为失败 script "/etc/keepalived/ck_ng.sh" #检查频率,以下配置每2秒检查1次 interval 2 #当检查失败后,将vrrp_instance的priority减小5 weight -5 #连续监测失败3次,才认为真的健康检查失败。并调整优先级 fall 3 #连续监测2次成功,就认为成功。但不调整优先级 rise 2}#定义对外提供服务的VIP vrrp_instance配置vrrp_instance VI_1 { #指定vrrp_instance的初始状态,是MASTER还是BackUP主要还是看优先级。 state MASTER #指定vrrp_instance绑定的网卡,最终会通过指定的网卡宣告VIP interface ifcfg-eth0 #发送心跳包的源IP,可使用绑定的网卡IP,也可以使用本服务器上的其他IP mcast_src_ip 192.168.1.101 #相当于VRID,用于在一个网内区分组播,需要组播域内内唯一。 virtual_router_id 55 #本机的优先级,VRID相同的机器中,优先级最高的会被选举为MASTER priority 100 #心跳间隔,下面配置,MASTER会每隔1秒发送一个报文高职组内其他机器,自己还活着。 advert_int 1 #定义主从的验证方式以及密码,一般使用PASS(最长8位,超过了只会识别前8位作为密码) authentication { auth_type PASS auth_pass 123456 } #VIP 虚拟 IP 池, 两个节点设置必须一样  virtual_ipaddress {192.168.1.100/24 } #本vrrp_instance所引用的脚本配置,名称就是vrrp_script 定义的容器名 track_script { chk_nginx }  #状态切换,使用上述配置发送邮件通知 smtp_alert}

ck_ng.sh配置

keepalived.service配置

nginx.service配置

3.2、BACKUP配置

keepalived.conf配置(和MASTER类似,列出差异的地方)

global_defs { router_id 192.168.1.102}#定义对外提供服务的VIP vrrp_instance配置vrrp_instance VI_1 { #指定vrrp_instance的初始状态,是MASTER还是BackUP主要还是看优先级。 state BACKUP #发送心跳包的源IP,可使用绑定的网卡IP,也可以使用本服务器上的其他IP mcast_src_ip 192.168.1.102 #本机的优先级,VRID相同的机器中,优先级最高的会被选举为MASTER priority 99} 

ck_ng.sh配置(和MASTER一致)

keepalived.service配置(和MASTER一致)

nginx.service配置(和MASTER一致)

3.3、Tomcat服务通过反向代理Nginx对外提供服务

Tomcat的安装和应用部署不再具体描述,主要看一下如何通过Nginx的配置实现对外服务(两个Nginx都通过这样的配置来完成)

nginx.conf配置

# upstream configure upstream myapp { ip_hash; server 192.168.1.101:8080; #Tomcat的应用 server 192.168.1.102:8080; #Tomcat的应用}server { listen 8888; #假设对外提供的服务端口 server_name localhost; port_in_redirect on;  location /app1 #Tomcat下的一个应用 { proxy_pass http://myapp/app1; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host:$server_port; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location /app2 #Tomcat下的另外一个应用 { proxy_pass http://myapp/app2; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host:$server_port; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location / { proxy_pass http://myapp; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host:$server_port; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }

通过以上的搭建,可以实现高可用、负载均衡 集群部署方案。

keepalive+nginx实现负载均衡高可用_高可用、负载均衡 集群部署方案:Keepalived + Nginx + Tomcat...相关推荐

  1. 技术干货实战(4)- 分布式集群部署模式下Nginx如何实现用户登录Session共享(含详细配置与代码实战)

    原文链接:技术干货实战(4)- 分布式集群部署模式下Nginx如何实现用户登录Session共享(含详细配置与代码实战) 最近有小伙伴催更,让debug多写点技术干货,以便多学习.巩固一些技能:没办法 ...

  2. Nginx集群部署方案

    工作需要,记录一下 一.Nginx安装 集群部署需要在主服务器安装Nginx服务,以下为安装步骤: 1.访问Nginx官网(http://nginx.org/en/download.html),下载N ...

  3. 使用sqlserver搭建高可用双机热备的Quartz集群部署

    一般拿 Timer 和 Quartz 相比较的,简直就是对 Quartz 的侮辱,两者的功能根本就不在一个层级上,如本篇介绍的Quartz强大的集群机制,可以采用基于sqlserver,mysql的集 ...

  4. 使用sqlserver搭建高可用双机热备的Quartz集群部署【附源码】

    一般拿Timer和Quartz相比较的,简直就是对Quartz的侮辱,两者的功能根本就不在一个层级上,如本篇介绍的Quartz强大的集群机制,可以采用基于 sqlserver,mysql的集群方案,当 ...

  5. flume数据采集_大数据采集系统Flume集群部署

    集群规划 Flume集群,负载均衡和故障转移模式,笔者准备了3台机器安装了flume,其中webapp200是应用服务器,flume安装在这里,目的是收集应用服务器上的日志,通过2个avro sink ...

  6. 高可用 kubernetes 集群部署实践

    前言 Kubernetes(k8s) 凭借着其优良的架构,灵活的扩展能力,丰富的应用编排模型,成为了容器编排领域的事实标准.越来越多的企业拥抱这一趋势,选择 k8s 作为容器化应用的基础设施,逐渐将自 ...

  7. 【有料】4 种高可用 RocketMQ 集群搭建方案!

    背景 笔者所在的业务线,最初化分为三个服务,由于业务初期业务复杂度相对简单,三个业务服务都能很好的独立完成业务功能. 随着产品迭代,业务功能越来越多后慢慢也要面对高并发.业务解耦.分布式事务等问题,所 ...

  8. keepalive+nginx高可用K8S集群部署

    1.准备工作 1.1集群部署规划 K8S集群角色 节点IP 节点名称 OS 控制节点 192.168.0.180 k8smaster1 Centos7.9 控制节点 192.168.0.181 k8s ...

  9. CGB2005 JT7-8(文件 图片上传 uuid生成文件名 静态代码块,反向代理,Nginx,Host文件,tomact集群实现项目发布 ,nginx负载均衡种类)

    注意事项 1.京淘文件上传 文件上传api 京淘图片上传 利用静态代码块赋值 图片上传优化(动态赋值) uuid去掉横线 2.反向代理机制(正向反向代理说明) nginx学习 nginx实现反向代理 ...

最新文章

  1. 安卓手机上 js不能控制微信浏览器强制刷新页面
  2. 【BZOJ】4873: [Shoi2017]寿司餐厅
  3. Leetcode1685. 有序数组中差绝对值之和[C++题解]:前缀和和差的绝对值之和
  4. 【找规律】HDU 4662——MU Puzzle
  5. php 原生文件下载
  6. 内蒙古大学计算机组成原理实验,内蒙古大学计算机组成原理期末练习0
  7. 看完就入门系列!吞吐量、消息持久化、负载均衡和持久化、伸缩性…… 你真的了解 Kafka 了吗?...
  8. 【技术文档】JEECG 页面字典控件与Popup使用
  9. linux上的 heartbeat 双机热备服务架设
  10. Web UI自动化测试之元素定位
  11. AVI视频怎么转换成MOV视频
  12. android 手机地图
  13. JSP SSH公车拍卖系统myeclipse开发mysql数据库bs框架java编程网结构详细设计
  14. 电脑鼠标右键应用卡死、转圈圈、资源管理器关闭等问题
  15. 计算机制图符号制作,基本流程图的制作-通过在线制图工具绘制
  16. java的前端还是后端_java语言是开发前端还是后端的
  17. QT 管理win系统服务
  18. 青龙毛毛快手极速版0407修复版
  19. GPS定位经纬度标准转换
  20. IP签名档PHP开源版:轻松打造网站个性签名档

热门文章

  1. 强制好评,付费去广告,诈骗应用横行AppStore
  2. 混合现实平台 Mesh、云服务能力翻倍扩容、福利 150 万人……Ignite China 精彩盘点...
  3. 一图看尽编程语言十年热度变化!
  4. 用 Python 轻松搞定 Excel 中的 20 个常用操作
  5. AI ProCon 2020 圆满落幕,百位专家与万名开发者共同拉开人工智能新篇章
  6. 到底什么是“云网融合”?
  7. Python 爬取考研数据:所有 985 高校、六成 211 高校均可调剂!
  8. 2020 年,Android 还有哪些新期待?
  9. 开发者该如何进行小程序技术选型?
  10. 一图看懂 Python 2 / Python 3 编码 | CSDN 博文精选