keepalived+nginx+tomcat+redis高可靠性WEB部署框架

1.序

最近看很多文章,总是很难看懂。主要是感觉作者上手就来,没有整理整个方案的思路,导致我费了半天心思来理解整个框架。好吧,我们不能沉浸在自己的世界里写文章,这样的文章是没有灵魂的:)
好了!我先整理一下这个搭建框架的思路。

2.概述

keepalived+nginx+tomcat+redis ,这么一长串英文,索性就用KNTR来表示了,下文中提到KNTR,就是代表这个框架。
KNTR是一套完善的服务防灾体系,通过软件服务的有机结合,将tomcat数量增加,通过数量优势,可以有效防止服务出现宕机的现象。
我们一般的web服务只有一个tomcat,一即所有,一损俱损。如果有两个tomcat、三个tomcat,甚至更多的tomcat,那么坏一个又有什么关系呢?本着这种思想,KNTR就出现了。
本篇文章,就重点说明一下如何通过KNTR实现有效的防灾,实现应用服务的高可靠性。

3.结构示意

在这里插入图片描述

3.1.keepalived

顾名思义,keepalived就是保持活着的意思。在KNTR框架中,keepalived一直监控着本机的nginx的状态,同时也时刻监听着备用机器上的心跳,此外,keepalived还虚拟生成一个IP,简称VIP。简言之:
(1)监控nginx
(2)主备心跳同步
(3)虚拟IP

这里解释一下,为什么要增加keepalived。
这个方案使用nginx来保障tomcat的稳定运行,那么靠什么来保障nginx的稳定运行的呢?答案就是keepalived。
keepalived通过定时执行nginx的监控脚本,来保障nginx的稳定,同时通过监控主备机间的心跳,通过权重的大小产生主备的切换(虚拟ip的飘移)。

3.2.nginx

这里nginx的作用主要是实现负载均衡,使得tomcat互为主备。负载均衡就是平均(或按权重)分配任务,使得web服务之间分摊任务。

3.3.tomcat

tomcat的作用主要是发布web服务。我们能访问到的网页页面,都是tomcat的功劳。

3.4.redis

redis这里是作session共享之用。所谓session共享,就是将用户的请求在tomcat之间共享,让所有的tomcat保持同步。(好像不是很严谨)

3.5.安装规划

192.168.10.13192.168.10.14
主机备机
tomcat-1tomcat-2
nginx-1nginx-2
keepalived-1keepalived-2
/redis

4.环境准备

本次操作案例是在centos7.3版本下进行的,在操作之前,请准备以下工具:

4.1.软件安装包

名称版本/安装包
操作系统centos7.3_DVD
JDKjava 1.8.0_102
keepalivedkeepalived-2.0.20.tar.gz
nginxnginx-1.17.10.tar.gz
tomcatapache-tomcat-8.5.54.tar.gz
redisredis-5.0.8.tar.gz

4.2.IP

用途IP
主节点192.168.10.13
备节点192.168.10.14
虚拟IP192.168.10.15

注:将安装包统一放置到linux操作系统的/opt目录下。

5.环境安装

环境安装这里还是简单介绍一下吧,因为很多基本的东西,看似很简单,但是也往往容易忽略,而且忽略了就很麻烦,这里还是再多说一下吧!

5.1.操作系统

操作系统安装的时候,千万不要偷懒图快,最好不要选择最小化安装,最好选择最大化安装。这里的软件安装包都是需要编译安装,其中需要很多依赖关系。如果操作系统是最小化安装,请做个yum源吧。。。

5.2.JDK

之前写过一个jdk一键安装的脚本,需要的话可以自行获取。
一键安装,简单方便。
传送门:https://download.csdn.net/download/weixin_43968988/11390695

6.redis的安装与配置

6.1.安装

这里下载的是二进制的安装包,所以采用编译安装的方法。编译安装可以指定安装目录,安装位置如下表所示:

项目内容
安装位置/usr/local/redis
配置文件/usr/local/redis/redis.conf

(1)解压

cd /opt
tar -zxvf redis-5.0.8.tar.gz

(2)安装

cd /opt/redis-5.0.8
make
make install PREFIX=/usr/local/redis

(3)启动

cd /usr/local/redis/bin
./redis-server

执行成功,无报错,使用ps -ef|grep redis命令检查进程,进程存在即说明安装成功。

注:redis配置文件安装后是不会存在于/usr/local/redis/目录下的,需要从解压后的文件中拷贝一份至/usr/local/redis/中。
(4)复制配置文件

cp /opt/redis-5.0.8/redis.conf /usr/local/redis/

至此安装结束…

6.2配置

redis最关键的是修改redis.conf文件,修改以下两项内容:

项目
redis.conf修改bind 127.0.0.1为 bind 192.168.10.14
密码redis123

6.2.1.设置允许其他服务器访问

vi /usr/local/redis/redis.conf

将bind 其余信息全部注释,在其下方增加下面一行内容:

bind 192.168.10.14

注:要想其他服务器可以远程访问,一定要将redis绑定本机IP,其他服务器可以远程访问本机IP连接redis。若是bind127.0.0.1,其他主机是没有办法访问的。

6.2.2.修改密码

在redis配置文件中找到requirepass 这一行,将其注释掉,并在下方增加下面命令。

reqiurepass redis123

6.3.测试

首先在192.168.10.14上将redis启动后,在192.168.10.13上测试redis的连接。
在192.168.10.13上执行如下命令:
(1)连接

redis-cli -h 192.168.10.14 -p 6379 -a redis123

(2)获取密码

192.168.10.14:6379>config get requirepass

(3)结果

1)"reqiurepass"
2)"redis123"

出现以上信息,即说明redis安装配置成功,可进行下一步。
附:
redis安装教程

7.tocmat的安装与配置

7.1.安装

tomcat的安装就不细说了,因为确实没有什么内容。
tomcat安装教程

7.2.配置

tomcat配置需要尤为注意,此处涉及如何连接redis。

7.2.1.查看/配置server.xml文件

cd /opt/tomcat/conf
cat server.xml

找到下面一段代码,这里规定了tomcat开放的端口8080,可以根据自己喜好修改,只要端口不冲突就行。

    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" URIEncoding="UTF-8" />

7.2.2.配置tomat连接redis

此次实操,使用的tomcat8.5版本,所以配置文件、jar包都是按照这个标准进行配置的。
(1)修改context.xml文件

vi /opt/tomcat/conf/context.xml

在context文件中增加一句话

<context>
...省略部分内容
 <Valve className="com.naritech.nicole.gump.RedisSessionHandlerValve" />
    <Manager className="com.naritech.nicole.gump.RedisSessionManager"
        host="192.168.10.14"
        port="6379"
        password="redis123"
        database="0"
        maxInactiveInterval="60"
     />
</context>

(2)增加jar包工具
在/opt/tomcat/lib文件夹下增加jar包工具,用来连接redis。工具如下:
commons-pool2-2.3.jar
jedis-2.7.3.jar
tomcat-redis-session-manager-master-2.0.0.jar
下载链接:tomcat连接redis的jar包

7.3.增加web页面(测试时使用)

7.3.1.增加获取session的web页面

在/opt/tomcat/webapps/test/下增加index.jsp文件

mkdir -p /opt/tomcat/webapps/test/
touch /opt/tomcat/webapps/test/index.jsp

192.168.10.13 上tonmcat的index.jsp文件内容:

<html>
    <body bgcolor="red">    
    <div>   
    <%=  request.getSession().getId()  %>   
    <h1>192.168.10.13</h1>
    </div>
    </body>
</html>
  
<%@ page contentType="text/html;charset=UTF-8" isELIgnored="false"%>
SessionID:<%=session.getId()%><BR>
SessionIP:<%=request.getServerName()%> <BR>
SessionPort:<%=request.getServerPort()%>

192.168.10.14 index.jsp文件内容:

<html>
    <body bgcolor="yellow">    
    <div>   
    <%=  request.getSession().getId()  %>   
    <h1>192.168.10.14</h1>
    </div>
    </body>
</html>
  
<%@ page contentType="text/html;charset=UTF-8" isELIgnored="false"%>
SessionID:<%=session.getId()%><BR>
SessionIP:<%=request.getServerName()%> <BR>
SessionPort:<%=request.getServerPort()%>

7.4.启动

重启两台服务器上tomcat,保证日志没有报错,可以通过在浏览器上输入访问地址,正常打开页面。
http://139.2.136.13:8080/test/index.jsp
http://139.2.136.14:8080/test/index.jsp

8.nginx安装与配置

8.1安装

(1)解压

cd /opt
tar -xvf nginx-1.17.10.tar.gz

(2)编译

cd /opt/nginx-1.17.10
make
make install --prefix=/usr/local/nginx

(3)启动

cd /usr/local/nginx/sbin
./nginx

(4)关闭

./nginx -s stop

8.2.配置

因为使用编译安装,可以指定安装目录,在安装目录下知道nginx的配置文件,并编辑。

cd /usr/local/nginx/conf/
vi nginx.conf

【配置文件】

#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

upstream tocmat{
     server 192.168.10.13:8080
     server 192.168.10.14:8080
}

    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            proxy_pass http://tomcat;
            proxy_set_header X-NGINX "NGINX-1" ;
                   }
        }
}

配置文件的核心内容如上文件所示,修改完IP端口后,可以直接复用。

8.3.启动

使用命令,启动nginx.

cd /usr/local/nginx/sbin
./nginx

保证可以实现访问任意一个nginx,均可访问到tomcat发布的web服务页面。在浏览器上分别输入以下两个IP地址访问:
http://139.2.136.13:80/test/index.jsp
http://139.2.136.14:80/test/index.jsp
在不断的刷新中,页面背景颜色在红色和黄色之间进行切换,切换比例是1:1。

9.keepalived 安装与配置

9.1.简介

项目绝对路径
安装包/opt/keepalived-2.0.20.tar.gz
安装位置/usr/local/keepalived/
配置文件/etc/keepalived/keepalived.conf
应用程序/usr/local/keepalived/sbin/keepalived

9.2.安装

(1)解压

cd /opt
tar -zxvf keepalived-2.0.20.tar.gz

(2)编译

cd /opt/keepalived-2.0.20
make
make install --prefix=/usr/local/keepalived

(3)启动

cd /usr/local/keepalived/sbin
./keepalived

(4)关闭

killall keepalived

9.2.主机配置

(1)配置

cd /etc/keepalived
vi keepalived.conf

可将如下文件直接替换原文件,根据情况修改修改。

【主机配置文件】

! Configuration File for keepalived
#邮件配置,不需要可以忽略
global_defs {
   notification_email {
     root@localhost #改为本机
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server localhost #改为localhost
   smtp_connect_timeout 30
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}
#nginx探测脚本
vrrp_script check_nginx {
    script "/ect/keepalived/chech_nginx.sh"
    interval 3 #执行周期,3秒一次
    weight -20 #权重
  }
#核心配置
vrrp_instance VI_1 {
    state MASTER #主机配置MASTER,备机配置BACKUP
    interface eth0 #网卡名称,以本机在用网卡为准
    virtual_router_id 51
    priority 100  #权重,主机值要大于备机值,主备间抢夺虚拟IP
    advert_int 1
    authentication {
        auth_type PASS #主备间的验证方式,密码验证
        auth_pass 1111 #主备相同
    }
    virtual_ipaddress {
        192.168.10.15/16 dev eth0 #虚拟IP,亦VIP
    }
track_script {
check_nginx #追踪脚本执行
   }
}
#还有很多不用的配置内容,这里直接删了

(2)增加nginx监测脚本
①编辑

vi /etc/keepalived/chech_nginx.sh

②添加内容

#!/bin/bash
A=`ps -C nginx --no-header |wc -l`
if [ $A -eq 0 ]; then
/usr/local/nginx/sbin/nginx
sleep 3
 if [ `ps -C nginx --no-header |wc -l` -eq 0 ]; then
 killall keepalived
 fi
fi

③保存

:wq

④授权

cd /etc/keepalived/
chmod 777 chech_nginx.sh

(3)启动

cd /usr/local/keepalived/sbin
./keepalived

至此,主机安装配置完成。

9.3.备机配置

备机与主的配置基本一致,其中keepalived的配置文件替换一下即可。
【备机配置文件】

! Configuration File for keepalived
#邮件配置,不需要可以忽略
global_defs {
   notification_email {
     root@localhost #改为本机
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server localhost #改为localhost
   smtp_connect_timeout 30
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}
#nginx探测脚本
vrrp_script check_nginx {
    script "/ect/keepalived/chech_nginx.sh"
    interval 3 #执行周期,3秒一次
    weight -20 #权重
  }
#核心配置
vrrp_instance VI_1 {
    state BACKUP #主机配置MASTER,备机配置BACKUP
    interface eth0 #网卡名称,以本机在用网卡为准
    virtual_router_id 51
    priority 99  #权重,主机值要大于备机值,主备间抢夺虚拟IP
    advert_int 1
    authentication {
        auth_type PASS #主备间的验证方式,密码验证
        auth_pass 1111 #主备相同
    }
    virtual_ipaddress {
        192.168.10.15/16 dev eth0 #虚拟IP,主备一致
    }
  track_script {
   check_nginx 
   }
}

9.4.启动

先将主机192.168.10.13和备机192.168.10.14两台服务器上的keepalived开启,观察IP的状态
输入命令

ip a

正常情况下应该如下所示:
192.168.10.13结果

eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:16:3e:14:59:9d brd ff:ff:ff:ff:ff:ff
    inet 192.168.10.13/24 brd 192.168.63.255 scope global dynamic eth0
    inet 192.168.10.15/24 brd 192.168.63.255 scope global dynamic eth0
       valid_lft 299523255sec preferred_lft 299523255sec

192.168.10.14结果

eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:16:3e:14:59:9d brd ff:ff:ff:ff:ff:ff
    inet 192.168.10.14/24 brd 172.17.191.255 scope global dynamic eth0
       valid_lft 299523255sec preferred_lft 299523255sec

10.测试

(1)关闭1个tomcat,检查页面访问情况
(2)关闭1个nginx,检查页面访问情况
(3)关闭1个keepalived,检查页面访问情况

11.说明

编译过程中,如果缺少依赖关系,注意看报错日志,遵循“缺什么,补什么”的原则,将所需要的的依赖包补齐。安装过程中,必须是上一步成功后,再执行下一步,不要越级执行命令。
配置过程中,一定要注意注释部分小心配置。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好!对于您提到的keepalivednginxtomcatredis和mysql,这些是常用于构建高可用和负载均衡的Web应用架构的关键组件。 1. KeepalivedKeepalived是一种开源的高可用解决方案,可以提供IP地址和服务的故障转移。它通常与负载均衡器(如Nginx)一起使用,以确保当主服务器故障时,备份服务器可以接管服务。 2. NginxNginx是一款高性能的开源Web服务器和反向代理服务器。它可以作为负载均衡器,在多个后端服务器(如TomcatRedis和MySQL)之间分发请求,并提供静态文件的高效传输。 3. TomcatTomcat是Java Servlet容器,用于部署和运行Java Web应用程序。它可以作为应用服务器与Nginx配合使用,通过反向代理将请求分发到多个Tomcat实例,以实现负载均衡和高可用性。 4. RedisRedis是一种基于内存的开源键值存储数据库,被广泛用于缓存、会话存储和消息队列等场景。在Web应用架构中,Redis可以作为缓存层,提高数据读取速度,并减轻后端数据库(如MySQL)的负载。 5. MySQL:MySQL是一种流行的开源关系型数据库管理系统,常用于存储应用程序的持久化数据。它可以与Tomcat结合使用,作为后端数据库存储和管理数据。 以上是对keepalivednginxtomcatredis和mysql的简要介绍,它们在Web应用架构中扮演着不同的角色,以提供高可用、高性能和负载均衡的服务。如果您对其中任何一个组件有更具体的问题,我很乐意为您解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值