架构系列三:使用Keepalived+Nginx+tomcat实现集群部署
架构系列三:使用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实现集群部署相关推荐
- 架构系列二:使用Nginx+tomcat实现集群部署
架构系列二:使用Nginx+tomcat实现集群部署 一.环境介绍 VM1:Ubuntu-S100 IP:192.168.130.128 部署Tomcat应用及Nginx VM2:Ubuntu-S ...
- windows下nginx+tomcat分布式集群部署
首先官网下载 http://nginx.org/en/download.html,我的本地环境为 实现的架构: 从图上可以看出,nginx作为负载均衡请求分发器,当请求A应用时候,分发到A集群,同理 ...
- Nginx+Tomcat搭建集群环境
Nginx+Tomcat搭建集群环境 ZeroOne01关注0人评论33534人阅读2018-05-05 14:15:39 集群概述与架构介绍 Tomcat集群能带来什么: 提高服务的性能,例如计算处 ...
- 图文解说:Nginx+tomcat配置集群负载均衡
图文解说:Nginx+tomcat配置集群负载均衡 博客分类: appserver nginxTomcatUbuntuLinux网络应用 作者:niumd Blog:http://ari.iteye ...
- 集群(三)——haproxy+nginx搭建web集群
集群(三)--haproxy+nginx搭建web集群 一.Haproxy 前言 二.Haproxy 简介 1.常见的web集群调度器 2.Haproxy应用分析 3.Haproxy高性能负载均衡的主 ...
- Nginx+Tomcat+Memcached集群 【测试成功】
Nginx+Tomcat+Memcached集群 Tomcat集群session同步方案有以下几种方式: 使用tomcat自带的cluster方式,多个tomcat间自动实时复制session信息,配 ...
- nginx+tomcat实现集群负载均衡(实现session复制)
架构描述 前端一台nginx服务器做负载均衡器,后端放N台tomcat组成集群处理服务,通过nginx转发到后面(注:没做动静分离,静态动态全部都转给tomcat) 优点:实现了可弹性化的架构,在压力 ...
- Tomcat集群快速入门:Nginx+Tomcat搭建集群
参数的一些扩展点,那刚刚讲的一些负载均衡策略,都是实际企业当中常用的,负载均衡策略,领着大家分析了优缺点,希望大家好好体会,百分之一百的吸收,那我们现在把这些参数和扩展的点呢,放到一个配置里,一起来给 ...
- Linux下nginx+tomcat+memcached集群
为什么80%的码农都做不了架构师?>>> 集群分为横向集群和纵向集群(纵向意思就是在一台服务器上 横向就是多台服务器 就这么个意思) 一.软件版本 nginx-0.7.65 a ...
最新文章
- 显示部分数据标签_长春市农贸市场监测数据显示:粮油和水果价格平稳,部分副食品价格小幅波动...
- python打开.data_DataX初体验-python命令启动以及纯java启动
- 5.6亿人没有存款、人均负债13万,大数据揭示负债累累的年轻人
- ibm websphere oracle weblogic,对比平台--WebLogic与WebSphere之间的区别
- php红色风格,PHP理财版PC+WAP安装包(红色风格+蓝色风格)
- 浏览器下载文件时一共发送2次请求,如何把“下载次数”只记录为1次?
- java spring 多数据源_Spring多数据源解决方案
- mysql数据库访问程序_c++程序访问MySQL数据库操作示例
- VISSIM二次开发(Python)大作业总结1
- 清除Tomcat日志
- Word转PDF后,排版错乱怎么办?
- java 杨辉三角_Java语言杨辉三角
- 腹肌锻炼视频(02):八种基本动作
- 《Python自然语言处理》——第1章 语言处理与Python 1.1 语言计算:文本和词汇...
- 最强文件搜索神器——Everything
- Linux学习——废旧电脑再利用Ubuntu部署私有云Nextcloud
- Java Web学习日记(一)
- 《云计算》SELinux安全防护(案例)
- 浅谈超融合一体机-即买即用的企业级私有云
- (附源码)ssm失物招领系统 毕业设计 182317
热门文章
- mysql datatype 类型_MySQL DataType--数值类型
- 多目标函数 matlab 粒子群_【LIBSVM】基于群智能优化算法的支持向量机 (SVM) 参数优化...
- 深入理解ARM体系架构(S3C6410)---lcd 显示图片
- STM32 FSMC/FMC原理保姆级讲解(二)
- GitHub使用入门讲解--官方文档翻译让你最真实了解
- oracle无效的存储过程怎么解决,oracle数据库 编译无效存储过程
- java获取上一天数据,java获取日历格式的日期数据
- oracle 批量杀死 死锁进程
- Linux防火墙iptables的策略
- Redis锁的简单应用