当前,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实例。
您可以在下图中看到我们的架构:
所有这些 实验 都在非常可靠的 ovirt 虚拟化平台上运行。您可以在这里了解有关ovirt的更多信息: ovirt.org
让我们从安装和配置 keepalived 和 apache Web服务器 高可用性开始,当然 还要 准备好mod_cluster 设置。这些设置将在以下服务器上执行:
为了更容易理解我在哪里执行每个命令,我将在每行上使用服务器的前缀。
必须在两个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。
为了进行快速测试,请关闭apache网络服务器01,然后查看我们的备用服务器是否正在响应:
[root@apache-httpd-01 ~]# shutdown now
接下来,我们将启动 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群集设置已成功加载。
设置的第一部分完成。当然,禁用selinux / firewalld并不是很酷,但这只是为了使我们的演示生活更加轻松。在生产环境中,应认真考虑安全性。
原文链接:http://codingdict.com