构建关键任务的开源Java平台-The Web Layer


当前,java平台是世界上集成程度最高的平台之一,其主要原因是该平台支持其他语言,例如kotlin,groovy和scala等。以该平台为基础开发了成千上万的Web和移动应用程序。近年来,java平台发生了很大变化,并且可能会不断发展。

在进行这些更改的同时,我们看到了Evolution 应用服务器 ,它们逐渐提供高度复杂的功能,例如负载平衡组件,智能异步消息传递,事务控制以及许多其他有助于应用开发和标准化的技术。它们还为关键任务应用程序提供了稳定且可扩展的基础架构。应用服务器面临的最大挑战之一是耦合高度复杂的服务,以使其稳定,灵活。

如果您想要一个没有供应商锁定的高可用性,可扩展环境, 那么wildfly 是一个开放源代码社区选项。

wildfly wildfly是一种开放源代码应用服务器,与Java ee ee 8规范100%兼容。在Java ee的早期版本中,即使仅使用一些技术来进行应用程序开发,我们也需要处理服务器上部署的所有功能。。为了解决Java EE 6中的此问题,插入了概要文件的概念,该文件旨在创建具有特定职责的配置,例如具有用于Web开发技术的Web概要文件。

在此体系结构中,我们将使用带有“ full-ha”配置文件的wildfly来满足我们的集群和平衡需求。

域模式x独立模式 wildfly具有两种类型的体系结构,分别称为“独立模式”和“域模式”。在独立模式下,我们可以使用与旧版本(jboss)非常相似的单个实例,例如jboss为5,jboss为6。

使用独立模式的主要问题是分散管理,这在复制每台服务器上的设置时会引起很多麻烦。

为了解决这个问题,我们具有其中所有配置在已知的作为组分集中域模式 主 和服务器被分布在 下属 使用从之间的连接获得的配置 主 和 下级 。

当我们在默认配置下以域模式启动wildfly时,我们至少有四个进程。一台主机控制器,一台过程控制器和两台服务器。

域控制器:是控制域管理的人。这是此域中的实例之间共享的设置

流程控制器:非常重要,因为他负责创建实例以及接下来将要讨论的主机控制器。进程控制器不应与实例混淆,它只是jvm中的一个进程

主机控制器:作为域控制器,主机控制器还协调域实例。他负责执行与 服务器场部署 类似的操作 ,即他将 部署 文件分发 到域的所有实例

服务器:这些是实例本身,在其中是部署的应用程序。重要的一点是,每个服务器都是一个Java进程

使用域模式的好处包括:

architecture 我们将使用带有 keepalived + vip的 两台服务器 来实现 apache Web服务器的 高可用性 。此外,我们将使用一个 域 作为主域 ,另一个作为备份并支持我们的应用程序,这是两个主机控制器,每个域控制器有两个服务器,总共有四个wildfly实例。

您可以在下图中看到我们的架构: 201912-hawildfly-02.png

所有这些 实验 都在非常可靠的 ovirt 虚拟化平台上运行。您可以在这里了解有关ovirt的更多信息: ovirt.org

1594074189945.gif

让我们从安装和配置 keepalived 和 apache Web服务器 高可用性开始,当然 还要 准备好mod_cluster 设置。这些设置将在以下服务器上执行:

  • apache-httpd-01.mmagnani.lab-10.0.0.191
  • apache-httpd-02.mmagnani.lab-10.0.0.192
  • VIP-10.0.0.190

为了更容易理解我在哪里执行每个命令,我将在每行上使用服务器的前缀。

必须在两个apache Web服务器上执行以下步骤:

apache Web服务器-apache-httpd-01.mmagnani.lab

[root@apache-httpd-01 ~]# cat /etc/redhat-release 
centos linux release 8.2.2004 (core)
[root@apache-httpd-01 ~]# dnf update -y
[root@apache-httpd-01 ~]# dnf install httpd -y
[root@apache-httpd-01 ~]# echo "web server 01" > /var/www/html/index.html
[root@apache-httpd-01 ~]# systemctl enable httpd
[root@apache-httpd-01 ~]# systemctl stop firewalld
[root@apache-httpd-01 ~]# systemctl disable firewalld
[root@apache-httpd-01 ~]# setenforce 0
[root@apache-httpd-01 ~]# sed -i "s/^selinux=enforcing/selinux=disabled/g" /etc/selinux/config
[root@apache-httpd-01 ~]# dnf install keepalived -y
[root@apache-httpd-01 ~]# systemctl enable keepalived
[root@apache-httpd-01 ~]# rm -rf /etc/keepalived/keepalived.conf
[root@apache-httpd-01 ~]# vi /etc/keepalived/keepalived.conf
### active server
vrrp_script chk_httpd {

  script "pidof httpd"
  interval 2
}
vrrp_instance vi_1 {

  interface ens3
  state master
  advert_int 2
  virtual_router_id 51
  priority 100
  authentication {

    auth_type pass
    auth_pass simplepassword
  }
  unicast_src_ip addr:10.0.0.191
  unicast_peer {

    10.0.0.192
  }
  track_script {

    chk_httpd
  }
  virtual_ipaddress {

    10.0.0.190
  }
}
[root@apache-httpd-01 ~]# systemctl restart httpd 
[root@apache-httpd-01 ~]# systemctl restart keepalived

apache Web服务器-apache-httpd-02.mmagnani.lab

[root@apache-httpd-02 ~]# cat /etc/redhat-release 
centos linux release 8.2.2004 (core)
[root@apache-httpd-02 ~]# dnf update -y
[root@apache-httpd-02 ~]# dnf install httpd -y
[root@apache-httpd-01 ~]# echo "web server 02" > /var/www/html/index.html
[root@apache-httpd-02 ~]# systemctl enable httpd
[root@apache-httpd-02 ~]# systemctl stop firewalld
[root@apache-httpd-02 ~]# systemctl disable firewalld
[root@apache-httpd-02 ~]# setenforce 0
[root@apache-httpd-02 ~]# sed -i "s/^selinux=enforcing/selinux=disabled/g" /etc/selinux/config
[root@apache-httpd-02 ~]# dnf install keepalived -y
[root@apache-httpd-02 ~]# systemctl enable keepalived
[root@apache-httpd-02 ~]# rm -rf /etc/keepalived/keepalived.conf

编辑文件并将其保留如下(根据您的设置替换)。

[root@apache-httpd-02 ~]# vi /etc/keepalived/keepalived.conf
### passive server
vrrp_script chk_httpd {

  script "pidof httpd"
  interval 2
}
vrrp_instance vi_1 {

  interface ens3
  state backup
  advert_int 2
  virtual_router_id 51
  priority 50
  authentication {

    auth_type pass
    auth_pass simplepassword
  }
  unicast_src_ip 10.0.0.192
  unicast_peer {

    10.0.0.191
  }
  track_script {

    chk_httpd
  }
  virtual_ipaddress {

    10.0.0.190
  }
}
[root@apache-httpd-02 ~]# systemctl restart httpd 
[root@apache-httpd-02 ~]# systemctl restart keepalived

现在打开浏览器并输入VIP IP(在本例中为10.0.0.190)。请注意,该请求已定向到apache Web服务器01。

1594074298754.png

为了进行快速测试,请关闭apache网络服务器01,然后查看我们的备用服务器是否正在响应:

[root@apache-httpd-01 ~]# shutdown now

1594074376749.png 接下来,我们将启动 mod_cluster 配置并将其插入wildfly。

编译和配置mod_cluster 获得centos 8更新二进制文件的最佳方法是编译。我知道这会造成一些压力,但按照以下步骤操作,一切都会非常简单。

[root@apache-httpd-01 ~]# dnf install git make cmake gcc gcc-c++ apr-util apr-devel apr-util-devel httpd-devel -y
[root@apache-httpd-01 ~]# cd /tmp
[root@apache-httpd-01 ~]# git clone https://github.com/modcluster/mod_cluster.git
[root@apache-httpd-01 ~]# cd mod_cluster
[root@apache-httpd-01 ~]# git checkout 1.3.x
[root@apache-httpd-01 ~]# cd native
[root@apache-httpd-01 ~]# mkdir build
[root@apache-httpd-01 ~]# cd build
[root@apache-httpd-01 build]# cmake ../ -g "unix makefiles"
[root@apache-httpd-01 build]# make

将新建的模块复制到apache Web服务器模块目录:

[root@apache-httpd-01 ~]# pwd
/tmp/mod_proxy_cluster/native/build
[root@apache-httpd-01 ~]# cp modules/mod_proxy_cluster.so /etc/httpd/modules/
[root@apache-httpd-01 ~]# cp modules/mod_cluster_slotmem.so /etc/httpd/modules/
[root@apache-httpd-01 ~]# cp modules/mod_manager.so /etc/httpd/modules/
[root@apache-httpd-01 ~]# cp modules/mod_advertise.so /etc/httpd/modules/

这些相同的文件必须复制到apache Web服务器02模块目录。

[root@apache-httpd-01 ~]# scp modules/mod_cluster_slotmem.so root@10.0.0.192:/etc/httpd/modules/
[root@apache-httpd-01 ~]# scp modules/mod_proxy_cluster.so root@10.0.0.192:/etc/httpd/modules/
[root@apache-httpd-01 ~]# scp modules/mod_manager.so root@10.0.0.192:/etc/httpd/modules/
[root@apache-httpd-01 ~]# scp modules/mod_advertise.so root@10.0.0.192:/etc/httpd/modules/

使用mod_cluster时,应该禁用mod_proxy_balancer。若要仅在apache Web服务器01上执行此操作,请编辑00-proxy.conf文件,并注释引用该模块的行。

[root@apache-httpd-01 ~]# vi /etc/httpd/conf.modules.d/00-proxy.conf
#loadmodule proxy_balancer_module modules/mod_proxy_balancer.so

对apache网络服务器02执行相同的操作:

[root@apache-httpd-02 ~]# vi /etc/httpd/conf.modules.d/00-proxy.conf
#loadmodule proxy_balancer_module modules/mod_proxy_balancer.so

现在是时候创建mod_cluster配置文件了。在apache网站服务器01上,创建文件mod_cluster.conf并添加配置信息:

[root@apache-httpd-01 ~]# vi /etc/httpd/conf.d/mod_cluster.conf
loadmodule proxy_cluster_module modules/mod_proxy_cluster.so
loadmodule cluster_slotmem_module modules/mod_cluster_slotmem.so
loadmodule manager_module modules/mod_manager.so
loadmodule advertise_module modules/mod_advertise.so

memmanagerfile cache/mod_cluster

<ifmodule manager_module>

  listen 9090
  managerbalancername mycluster
  maxcontext 200
  maxnode 200
  maxhost 200
  proxytimeout 600
  createbalancers 1

  <virtualhost *:9090>

      <directory />
          require all granted
      </directory>

      <location />
        require all granted
      </location>

    keepalivetimeout 300
    maxkeepaliverequests 0
    enablemcpmreceive on
    allowdisplay on

    <location /mod_cluster_manager>
       sethandler mod_cluster-manager
       require all granted
    </location>

  </virtualhost>
</ifmodule>

现在将文件复制到apache Web服务器02。

[root@apache-httpd-01 ~]# scp /etc/httpd/conf.d/mod_cluster.conf root@10.0.0.192:/etc/httpd/conf.d/

重新启动两个服务器,以确保一切正常。

[root@apache-httpd-01 ~]# reboot
[root@apache-httpd-02 ~]# reboot

在mod群集端口和上下文上再次访问vip ip:http://10.0.0.190:9090/mod_cluster_manager。请注意,mod群集设置已成功加载。

1594074467169.png

设置的第一部分完成。当然,禁用selinux / firewalld并不是很酷,但这只是为了使我们的演示生活更加轻松。在生产环境中,应认真考虑安全性。


原文链接:http://codingdict.com