Nginx+Keepalived+Tomcat 实现Web高可用集群

简介: Nginx+Keepalived+Tomcat 实现Web高可用集群

一、配置阿里yum源

1.进入yum配置路径下载阿里yum源

进入yun配置地址

cd /etc/yum.repos.d/

rm -rf *

2.下载阿里源

wget http://mirrors.aliyun.com/repo/Centos-7.repo

3.加载阿里yum源

yum clean all

yum makecache

yum update

二、Nginx的安装过程

1.下载Nginx安装包,安装依赖环境包

(1)安装 C++编译环境

yum  -y install gcc  #C++

(2)安装pcre

yum  -y install pcre-devel

(3)安装zlib

yum  -y install  zlib-devel

(4)安装Nginx

定位到nginx 解压文件位置,执行编译安装命令

[root@localhost nginx-1.12.2]# pwd

/usr/local/nginx/nginx-1.12.2

[root@localhost nginx-1.12.2]# ./configure  && make && make install

(5)启动Nginx

安装完成后先寻找那安装完成的目录位置

[root@localhost nginx-1.12.2]# whereis nginx

nginx: /usr/local/nginx

进入Nginx子目录sbin启动Nginx

[root@localhost sbin]# ./nginx &

[1] 5768

查看Nginx是否启动

(6)Nginx快捷启动和开机启动配置

编辑Nginx快捷启动脚本【注意Nginx安装路径,需要根据自己的NGINX路径进行改动】

[root@localhost init.d]# vim /etc/rc.d/init.d/nginx

#!/bin/sh

# nginx - this script starts and stops the nginx daemon

#

# chkconfig: - 85 15

# description: Nginx is an HTTP(S) server, HTTP(S) reverse \

# proxy and IMAP/POP3 proxy server

# processname: nginx

# config: /etc/nginx/nginx.conf

# config: /usr/local/nginx/conf/nginx.conf

# pidfile: /usr/local/nginx/logs/nginx.pid

# Source function library.

. /etc/rc.d/init.d/functions

# Source networking configuration.

. /etc/sysconfig/network

# Check that networking is up.

[ "$NETWORKING" = "no" ] && exit 0

nginx="/usr/local/nginx/sbin/nginx"

prog=$(basename $nginx)

NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf"

[ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx

lockfile=/var/lock/subsys/nginx

make_dirs() {

   # make required directories

   user=`$nginx -V 2>&1 | grep "configure arguments:" | sed 's/[^*]*--user=\([^ ]*\).*/\1/g' -`

   if [ -z "`grep $user /etc/passwd`" ]; then

   useradd -M -s /bin/nologin $user

   fi

   options=`$nginx -V 2>&1 | grep 'configure arguments:'`

   for opt in $options; do

   if [ `echo $opt | grep '.*-temp-path'` ]; then

   value=`echo $opt | cut -d "=" -f 2`

   if [ ! -d "$value" ]; then

   # echo "creating" $value

   mkdir -p $value && chown -R $user $value

   fi

   fi

   done

}

start() {

   [ -x $nginx ] || exit 5

   [ -f $NGINX_CONF_FILE ] || exit 6

   make_dirs

   echo -n $"Starting $prog: "

   daemon $nginx -c $NGINX_CONF_FILE

   retval=$?

   echo

   [ $retval -eq 0 ] && touch $lockfile

   return $retval

}

stop() {

   echo -n $"Stopping $prog: "

   killproc $prog -QUIT

   retval=$?

   echo

   [ $retval -eq 0 ] && rm -f $lockfile

   return $retval

}

restart() {

   #configtest || return $?

   stop

   sleep 1

   start

}

reload() {

   #configtest || return $?

   echo -n $"Reloading $prog: "

   killproc $nginx -HUP

   RETVAL=$?

   echo

}

force_reload() {

   restart

}

configtest() {

   $nginx -t -c $NGINX_CONF_FILE

}

rh_status() {

   status $prog

}

rh_status_q() {

   rh_status >/dev/null 2>&1

}

case "$1" in

start)

rh_status_q && exit 0

$1

;;

stop)

rh_status_q || exit 0

$1

;;

restart|configtest)

$1

;;

reload)

rh_status_q || exit 7

$1

;;

force-reload)

force_reload

;;

status)

rh_status

;;

condrestart|try-restart)

rh_status_q || exit 0

;;

*)

echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"

exit 2

esac

为启动脚本授权 并加入开机启动

[root@localhost init.d]# chmod -R 777 /etc/rc.d/init.d/nginx

[root@localhost init.d]# chkconfig  nginx

启动Nginx

[root@localhost init.d]# ./nginx start

将Nginx加入系统环境变量

[root@localhost init.d]# echo 'export PATH=$PATH:/usr/local/nginx/sbin'>>/etc/profile && source /etc/profile

[root@localhost init.d]# service nginx start

三、KeepAlived安装和配置

1. 主、从服务器上安装keepalived

使用yum安装keepalived

yum -y install keepalived

2.查看keepalived是否安装成功,出现版本即成功

rpm -q -a keepalived

2.主、从服务器上修改keepalived配置(配置文件路径:/etc/keepalived/keepalived.conf)

1)主服务上修改配置

! Configuration File for keepalived

global_defs {

 router_id just01

}

vrrp_script chk_nginx {

   script "/usr/local/src/nginx_check.sh"  #脚本文件路径

   interval 3  # 检测脚本执行的间隔:3s

   weight 2  #权重,如果这个脚本检测为真,服务器权重+2

}

vrrp_instance VI_1 {

   state MASTER  # 指定keepalived的角色,MASTER为主,BACKUP为备。备份服务器上需将MASTER 改为BACKUP

   interface ens192  # 通信端口 通过ip addr可以看到,根据自己的机器配置

   virtual_router_id 51  # vrrp实例id  keepalived集群的实例id必须一致,即主、备机的virtual_router_id必须相同

   priority 100  #优先级,数值越大,获取处理请求的优先级越高。主、备机取不同的优先级,主机值较大,备份机值较小

   advert_int 1  #心跳间隔,默认为1s。keepalived多机器集群 通过心跳检测当前服务器是否还正常工作,如果发送心跳没反应,备份服务器就会立刻接管;

   authentication {

       auth_type PASS  #设置验证类型和密码,MASTER和BACKUP必须使用相同的密码才能正常通信

       auth_pass justech  #密码,主备服务器的要设成一样

   }

   virtual_ipaddress {

       10.66.53.200 # 定义虚拟ip(VIP),可多设,每行一个,需要是公司中未使用的ip,最好跟服务器真实ip的网段一样,比如测试环境10.66.53 正式环境10.66.52

   }

track_script {

 chk_nginx  #定义脚本名称,与上面的 vrrp_script 的值一致

}

}

2)从服务上修改配置

! Configuration File for keepalived

global_defs {

 router_id just02

}

vrrp_script chk_nginx {

   script "/usr/local/src/nginx_check.sh"  #脚本文件路径

   interval 3  # 检测脚本执行的间隔:3s

   weight 2  #权重,如果这个脚本检测为真,服务器权重+2

}

vrrp_instance VI_1 {

   state BACKUP  # 指定keepalived的角色,MASTER为主,BACKUP为备。

   interface ens192  # 通信端口 通过ip addr可以看到,根据自己的机器配置

   virtual_router_id 51 # vrrp实例id  keepalived集群的实例id必须一致,即主、备机的virtual_router_id必须相同

   priority 80  #优先级,数值越大,获取处理请求的优先级越高。主、备机取不同的优先级,主机值较大,备份机值较小

   advert_int 1  #心跳间隔,默认为1s。keepalived多机器集群 通过心跳检测当前服务器是否还正常工作,如果发送心跳没反应,备份服务器就会立刻接管;

   authentication {

       auth_type PASS  #设置验证类型和密码,MASTER和BACKUP必须使用相同的密码才能正常通信

       auth_pass justech  #密码,主备服务器的要设成一样

   }

   virtual_ipaddress {

       10.66.53.200  # 定义虚拟ip(VIP),可多设,每行一个,需要是公司中未使用的ip,最好跟服务器真实ip的网段一样,比如测试环境10.66.53 正式环境10.66.52

   }

track_script {

chk_nginx #定义脚本名称,与上面的 vrrp_script 的值一致

}

}

2.主、从服务器上新增脚本文件,用于重启nginx或关闭keepalived

1) 创建文件

touch /usr/local/src/nginx_check.sh

2) 修改脚本文件内容

1.使用vim修改脚本文件

vim /usr/local/src/nginx_check.sh

2.将下面内容复制到脚本文件中

#! /bin/bash

#检测nginx是否启动了

A=`ps -C nginx --no-header | wc -l`

if [ $A -eq 0 ];then

/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf #启动nginx,视各个服务器上的nginx启动命令决定

sleep 2 #睡眠2秒

if [ `ps -C nginx --no-header | wc -l` -eq 0 ];then

 systemctl stop keepalived.service #启动失败,将keepalived服务杀死。将vip漂移到其它备份节点

fi

fi

注意:里面的启动nginx配置需要修改成主、从服务器上对应的启动命令

3) 对/usr/local/src/nginx_check.sh赋可执行权限

chmod 777 /usr/local/src/*.sh

3.启动相关服务

1) 启动nginx

1.如果以启动,则忽略

2) 启动keepalived

1.启动keepalived

systemctl start keepalived.service

2.查看keepalived是否启动成功

ps -ef|grep  keepalived

3.补充关闭、重启keepalived命令

关闭:

systemctl stop keepalived.service

重启:

systemctl restart keepalived.service

四、安装tomcat

安装JDK

上传安装包至/data目录下

jdk-8u131-linux-x64.tar.gz

tar -zxvf jdk-8u131-linux-x64.tar.gz

mv jdk-8u131-linux-x64 jdk

pwd

/data/jdk

vi /etc/pfofile

JAVA_HOME=/data/jdk

JRE_HOME=/data/jdk/jre

CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib

PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin

export JAVA_HOME JRE_HOME CLASS_PATH PATH

source /etc/profile

安装tomcat

上传安装包至/data目录下

tar -zxvf apache-tomcat-8.5.51.tar.gz

mv apache-tomcat-8.5.51 tomcat

cd tomcat/bin

./start.sh

1.更改Tomcat默认欢迎页面,用于标识切换Web

更改TomcatServer01 节点ROOT/index.jsp 信息,加入TomcatIP地址,并加入Nginx值,即修改节点192.168.43.103信息如下:

<divid="asf-box"><h1>${pageContext.servletContext.serverInfo}(192.168.224.103)<%=request.getHeader("X-NGINX")%></h1></div>

更改TomcatServer02 节点ROOT/index.jsp信息,加入TomcatIP地址,并加入Nginx值,即修改节点192.168.43.104信息如下:

<divid="asf-box"><h1>${pageContext.servletContext.serverInfo}(192.168.224.104)<%=request.getHeader("X-NGINX")%></h1></div>

2.启动Tomcat服务,查看Tomcat服务IP信息,此时Nginx未启动,因此request-header没有Nginx信息。

3.配置Nginx代理信息

1.配置Master节点[192.168.43.101]代理信息

upstream tomcat{server192.168.43.103:8080weight=1;

server192.168.43.104:8080weight=1;}

server{location/{proxy_pass http://tomcat;

proxy_set_header X-NGINX"NGINX-1";}

#......其他省略}

2.配置Backup节点[192.168.43.102]代理信息

upstream tomcat{server192.168.43.103:8080weight=1;

server192.168.43.104:8080weight=1;}

server{location/{proxy_pass http://tomcat;

proxy_set_header X-NGINX"NGINX-2";}

#......其他省略}

此时访问 192.168.43.101 可以看到103和104节点Tcomat交替显示,说明Nginx服务已经将请求负载到了2台tomcat上。

同理配置Backup[192.168.43.102] Nginx信息,启动Nginx后,访问192.168.43.102后可以看到Backup节点已起到负载的效果。

相关文章
|
2月前
|
应用服务中间件 网络安全 nginx
nginx作为web服务以及nginx.conf详解
nginx作为web服务以及nginx.conf详解
|
2月前
|
Java 应用服务中间件 Apache
浅谈Tomcat和其他WEB容器的区别
Tomcat是一款轻量级的免费开源Web应用服务器,常用于中小型系统及并发访问量适中的场景,尤其适合开发和调试JSP程序。它不仅能处理HTML页面,还充当Servlet和JSP容器。相比之下,物理服务器是指具备处理器、硬盘等硬件设施的服务器,如云服务器,其设计目标是在处理能力、稳定性和安全性等方面提供高标准服务。简言之,Tomcat专注于运行Java应用,而物理服务器则提供基础计算资源。
|
3月前
|
负载均衡 网络协议 应用服务中间件
web群集--rocky9.2源码部署nginx1.24的详细过程
Nginx 是一款由 Igor Sysoev 开发的开源高性能 HTTP 服务器和反向代理服务器,自 2004 年发布以来,以其高效、稳定和灵活的特点迅速成为许多网站和应用的首选。本文详细介绍了 Nginx 的核心概念、工作原理及常见使用场景,涵盖高并发处理、反向代理、负载均衡、低内存占用等特点,并提供了安装配置教程,适合开发者参考学习。
|
4月前
|
运维 负载均衡 监控
Nginx加Keepalived实现高可用
使用Nginx和Keepalived来实现高可用性的方案,对于确保关键服务的稳定性和可靠性来说是非常有效的。此配置涉及多个步骤,包括各个服务的安装、设置及测试,目标是在主服务器故障时能无缝切换,以确保服务的持续可用。正确的配置和充分的测试是实现高可用性的保证,这也要求管理员对这些工具和它们背后的原理有深入的了解。
73 1
|
4月前
|
Ubuntu 应用服务中间件 Linux
在Linux中,如何配置Web服务器(如Apache或Nginx)?
在Linux中,如何配置Web服务器(如Apache或Nginx)?
|
3月前
|
关系型数据库 Java MySQL
"解锁Java Web传奇之旅:从JDK1.8到Tomcat,再到MariaDB,一场跨越数据库的冒险安装盛宴,挑战你的技术极限!"
【9月更文挑战第6天】在Linux环境下安装JDK 1.8、Tomcat和MariaDB是搭建Java Web应用的关键步骤。本文详细介绍了使用apt-get安装OpenJDK 1.8、下载并配置Tomcat,以及安装和安全设置MariaDB(MySQL的开源分支)的方法。通过这些步骤,您可以快速构建一个稳定、高效的开发和部署环境,并验证各组件是否正确安装和运行。这为您的Java Web应用提供了一个坚实的基础。
54 0
|
4月前
|
应用服务中间件 Linux 网络安全
在Linux中,如何配置Apache或Nginx Web服务器?
在Linux中,如何配置Apache或Nginx Web服务器?
|
2月前
|
XML JSON API
ServiceStack:不仅仅是一个高性能Web API和微服务框架,更是一站式解决方案——深入解析其多协议支持及简便开发流程,带您体验前所未有的.NET开发效率革命
【10月更文挑战第9天】ServiceStack 是一个高性能的 Web API 和微服务框架,支持 JSON、XML、CSV 等多种数据格式。它简化了 .NET 应用的开发流程,提供了直观的 RESTful 服务构建方式。ServiceStack 支持高并发请求和复杂业务逻辑,安装简单,通过 NuGet 包管理器即可快速集成。示例代码展示了如何创建一个返回当前日期的简单服务,包括定义请求和响应 DTO、实现服务逻辑、配置路由和宿主。ServiceStack 还支持 WebSocket、SignalR 等实时通信协议,具备自动验证、自动过滤器等丰富功能,适合快速搭建高性能、可扩展的服务端应用。
122 3
|
27天前
|
设计模式 前端开发 数据库
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第27天】本文介绍了Django框架在Python Web开发中的应用,涵盖了Django与Flask等框架的比较、项目结构、模型、视图、模板和URL配置等内容,并展示了实际代码示例,帮助读者快速掌握Django全栈开发的核心技术。
135 45
|
8天前
|
开发框架 JavaScript 前端开发
TypeScript 是一种静态类型的编程语言,它扩展了 JavaScript,为 Web 开发带来了强大的类型系统、组件化开发支持、与主流框架的无缝集成、大型项目管理能力和提升开发体验等多方面优势
TypeScript 是一种静态类型的编程语言,它扩展了 JavaScript,为 Web 开发带来了强大的类型系统、组件化开发支持、与主流框架的无缝集成、大型项目管理能力和提升开发体验等多方面优势。通过明确的类型定义,TypeScript 能够在编码阶段发现潜在错误,提高代码质量;支持组件的清晰定义与复用,增强代码的可维护性;与 React、Vue 等框架结合,提供更佳的开发体验;适用于大型项目,优化代码结构和性能。随着 Web 技术的发展,TypeScript 的应用前景广阔,将继续引领 Web 开发的新趋势。
24 2