• 搭建基于standalone模式的JBoss EAP集群


    一、概述

    对于JBoss EAP的初学者来说,经常分不清集群(clustering)与域(domain)的概念,认为二者相似或者一个是另一个的子集。实际上二者虽然都是由多个服务器节点组成,都其实有着很大的区别。简而言之,集群的作用是将内部多个服务器整体上当作一个对外开放,而域则是为了在中心节点上管理作用相同的多个节点。

    互联网上的很多资料,都是基于domain模式搭建的JBoss EAP集群。这可能加深了一部分人的误区,认为JBoss EAP集群必须基于domain模式,但实际上基于standalone模式也一样可以搭建集群,差别在于:在每个节点都需进行应用系统的部署,这在节点个数较多或应用需频繁更新时显得尤为麻烦。

    二、准备工作

    以下步骤都比较简单,详细过程省略:

    1. 两台虚拟机,均为CentOS 6.4 64bit,因为是克隆而来,机器名都是centos;
    2. 修改虚拟机的IP,分别为192.168.64.147和192.168.64.148。
    3. 安装反向代理服务器,这里选择的是nginx,版本7,为简单起见只在147上安装;
    4. 安装JDK 8(及以上版本),两台服务器均需安装;
    5. 安装JBoss EAP,7.0或7.1版均可,两台服务器均需安装,假设安装目录为/root/EAP-7.1.0;
    6. 部署应用程序,这里选择以前用到的cluster-demo.war作为测试应用,拷贝到/root/EAP7/standalone/deployment目录。

    三、配置

    3.1 设置环境变量

    在两台服务器,修改/etc/profile,在最后增加以下设置:

    export JAVA_HOME=/usr/lib/jdk1.8.0_91
    export JRE_HOME=${JAVA_HOME}/jre
    export CLASSPATH=${JAVA_HOME}/lib:${JRE_HOME}/lib
    export PATH=${JAVA_HOME}/bin:$PATH
    export JBOSS_HOME=/root/EAP-7.1.0

    保存后执行source /etc/profile使其立即生效。

    3.2 配置nginx

    在147上,修改/etc/nginx/nginx.conf,主要是upstream块和server块,如:

    user  nobody;
    worker_processes  1;
    
    error_log  /var/log/nginx/error.log warn;
    #pid        /var/run/nginx.pid;
    
    events {
        worker_connections  1024;
    }
    
    http {
        include       /etc/nginx/mime.types;
        default_type  application/octet-stream;
    
        log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for"';
    
        access_log  /var/log/nginx/access.log  main;
    
        sendfile        on;
        #tcp_nopush     on;
        keepalive_timeout  65;
        gzip  on;
    
        upstream test {
            server 192.168.64.147:8080;
            server 192.168.64.148:8080;
        }
    
        server {
            listen 8088;
            server_name localhost;
            location / {
                root html;
                index index.html index.htm;
                proxy_pass http://test;
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                client_max_body_size 100m;
            }
    
            location ~ ^/(WEB-INF)/ {
                deny all;
            }
    
            error_page 500 502 503 504 /50x.html;
            location = /50x.html {
                root html;
            }
        }
    
        #include /etc/nginx/conf.d/*.conf;
    }

    之后,nginx将在8088端口监听,并将外部请求转发到http://192.168.64.147:8080和http://192.168.64.147:8080,即将来的两个Jboss Server实例。

    3.3 配置JBoss EAP

    standalone模式下的集群,默认使用的配置文件standalone.xml已经不支持,需改用standalone-ha或standalone-full-ha.xml,这里选择的是standalone-full-ha.xml。在两台服务器均修改该文件,将其中interfaces部分中的127.0.0.1改为服务器的实际IP,比如147上为:

    ...
        <interfaces>
            <interface name="management">
                <inet-address value="${jboss.bind.address.management:192.168.64.147}"/>
            </interface>
            <interface name="public">
                <inet-address value="${jboss.bind.address:192.168.64.147}"/>
            </interface>
            <interface name="private">
                <inet-address value="${jboss.bind.address.private:192.168.64.147}"/>
            </interface>
            <interface name="unsecure">
                <inet-address value="${jboss.bind.address.unsecure:192.168.64.147}"/>
            </interface>
        </interfaces>
    ...

    3.4 修改测试应用的index.jsp

    正式环境中不需要(也不建议)本步骤,但由于测试时需验证集群具有负载均衡和session复制的功能,而两台虚拟机为克隆而来具有相同的hostname,因此增加了本步骤。

    可直接打开cluster-demo.war,修改根目录下的index.jsp,将title或body中的JBoss EAP分别改为JbossEap1、JBossEap2以示区分。

    四、测试过程

    4.1 在147上启动nginx服务

    [root@centos bin]# service nginx start

    4.2 在两台服务器启动Jboss

    注意不能按默认的standalone.xml启动,必须指定配置文件:

    [root@centos bin]# ./standalone.sh -c standalone-full-ha.xml

    4.3 用浏览器进行测试

    打开浏览器,访问http://192.168.64.147:8088/cluster-demo,注意IP和端口与nginx所在服务器及监听端口一致。

    页面显示,147和148已经组建为集群。

    多刷新几次,会发现首行会不停切换为JBossEap1和JBossEap2,而sessionID及创建时间保持不变,表明负载均衡和session共享已经实现,这与基于domain模式的集群是等效的。

    停止其中一个JBoss EAP实例,再刷新页面,会发现页面固定指向另一个JBoss EAP实例;再恢复那个JBoss EAP实例,页面刷新也恢复到刚才的来回切换方式;若再停掉另一个JBoss EAP实例,页面指向仍运行的实例。但无论如何,sessionID及创建时间都是固定不变的。这表明集群的故障转移也已实现,与基于domain模式的集群等效。

    五、总结

    以上测试说明,基于standalone模式的集群与基于domain模式的集群,在故障转移、负载均衡和session共享这三个最基本方面是等效的。

    PS:反向代理服务器可在多个服务上部署,Linux平台上还可利用keepalived或heartbeat服务将nginx组成主备式的集群,以进一步提升整体的高可用性。

  • 相关阅读:
    log4j配置
    Fragment配合RadioGroup实现点击切换布局
    (转)[原] Android 自定义View 密码框 例子
    标题栏透明度变化
    Android 监听ScrollView的滑动
    Android进度条学习
    Android-正方形的容器
    Android添加图片到ListView或者 RecyclerView显示
    Android打开相机和打开相册
    2020新年快乐
  • 原文地址:https://www.cnblogs.com/wggj/p/9522934.html
Copyright © 2020-2023  润新知