CentOS下搭建高可用高并发的Java Web服务器

前言

本文详细介绍了如何在CentOS环境下搭建一个高可用、高并发的Java Web服务器架构,包含负载均衡、反向代理、数据库部署和Session一致性解决方案。

一、环境准备

1.1 服务器规划

  • 负载均衡服务器:node1、node2(主备模式)
  • Nginx服务器:node3、node4(反向代理+静态资源)
  • Tomcat服务器:node3、node4(Java Web应用)
  • 数据库服务器:node4(MySQL)
  • Redis服务器:node3(Session共享)

1.2 网络配置

所有服务器使用桥接模式,IP地址规划如下:
- node1: 192.168.204.121
- node2: 192.168.204.122
- node3: 192.168.204.123
- node4: 192.168.204.124

二、安装LVS+Keepalived实现负载均衡

2.1 安装LVS和Keepalived

yum -y install ipvsadm keepalived

2.2 主负载均衡服务器配置(node1)

cp -a /etc/keepalived/keepalived.conf /etc/keepalived/backup.keepalived.conf
vim /etc/keepalived/keepalived.conf

配置文件内容

! Configuration File for keepalived

global_defs {
   notification_email {
     root@localhost
   }
   router_id LVS_DEVEL
}

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 101
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.204.221/24 dev eth0 label eth0:0
    }
}

virtual_server 192.168.204.221 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    persistence_timeout 50
    protocol TCP

    real_server 192.168.204.123 80 {
        weight 1
        HTTP_GET {
            url {
              path /
              status_code 200
            }
            connect_timeout 2
            nb_get_retry 3
            delay_before_retry 1
        }
    }
    real_server 192.168.204.124 80 {
        weight 1
        HTTP_GET {
            url {
              path /
              status_code 200
            }
            connect_timeout 2
            nb_get_retry 3
            delay_before_retry 1
        }
    }
}

2.3 备负载均衡服务器配置(node2)

仅修改statepriority

vrrp_instance VI_1 {
    state BACKUP
    priority 50
    ...
}

2.4 启动服务

service keepalived start
ipvsadm -L  # 查看负载均衡规则

三、安装Nginx实现反向代理

3.1 安装依赖

yum -y install gcc openssl-devel pcre-devel zlib-devel

3.2 下载并编译安装

cd /opt
wget http://tengine.taobao.org/download/tengine-2.1.0.tar.gz
tar -zxvf tengine-2.1.0.tar.gz
cd tengine-2.1.0
./configure --prefix=/opt/sxt/soft/tengine-2.1.0/
make && make install

3.3 配置Nginx反向代理

vim /opt/sxt/soft/tengine-2.1.0/conf/nginx.conf

关键配置

upstream cluster1 {
    server 192.168.204.123:8080;
    server 192.168.204.124:8080;
    check interval=3000 rise=2 fall=5 timeout=1000 type=http;
}

server {
    listen 80;
    location / {
        proxy_pass http://cluster1;
    }
    location /status {
        check_status;
    }
}

3.4 启动Nginx

mkdir -p /var/tmp/nginx/client/
service nginx start

四、安装Tomcat部署Java Web应用

4.1 安装JDK

wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.rpm
rpm -ivh jdk-8u131-linux-x64.rpm

4.2 安装Tomcat

cd /opt
wget http://mirrors.hust.edu.cn/apache/tomcat/tomcat-7/v7.0.88/bin/apache-tomcat-7.0.88.tar.gz
tar -zxvf apache-tomcat-7.0.88.tar.gz
mv apache-tomcat-7.0.88 /opt/tomcat

4.3 部署Java Web应用

将项目打包为Test2.war,放入/opt/tomcat/webapps/目录自动解压。

五、配置MySQL数据库

5.1 安装MySQL

yum -y remove mysql-libs-5.1.71-1.el6.x86_64
yum -y install mysql-server mysql mysql-devel
service mysqld start
chkconfig mysqld on

5.2 初始化数据库

mysqladmin -u root password 'root'
mysql -u root -p

5.3 创建用户表

CREATE DATABASE test;
USE test;
CREATE TABLE user(`number` VARCHAR(100) NOT NULL, `password` VARCHAR(100) NOT NULL);
INSERT INTO user VALUES('hello', 'world');

六、解决Session一致性问题

6.1 安装Redis

cd /opt
wget http://download.redis.io/releases/redis-4.0.2.tar.gz
tar -zxvf redis-4.0.2.tar.gz
cd redis-4.0.2
make && make install

6.2 配置Redis

vim redis.conf
bind 192.168.204.123  # 绑定服务器IP
src/redis-server redis.conf &

6.3 配置Tomcat

将RedisSessionManager的JAR包放入/opt/tomcat/lib/,修改server.xml

<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">
  <Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />
  <Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"
           host="192.168.204.123"
           port="6379"
           database="0" />
</Engine>

七、测试系统性能

7.1 访问虚拟IP

http://192.168.204.221/Test2/

7.2 测试负载均衡

通过多次刷新页面,观察Nginx状态页面http://192.168.204.123/status验证负载均衡效果。

7.3 验证Session一致性

登录后刷新页面,确保Session信息始终有效。

八、优化建议

  1. 防火墙配置:仅开放必要端口(80、3306、6379)
  2. 监控告警:添加Nagios或Zabbix监控关键指标
  3. 数据库优化:开启MySQL查询缓存,定期备份数据
  4. Tomcat优化:调整JVM参数,优化连接池配置

参考资料

  1. LVS负载均衡配置指南
  2. Nginx反向代理配置
  3. Redis Session共享实现

通过以上步骤,已成功搭建一个高可用、高并发的Java Web服务器架构,支持负载均衡、反向代理、Session共享和数据库访问,可满足企业级应用需求。

Xiaoye