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加Keepalived实现高可用
使用Nginx和Keepalived来实现高可用性的方案,对于确保关键服务的稳定性和可靠性来说是非常有效的。此配置涉及多个步骤,包括各个服务的安装、设置及测试,目标是在主服务器故障时能无缝切换,以确保服务的持续可用。正确的配置和充分的测试是实现高可用性的保证,这也要求管理员对这些工具和它们背后的原理有深入的了解。
51 1
|
2月前
|
网络协议 Java 应用服务中间件
Tomcat源码分析 (一)----- 手撕Java Web服务器需要准备哪些工作
本文探讨了后端开发中Web服务器的重要性,特别是Tomcat框架的地位与作用。通过解析Tomcat的内部机制,文章引导读者理解其复杂性,并提出了一种实践方式——手工构建简易Web服务器,以此加深对Web服务器运作原理的认识。文章还详细介绍了HTTP协议的工作流程,包括请求与响应的具体格式,并通过Socket编程在Java中的应用实例,展示了客户端与服务器间的数据交换过程。最后,通过一个简单的Java Web服务器实现案例,说明了如何处理HTTP请求及响应,强调虽然构建基本的Web服务器相对直接,但诸如Tomcat这样的成熟框架提供了更为丰富和必要的功能。
|
2月前
|
负载均衡 应用服务中间件 Apache
Nginx与Apache的终极对决:揭秘Web服务器界的“速度与激情”!你不可不知的性能霸主如何颠覆传统,震撼互联网的根基!
【8月更文挑战第13天】互联网技术发展中,Web服务器至关重要,Nginx与Apache是最广泛使用的两种。Apache历史悠久,但Nginx以轻量级和高性能脱颖而出。Nginx采用事件驱动架构,高效处理大量并发连接,而Apache使用进程驱动,高并发下资源消耗大。以餐厅为例,Nginx像大堂经理同时处理多个顾客需求,远比Apache为每位顾客分配服务员更高效。性能测试显示Nginx处理能力远超Apache。此外,Nginx配置简洁灵活,尤其在负载均衡方面表现突出。尽管Apache适合动态内容处理,但在快速变化的互联网环境中,Nginx因其独特优势成为许多开发者和企业的首选。
47 7
|
2月前
|
应用服务中间件 Linux 网络安全
在Linux中,如何配置Apache或Nginx Web服务器?
在Linux中,如何配置Apache或Nginx Web服务器?
|
2月前
|
应用服务中间件
2022年最新最详细在IDEA中配置Tomcat(含有详细图解过程)、建立使用IEDA建立一个Web项目的案例
这篇文章提供了在IntelliJ IDEA中配置Tomcat服务器的详细步骤,包括添加Tomcat Server、选择安装路径、添加项目Artifact,以及创建和展示Web项目的流程。
|
2月前
|
存储 Ubuntu 应用服务中间件
如何在虚拟专用服务器上配置 Nginx Web 服务器
如何在虚拟专用服务器上配置 Nginx Web 服务器
22 0
|
5月前
|
负载均衡 安全 前端开发
百度搜索:蓝易云【Nginx与Tomcat负载均衡-动静分离教程】
这些是将Nginx与Tomcat结合使用实现负载均衡和动静分离的基本步骤。根据您的需求和具体环境,可能还需要进行其他配置和调整。请确保在进行任何与网络连接和安全相关的操作之前,详细了解您的网络环境和安全需求,并采取适当的安全措施。
73 1
|
5月前
|
负载均衡 应用服务中间件 nginx
百度搜索:蓝易云【Nginx和tomcat实现负载均衡教程】
至此,你已经成功地使用Nginx和Tomcat实现了负载均衡。Nginx将根据配置的负载均衡策略将客户端请求分发到多个Tomcat服务器上,以提高系统的性能和可用性。请注意,在实际生产环境中,还需要进行其他配置和优化,如健康检查、会话保持等,以满足具体的需求。
56 0
|
5月前
|
负载均衡 前端开发 应用服务中间件
Nginx+Tomcat负载均衡配置_nginx做tomcat的负载均衡成功,但tomcat的css文件400
Nginx+Tomcat负载均衡配置_nginx做tomcat的负载均衡成功,但tomcat的css文件400
|
5月前
|
负载均衡 前端开发 应用服务中间件
Nginx+Tomcat负载均衡配置_nginx做tomcat的负载均衡成功,但tomcat的css文件400(2)
Nginx+Tomcat负载均衡配置_nginx做tomcat的负载均衡成功,但tomcat的css文件400(2)