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节点已起到负载的效果。

相关文章
|
3月前
|
Java 应用服务中间件 Apache
Maven程序 tomcat插件安装与web工程启动
Maven程序 tomcat插件安装与web工程启动
41 0
|
17天前
|
负载均衡 算法 应用服务中间件
负载均衡技术在Web服务器集群中的应用
【8月更文第28天】随着互联网的发展和用户对Web服务需求的增长,单台服务器很难满足大规模访问的需求。为了提高系统的稳定性和扩展性,通常会采用Web服务器集群的方式。在这种架构中,负载均衡器扮演着至关重要的角色,它能够合理地分配客户端请求到不同的后端服务器上,从而实现资源的最优利用。
43 2
|
26天前
|
网络协议 Java 应用服务中间件
Tomcat源码分析 (一)----- 手撕Java Web服务器需要准备哪些工作
本文探讨了后端开发中Web服务器的重要性,特别是Tomcat框架的地位与作用。通过解析Tomcat的内部机制,文章引导读者理解其复杂性,并提出了一种实践方式——手工构建简易Web服务器,以此加深对Web服务器运作原理的认识。文章还详细介绍了HTTP协议的工作流程,包括请求与响应的具体格式,并通过Socket编程在Java中的应用实例,展示了客户端与服务器间的数据交换过程。最后,通过一个简单的Java Web服务器实现案例,说明了如何处理HTTP请求及响应,强调虽然构建基本的Web服务器相对直接,但诸如Tomcat这样的成熟框架提供了更为丰富和必要的功能。
|
1月前
|
jenkins 持续交付 开发工具
"引爆效率革命!Docker+Jenkins+GIT+Tomcat:解锁持续集成魔法,一键部署Java Web应用的梦幻之旅!"
【8月更文挑战第9天】随着软件开发复杂度的增加,自动化变得至关重要。本文通过实例展示如何结合Docker、Jenkins、Git与Tomcat建立高效的持续集成(CI)流程。Docker确保应用环境一致性;Jenkins自动化处理构建、测试和部署;Git管理源代码版本;Tomcat部署Web应用。在Jenkins中配置Git插件并设置项目,集成Docker构建Tomcat应用镜像并运行容器。此外,通过自动化测试、代码质量检查、环境隔离和日志监控确保CI流程顺畅,从而显著提高开发效率和软件质量。
54 3
|
30天前
|
应用服务中间件
2022年最新最详细在IDEA中配置Tomcat(含有详细图解过程)、建立使用IEDA建立一个Web项目的案例
这篇文章提供了在IntelliJ IDEA中配置Tomcat服务器的详细步骤,包括添加Tomcat Server、选择安装路径、添加项目Artifact,以及创建和展示Web项目的流程。
|
3月前
|
缓存 负载均衡 NoSQL
Redis系列学习文章分享---第十四篇(Redis多级缓存--封装Http请求+向tomcat发送http请求+根据商品id对tomcat集群负载均衡)
Redis系列学习文章分享---第十四篇(Redis多级缓存--封装Http请求+向tomcat发送http请求+根据商品id对tomcat集群负载均衡)
58 1
|
2月前
|
Java 应用服务中间件 Linux
Tomcat安装部署[单机软件],可以让用户开发的WEB应用程序,变成可以被访问的网页,Tomcat的使用需要jdk环境
Tomcat安装部署[单机软件],可以让用户开发的WEB应用程序,变成可以被访问的网页,Tomcat的使用需要jdk环境
|
负载均衡 容灾 应用服务中间件
使用Docker-compose搭建nginx-keepalived双机热备来实现高可用nginx集群
最近同学出去面试经常会被问到一个问题。 面试官:你说你们公司使用nginx反向代理tornado,部署了多少多少台机器,好像很牛逼的样子,但是我问你,如果主机也就是部署了nginx那台机器并发过大导致宕机了怎么办? 答曰:不考虑带宽峰值的话,比较新的 CPU 跑 nginx 单核每秒能接近 2 万请求,而且nginx如果纯做 HTTP 转发的话,Nginx 的性能高到恐怖,会挂掉很不科学。。。。 面试官:好吧,算你会忽悠,那如果插头被扫地大妈踢掉了怎么办,因为没电导致服务器宕机 答曰:阿里云机房会断电。。。你特么在逗我吧。。
使用Docker-compose搭建nginx-keepalived双机热备来实现高可用nginx集群
|
4月前
|
存储 运维 负载均衡
Heartbeat+Nginx实现高可用集群
通过Heartbeat与Nginx的结合,您可以建立一个高可用性的负载均衡集群,确保在服务器故障时仍能提供无中断的服务。这种配置需要仔细的计划和测试,以确保系统在故障情况下能够正确运行。
57 2
|
缓存 运维 负载均衡
Keepalived+LVS+nginx搭建nginx高可用集群
  nginx是一款非常优秀的反向代理工具,支持请求分发,负载均衡,以及缓存等等非常实用的功能。在请求处理上,nginx采用的是epoll模型,这是一种基于事件监听的模型,因而其具备非常高效的请求处理效率,单机并发能力能够达到上百万。nginx接收到的请求可以通过负载均衡策略分发到其下一级的应用服务器,这些服务器一般是以集群方式部署的,因而在性能不足的情况下,应用服务器可以通过加机器的方式扩展流量。此时,对于一些特大型的网站,性能的瓶颈就来自于nginx了,因为单机的nginx的并发能力是有上限的,而nginx本身是不支持集群模式的,因而此时对nginx的横向扩展就显得尤为重要。
736 1