架构系列三:使用Keepalived+Nginx+tomcat实现集群部署

介绍了通过Nginx配置Tomct集群,当其中一个Tomcat服务停止后,Nginx可自动识别并选择另一个服务器响应用户请求,达到了Tomcat集群的效果,那如果Nginx服务器停掉后,就会导致整个应用不可用,因此引入了keepalived,通过keepalived配置Nginx集群,保证Nginx的高可用性。

一、环境介绍
VM1:Ubuntu-S100 IP:192.168.130.128
VM2:Ubuntu-S101 IP:192.168.130.129
物理机:192.168.1.101 用于作客户端
JDK:1.8.0_171
Tomcat:apache-tomcat-7.0.62
Keepalived:

二、集群架构图
先看下引入keepalived后的集群架构图

我在两台VM上都安装了Nginx及Keepalived,一台作Master,另一台作Backup,同时在VM上还部署了Web应用,要实现的场景是,当Master不工作后,作为Backup的这台Nginx接替原来Master的工作,继续提供服务,保证应用的高可用

三、在VM2上安装Nginx
安装nginx就不介绍了,请参考《架构系列二:使用Nginx+tomcat实现集群部署》

安装完成后,进入到nginx安装目录/usr/local/nginx/sbin,进行sudo ./nginx -t检查nginx是否安装成功,如果出现如下结果,说明nginx已经安装成功

ubuntu@ubuntu-virtual-machine:/usr/local/nginx/sbin$ sudo ./nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

动Nginx服务并校验

#启动nginx服务
ubuntu@ubuntu-virtual-machine:/usr/local/nginx/sbin$ sudo ./nginx
#检查nginx启动进程,发现启动了两个进程,一个master,一个worker
ubuntu@ubuntu-virtual-machine:/usr/local/nginx/sbin$ ps -ef | grep nginx
root     109164   8174  0 16:27 ?        00:00:00 nginx: master process ./nginx
nobody   109165 109164  0 16:27 ?        00:00:00 nginx: worker process
ubuntu   109245 101144  0 16:34 pts/4    00:00:00 grep --color=auto nginx

在浏览器中输入IP地址,校检nginx服务是否成功启动,如下结果说明Nginx服务已经启动成功

四、配置VM2上的Nginx+Tomcat集群
进入安装路径/usr/local/nginx/conf编辑nginx.conf文件,内容如下

#user  nobody;
worker_processes  1;
events {worker_connections  1024;
}
http {include       mime.types;default_type  application/octet-stream;sendfile        on;#tcp_nopush     on;#keepalive_timeout  0;keepalive_timeout  65;#gzip  on;upstream myserver{server 192.168.130.129:8080 weight=5 max_fails=2;server 192.168.130.128:8080 weight=1 max_fails=2;}server {listen       80;#监听80端口server_name  myserver;#charset koi8-r;#access_log  logs/host.access.log  main;location / {root   html;index  index.html index.htm;proxy_pass http://myserver; #这里的myserver必须要和upstream中指定的一致#proxy_redirect on;proxy_next_upstream http_502 http_504 http_404 error timeout invalid_header;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}}
}

重新检查并加载配置文件

ubuntu@ubuntu-virtual-machine:/usr/local/nginx/sbin$ sudo ./nginx -t
ubuntu@ubuntu-virtual-machine:/usr/local/nginx/sbin$ sudo ./nginx -s reload

由于我用的域名访问,因此还需要修改hosts文件,在/etc/hosts中增加如下记录

#192.168.130.129是当前VM2的IP
192.168.130.129 myserver

五、在VM1、VM2上安装Keepalived
登录http://www.keepalived.org/download.html,下载keepalived安装包,这里下载的是keepalived-1.4.5.tar.gz,先在VM1上安装keepalived
解压keepalived-1.4.5.tar.gz,得到keepalived-1.4.5目录

tar -xf keepalived-1.4.5.tar.gz

进入到keepalived-1.4.5目录下,执行如下命令安装keepalived

cd keepalived-1.4.5/
# 配置,指定安装目录
./configure --prefix=/usr/local/keepalived-1.4.5
# 编译nginx
sudo make
# 安装nginx
sudo make install

为了将keepalived做成系统服务,需要拷贝一些文件到指定的路径下,如下:

sudo mkdir /etc/sysconfigsudo cp /usr/local/keepalived-1.4.5/etc/sysconfig/keepalived  /etc/sysconfig/sudo cp /usr/local/keepalived-1.4.5/sbin/keepalived /usr/sbin/#注意这里是copy源码包中的文件,不是在安装目录的,这是一个启动keepalived服务的脚本,以守护进程方式运行
#Startup script for the Keepalived daemon
sudo cp /home/ubuntu/dev_tools/keepalived-1.4.5/keepalived/etc/init.d/keepalived  /etc/init.d/sudo mkdir /etc/keepalivedsudo cp /usr/local/keepalived-1.4.5/etc/keepalived/keepalived.conf /etc/keepalived/

注意,经过以上步骤后,keepalived的配置文件是/etc/keepalived/keepalived.conf,keepalived启动时,默认会读这个配置文件

在/usr/local/keepalived-1.4.5/bin目录下创建check_nginx.sh脚本文件,用于检测nginx的状态,脚本内容如下

#!/bin/sh
if [ $(ps -C nginx --no-header | wc -l) -eq 0 ]; then/usr/local/nginx/sbin/nginx
fisleep 2
if [ $(ps -C nginx --no-header | wc -l) -eq 0 ]; thenservice keepalived stop
fi

解释下上面脚本
1.统计nginx的进程,如果数量为0,则认为nginx没有启动,就启动nginx服务
2.等待2秒,再次统计nginx进程,如果数量还是0,则停止keepalived服务

配置VM1为Master
先看下VM1上的网卡信息

ubuntu@ubuntu-virtual-machine:~$ ifconfig
ens33     Link encap:以太网  硬件地址 00:0c:29:88:a0:46  inet 地址:192.168.130.128  广播:192.168.130.255  掩码:255.255.255.0inet6 地址: fe80::414b:266b:ba4f:57e9/64 Scope:LinkUP BROADCAST RUNNING MULTICAST  MTU:1500  跃点数:1接收数据包:519535 错误:0 丢弃:0 过载:0 帧数:0发送数据包:128982 错误:0 丢弃:0 过载:0 载波:0碰撞:0 发送队列长度:1000 接收字节:752557831 (752.5 MB)  发送字节:9951982 (9.9 MB)

发现VM的网卡设备是ens33,这个参数在配置keepalived.conf文件时要用到,下面开始修改配置文件/etc/keepalived/keepalived.conf,最终配置如下

! Configuration File for keepalived
# global setting , notify email setting
global_defs {#存在于同一个网段中,一组keepalived的各个节点都有不同的名字#在全局设置中,我们还可以设置管理员的email信息等。router_id LVS_V1
}#这个上面介绍的检查脚本,我们保存在这个文件中(注意文件权限)
vrrp_script chknginx {script "/usr/local/keepalived-1.4.5/bin/check_nginx.sh"#每2秒钟,检查一次interval 2
}#keepalived实例设置,是最重要的设置信息
vrrp_instance VI_1 {#state状态MASTER表示是主要工作节点。#一个keepalived组中,最多只有一个MASTER节点,当然也可以没有state MASTER#实例所绑定的网卡设备interface ens33#同一个keepalived组,节点的设置必须一样,这样才会被识别virtual_router_id 52#节点优先级,BACKUP的优先级一定要比MASTER的优先级低priority 100#组播信息发送间隔,两个节点设置必须一样advert_int 1#实际的ens33上的固定ip地址mcast_src_ip=192.168.130.128#验证信息,只有验证信息相同,才能被加入到一个组中。authentication {auth_type PASSauth_pass 1111}#虚拟地址和绑定的端口,如果有多个,就绑定多个#dev 是指定浮动IP要绑定的网卡设备号virtual_ipaddress {192.168.130.100 dev ens33}#设置的检查脚本#关联上方的“vrrp_script chknginx”track_script {chknginx}
}

按以上步骤,在VM2上安装keepalived,安装完成后配置VM2为backup
配置VM2为BACKUP
先看下VM2上的网卡信息

ubuntu@ubuntu-virtual-machine:/usr/local/keepalived-1.4.5/bin$ ifconfig
ens33     Link encap:以太网  硬件地址 00:0c:29:40:cf:6a  inet 地址:192.168.130.129  广播:192.168.130.255  掩码:255.255.255.0inet6 地址: fe80::37cf:3643:3082:32e/64 Scope:LinkUP BROADCAST RUNNING MULTICAST  MTU:1500  跃点数:1接收数据包:509261 错误:0 丢弃:0 过载:0 帧数:0发送数据包:152992 错误:0 丢弃:0 过载:0 载波:0碰撞:0 发送队列长度:1000 接收字节:747391907 (747.3 MB)  发送字节:10269294 (10.2 MB)

发现VM的网卡设备是ens33,这个参数在配置keepalived.conf文件时要用到,下面开始修改配置文件/etc/keepalived/keepalived.conf(这里将keepalived.conf文件作了下备份keepalived.conf.back),最终配置如下

! Configuration File for keepalived
# global setting , notify email setting
global_defs {#存在于同一个网段中,一组keepalived的各个节点都有不同的名字#在全局设置中,我们还可以设置管理员的email信息等。router_id LVS_V1
}#这个上面介绍的检查脚本,我们保存在这个文件中(注意文件权限)
vrrp_script chknginx {script "/usr/local/keepalived-1.4.5/bin/check_nginx.sh"#每2秒钟,检查一次interval 2
}#keepalived实例设置,是最重要的设置信息
vrrp_instance VI_1 {#这里和Master不一样state BACKUP#实例所绑定的网卡设备interface ens33#同一个keepalived组,节点的设置必须一样,这样才会被识别virtual_router_id 52#节点优先级,BACKUP的优先级一定要比MASTER的优先级低priority 99#组播信息发送间隔,两个节点设置必须一样advert_int 1#这里和Master不一样,是VM2的IPmcast_src_ip=192.168.130.129#验证信息,只有验证信息相同,才能被加入到一个组中。authentication {auth_type PASSauth_pass 1111}#虚拟地址和绑定的端口,如果有多个,就绑定多个#dev 是指定浮动IP要绑定的网卡设备号virtual_ipaddress {192.168.130.100 dev ens33}#设置的检查脚本#关联上方的“vrrp_script chknginx”track_script {chknginx}
}

启动VM1,VM2上的keepalived服务

#启动
service keepalived start
#停止
service keepalived stop

我们配置的绑定在VM1上的浮动IP:192.168.130.100,通过ifconfig是查看不到的,要通过ip addr 命令才能查看到

到此,keepalived配置nginx集群就已经配置完成

架构系列三:使用Keepalived+Nginx+tomcat实现集群部署相关推荐

  1. 架构系列二:使用Nginx+tomcat实现集群部署

    架构系列二:使用Nginx+tomcat实现集群部署 一.环境介绍  VM1:Ubuntu-S100 IP:192.168.130.128 部署Tomcat应用及Nginx  VM2:Ubuntu-S ...

  2. windows下nginx+tomcat分布式集群部署

    首先官网下载  http://nginx.org/en/download.html,我的本地环境为 实现的架构: 从图上可以看出,nginx作为负载均衡请求分发器,当请求A应用时候,分发到A集群,同理 ...

  3. Nginx+Tomcat搭建集群环境

    Nginx+Tomcat搭建集群环境 ZeroOne01关注0人评论33534人阅读2018-05-05 14:15:39 集群概述与架构介绍 Tomcat集群能带来什么: 提高服务的性能,例如计算处 ...

  4. 图文解说:Nginx+tomcat配置集群负载均衡

    图文解说:Nginx+tomcat配置集群负载均衡 博客分类: appserver nginxTomcatUbuntuLinux网络应用  作者:niumd Blog:http://ari.iteye ...

  5. 集群(三)——haproxy+nginx搭建web集群

    集群(三)--haproxy+nginx搭建web集群 一.Haproxy 前言 二.Haproxy 简介 1.常见的web集群调度器 2.Haproxy应用分析 3.Haproxy高性能负载均衡的主 ...

  6. Nginx+Tomcat+Memcached集群 【测试成功】

    Nginx+Tomcat+Memcached集群 Tomcat集群session同步方案有以下几种方式: 使用tomcat自带的cluster方式,多个tomcat间自动实时复制session信息,配 ...

  7. nginx+tomcat实现集群负载均衡(实现session复制)

    架构描述 前端一台nginx服务器做负载均衡器,后端放N台tomcat组成集群处理服务,通过nginx转发到后面(注:没做动静分离,静态动态全部都转给tomcat) 优点:实现了可弹性化的架构,在压力 ...

  8. Tomcat集群快速入门:Nginx+Tomcat搭建集群

    参数的一些扩展点,那刚刚讲的一些负载均衡策略,都是实际企业当中常用的,负载均衡策略,领着大家分析了优缺点,希望大家好好体会,百分之一百的吸收,那我们现在把这些参数和扩展的点呢,放到一个配置里,一起来给 ...

  9. Linux下nginx+tomcat+memcached集群

    为什么80%的码农都做不了架构师?>>>    集群分为横向集群和纵向集群(纵向意思就是在一台服务器上 横向就是多台服务器 就这么个意思) 一.软件版本 nginx-0.7.65 a ...

最新文章

  1. 显示部分数据标签_长春市农贸市场监测数据显示:粮油和水果价格平稳,部分副食品价格小幅波动...
  2. python打开.data_DataX初体验-python命令启动以及纯java启动
  3. 5.6亿人没有存款、人均负债13万,大数据揭示负债累累的年轻人
  4. ibm websphere oracle weblogic,对比平台--WebLogic与WebSphere之间的区别
  5. php红色风格,PHP理财版PC+WAP安装包(红色风格+蓝色风格)
  6. 浏览器下载文件时一共发送2次请求,如何把“下载次数”只记录为1次?
  7. java spring 多数据源_Spring多数据源解决方案
  8. mysql数据库访问程序_c++程序访问MySQL数据库操作示例
  9. VISSIM二次开发(Python)大作业总结1
  10. 清除Tomcat日志
  11. Word转PDF后,排版错乱怎么办?
  12. java 杨辉三角_Java语言杨辉三角
  13. 腹肌锻炼视频(02):八种基本动作
  14. 《Python自然语言处理》——第1章 语言处理与Python 1.1 语言计算:文本和词汇...
  15. 最强文件搜索神器——Everything
  16. Linux学习——废旧电脑再利用Ubuntu部署私有云Nextcloud
  17. Java Web学习日记(一)
  18. 《云计算》SELinux安全防护(案例)
  19. 浅谈超融合一体机-即买即用的企业级私有云
  20. (附源码)ssm失物招领系统 毕业设计 182317

热门文章

  1. mysql datatype 类型_MySQL DataType--数值类型
  2. 多目标函数 matlab 粒子群_【LIBSVM】基于群智能优化算法的支持向量机 (SVM) 参数优化...
  3. 深入理解ARM体系架构(S3C6410)---lcd 显示图片
  4. STM32 FSMC/FMC原理保姆级讲解(二)
  5. GitHub使用入门讲解--官方文档翻译让你最真实了解
  6. oracle无效的存储过程怎么解决,oracle数据库 编译无效存储过程
  7. java获取上一天数据,java获取日历格式的日期数据
  8. oracle 批量杀死 死锁进程
  9. Linux防火墙iptables的策略
  10. Redis锁的简单应用