wildfly 21的domain配置

article/2025/9/25 19:40:15

文章目录

  • 简介
  • wildfly模式简介
  • domain controller的配置
  • Host controller的配置文件
  • 忽略域范围的资源
  • Server groups
  • Servers
  • 总结

简介

wildfly可以使用Standalone模式或者domain模式启动,standalone模式就很简单了,可以看做是一个单独的服务器。今天我们将会详细讲解一下domain模式。

wildfly模式简介

wildfly可以在两种模式下面工作,他们是standalone和managed domain。

standalone模式表示的是一个独立的服务器,它们可以通过使用standalone.sh来启动。如果使用的是standalone模式,但是又需要使用多服务器的集群模式,那么需要用户自己在应用层去处理。

如果想中心化管理多个多个服务的话,那么可以用到managed domain模式。

在managed domain模式下,wildfly可以通过一个domain controller来控制和管理其他的domain server。

我们看下managed domain下的服务器部署示意图:

上面示意图中,一个host表示的是一个实体或者虚拟机。在一个host中可以部署多个server instances。

我们可以通过domain.sh来启动host controller。

host controller负责启动和停止server服务,并且负责和Domain Controller进行交互。

host controller通过读取domain/configuration/host.xml的配置信息,来进行服务器的配置。

上图中有一个特殊的host controller叫做Domain Controller。Domain Controller负责整个domain的管理工作。

域控制器的主要职责是维护域的中央管理策略,以确保所有主机控制器都知道其当前内容,并协助主机控制器确保根据此策略配置任何正在运行的应用程序服务器实例。 默认情况下,此中央管理策略存储在Domain Controller主机的domain/configuration/domain.xml中。

server group中的一组server都有相同的配置,可以将它们看做是一个。一个 Domain Controller 可以管理多个server group.

我们看一个server group的定义:

<server-group name="main-server-group" profile="default"><socket-binding-group ref="standard-sockets"/><deployments><deployment name="foo.war_v1" runtime-name="foo.war" /><deployment name="bar.ear" runtime-name="bar.ear" /></deployments>
</server-group>

最后一个概念就是server,server表示的是一个运行的应用程序。server和Host Controller 运行在不同的JVM中的,并且server是由Host Controller 来启动的。

注意,不管是standalone还是managed domain,这都是取决于你内部的服务是怎么管理的,是一个个单独的部署还是使用中心化的管理方式,他们和外部用户的服务方式是无关的,也就是说不管使用standalone还是managed domain,都可以搭建服务集群。

domain controller的配置

domain controller是一个中心化的对domain进行管理的服务。我们需要一个host被配置为domain controller,还需要暴露它的管理接口以供被管理的host进行连接。

我们看下一个domain controller的配置:

<domain-controller><local/>
</domain-controller>

上面的例子中,local表示的是本地host。

如果这个机子被当做是domain controller,那么必须配置和暴露管理接口:

<management-interfaces><native-interface security-realm="ManagementRealm"><socket interface="management" port="${jboss.management.native.port:9999}"/></native-interface><http-interface security-realm="ManagementRealm"><socket interface="management" port="${jboss.management.http.port:9990}"/></http-interface>
</management-interfaces>

其中,interface指向的management是在host.xml中配置的:

<interfaces><interface name="management"><inet-address value="192.168.0.101"/></interface>
</interfaces>

默认情况下master domain controller是需要认证才能被访问的,我们需要通过使用add-user来为slave domain controller 创建用户,以连接到master domain controller。

所以,我们在add-user的最后一步,我们需要输入y:

Is this new user going to be used for one AS process to connect to another AS process e.g. slave domain controller?
yes/no? y
To represent the user add the following to the server-identities definition <secret value="cE3EBEkE=" />

我们需要记住上面的xml格式的secret,以便在后续slave的配置中使用。

Host controller的配置文件

有了domain controller,我们就可以通过host controller加入存在的domain了。

在做host controller的配置的时候,需要注意,host的逻辑名在一个domain内部必须是唯一的。并且host controller是通过IP地址来连接到domain controller的。

所以我们需要在host.xml中给host起一个唯一的名字:

<host xmlns="urn:jboss:domain:3.0"name="slave">
[...]
</host>

如果没有指定host的名字,将会使用jboss.host.name的值作为host的名字。如果这个值也没有设置,那么将会使用HOSTNAME或者COMPUTERNAME作为host的名字。

我们需要在hsot controller中指定domain controller的连接信息:

<domain-controller><remote protocol="remote" host="192.168.0.101" port="9999" username="slave" security-realm="SlaveRealm"/>
</domain-controller>

这里我们需要指定一个security realm,用来存放slave的密码:

<security-realm name="SlaveRealm"><server-identities><secret value="cE3EBEkE=" /></server-identities>
</security-realm>

这个secret,就是在使用user-add工具的时候创建的密码。

忽略域范围的资源

我们知道domain controller的职责就是保证所有正在运行的host controller都拥有和domain controller域范围配置一致的本地副本。

这些域范围的配置指的是不以 /host = * 开头的资源,比如那些保存在domain.xml中的资源。

如果host controller不是想做domain controller的备份,或者说host controller不想重新启动一个新的server group。那么host controller只需要保存已运行server group相关的域范围配置即可,并不需要保存所有的是域范围配置。

这样可以减少数据的传输,提升系统的效率。

如果要忽略域范围的资源我们可以使用ignore-unused-configuration=“true”。

<domain-controller><remote security-realm="ManagementRealm" ignore-unused-configuration="true"><discovery-options><static-discovery name="primary" protocol="${jboss.domain.master.protocol:remote}" host="${jboss.domain.master.address}" port="${jboss.domain.master.port:9999}"/></discovery-options></remote>
</domain-controller>

Server groups

Server groups就是服务分组,它是由domain controller来定义的,每个server-group都需要和profile,socket-binding-group进行关联,我们看个例子:

<server-groups><server-group name="main-server-group" profile="default"><jvm name="default"><heap size="64m" max-size="512m"/><permgen size="128m" max-size="128m"/></jvm><socket-binding-group ref="standard-sockets"/></server-group><server-group name="other-server-group" profile="bigger"><jvm name="default"><heap size="64m" max-size="512m"/></jvm><socket-binding-group ref="bigger-sockets"/></server-group>
</server-groups>

上面配置中的socket-binding-group也是在domain.xml中定义的,指定了网络的interface和端口:

<socket-binding-groups><socket-binding-group name="standard-sockets" default-interface="public"><socket-binding name="http" port="8080"/>[...]</socket-binding-group><socket-binding-group name="bigger-sockets" include="standard-sockets" default-interface="public"><socket-binding name="unique-to-bigger" port="8123"/></socket-binding-group>
</socket-binding-groups>

socket-binding-group还可以使用include来引用其他的socket-binding-group。

profile是subsystems的集合,subsystem就是应用程序需要的各种功能。

<profiles><profile name="default"><subsystem xmlns="urn:jboss:domain:web:1.0"><connector name="http" scheme="http" protocol="HTTP/1.1" socket-binding="http"/>[...]</subsystem><\!-\- The rest of the subsystems here \-->[...]</profile><profile name="bigger"><subsystem xmlns="urn:jboss:domain:web:1.0"><connector name="http" scheme="http" protocol="HTTP/1.1" socket-binding="http"/>[...]</subsystem><\!-\- The same subsystems as defined by 'default' here \-->[...]<subsystem xmlns="urn:jboss:domain:fictional-example:1.0"><socket-to-use name="unique-to-bigger"/></subsystem></profile>
</profiles>

Servers

Servers是在host controller中定义的,而Servers group是在domain controller中定义的。

每个server都要属于一个server group,server就是服务,每个server都会启动一个jvm。 我们先看下server的定义:

<servers><server name="server-one" group="main-server-group"><\!-\- server-one inherits the default socket-group declared in the server-group \--><jvm name="default"/></server><server name="server-two" group="main-server-group" auto-start="true"><socket-binding-group ref="standard-sockets" port-offset="150"/><jvm name="default"><heap size="64m" max-size="256m"/></jvm></server><server name="server-three" group="other-server-group" auto-start="false"><socket-binding-group ref="bigger-sockets" port-offset="250"/></server>
</servers>

在server中,我们可以重新定义socket-binding-group。

auto-start的意思是server是否回随着host controller的启动而启动。

最后,我们看下在host.xml中的jvm的定义:

<jvms><jvm name="default"><heap size="64m" max-size="128m"/></jvm>
</jvms>

我们可以在server中对其进行重写。

总结

以上就是wildfly中,对domain的配置规则,可以看到在domain中,可以启动多个server,配置和管理起来比tomcat要复杂很多,不过功能也相应的强大很多,我们可以借鉴这些优秀软件的设计思想,从而应用到我们的自己的程序中。

本文作者:flydean程序那些事

本文链接:http://www.flydean.com/wildfly-21-domain/

本文来源:flydean的博客

欢迎关注我的公众号:「程序那些事」最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧等你来发现!


http://chatgpt.dhexx.cn/article/k1Obv5LA.shtml

相关文章

JBoss的AS版本 Wildfly 介绍和使用

WildFly简介&#xff1a; wildFly是一款服务器&#xff0c;和tomcat一样&#xff0c;不过事jboss服务器的as版本罢了&#xff0c;相比于Jboss的EPA版本就比较繁重&#xff0c;所以有了这个Jboss服务器的轻便版本。至于什么时候独立出来的版本&#xff0c;之类的我就不给你扯淡…

FlyBird

游戏演示&#xff1a; 按键盘的上下键来控制小鸟上下移动&#xff0c;碰到管道会大量扣血&#xff0c;但是没有的时候会缓慢回血。 当生命值不是正数的时候&#xff0c;就结束游戏&#xff0c;按下空格可以重新开始。 我的代码如下 我的gitee地址&#xff1a;https://git…

使用wildfly部署项目

WildFly部署项目 一、下载 在浏览器地址栏输入https://www.wildfly.org/&#xff0c;打开WildFly官网,点击other versions选择版本&#xff0c;因为开发环境是jdk1.8&#xff0c;部署环境是Windows&#xff0c;所以这里我选择的是 “Java EE Full & Web Distribution”项…

wildfly安装及基本使用

一.wildfly在linux下的安装 1.下载地址 官网下载地址&#xff1a;https://www.wildfly.org/downloads/ 2.目录介绍 下载好后我们解压出来看一下目录结构&#xff1a; *appclient 里面是一些默认的配置、服务器日志配置等 *bin 里面就是一些可执行的脚本文件&#xff0c;有添…

什么是Wildfly?

WildFly 是一个 Java Enterprise Edition 全功能应用服务器&#xff0c;它提供了运行 Java Web 应用程序所需的所有功能。WildFly 由 Red Hat 设计和维护&#xff0c;正式名称为 JBoss AS。 总体而言&#xff0c;WildFly可以缩短开发时间&#xff0c;更有效地管理资源&#xff…

什么是wildfly

文章目录 什么是wildfly特点下载安装readme及启动命令启动操作总结一下具体步骤&#xff08;第一版&#xff09;1.配置环境变量(下载上面有)3、环境变量配好之后&#xff0c;需要为JBOSSt添加用户&#xff0c;调用dos窗口&#xff0c;输入命令2、启动Jboss&#xff0c;在dos窗口…

python3.6 安装MySQLdb

前言 最近做python的项目需要将json对象存储到数据库&#xff0c;在网上查了一下发现使用mysql数据库和MySQLdb模块是可以做到的。结果上网上查的时候发现&#xff0c;很多人说MySQLdb只能支持python2.4-2.7&#xff0c;不支持python3&#xff0c;但是我的其他部分基于python3…

[数据库] mysql

前言 各种知识多而且容易遗忘,还不容易复习。最好的方法当然是自己给自己提问,不断补缺查漏,缺什么补什么。本文将各类知识归类,并将全文知识点浓缩在自问自查中,并且都写好目录,自问自查时可以随时跳转过去,方便大家系统的学习复习知识。 水平有限,有错误敬请指正 食用方法 …

MySQL DataBase

文章目录 DBMSSQL备份数据库数据类型事务视图数据库设计三范式分组查询C# 连接 MySQL字符集存储引擎InnoDB行格式记录头信息 数据页结构B 树索引 DBMS DataBase Management System&#xff0c;数据库管理系统。常见的有 MySQL、Oracle、Microsoft SqlServer SQL Structured …

mysql数据库中求圆的面积_MYSQL数据库

数据库&#xff1a; 数据库就是存储数据的仓库 为了方便数据的存储和管理&#xff0c;它将数据按照特定的规律存储在磁盘上&#xff0c;通过数据库的管理系统&#xff0c;可以有效的管理存储在数据库中的数据&#xff1b; mysql数据库的优点&#xff1a; 1.多语言的支持 2.可以…

【数据库MySQL】

数据库MySQL 数据库设计原则和数据库事务 数据库MySQL数据表的设计原则数据库对象编写建议关于库关于表、列关于索引sql编写 数据库事务存储引擎是否支持事务ACID特性事务的状态 显式事务与隐式事务显式事务隐式事务隐式提交数据的情况 事务隔离级别脏读不可重复性幻读 4种隔离…

Database:MySQL

学习笔记&#xff1a;MySQL Copyright: Jingmin Wei, Pattern Recognition and Intelligent System, School of Artificial and Intelligence, Huazhong University of Science and Technology 前面的SQL代码为数据库通用语言&#xff0c;但是结果都是在MySQL环境下运行的结果…

数据库------MYSQL

目录 数据库 关系型数据库 非关系型数据库 MYSQL 登录 创建数据库 字符集 警告,错误,致命 查看数据库 选中数据库 删除库 数据类型 数值类型 字符串类型 日期类型 表的操作 选定数据库 创建表 多行输入 注释 单行注释: 多行注释 查看表结构 查看表 删除表…

Python之安装MySQLdb

Python连接mysql需要MySQLdb模块 一.环境 系统版本&#xff1a;windows10家庭版 Python版本&#xff1a; python3.7.1 IDE&#xff1a;sublime_text3 二.安装说明 如果是python 2.x版本的&#xff0c;在命令行输入执行&#xff1a;pip install MySQLdb即可安装成功如果是py…

DB SQL mysql

今天我们用10分钟&#xff0c;重点梳理一遍以下几方面&#xff1a; 数据库知识点汇总&#xff1b; 数据库事务特性和隔离级别&#xff1b; 详解关系型数据库、索引与锁机制&#xff1b; 数据库调优与最佳实践&#xff1b; 面试考察点及加分项。 知识点汇总 一、数据库的…

python -MySQLdb的安装与使用

MySQLdb是一款较为底层的&#xff0c;python连接mysql用的模块。和更加高级的&#xff0c;提供ORM的模块不同&#xff0c;MySQLdb主要还是聚焦于如何和数据库进行连接和进行基本的操作&#xff0c;操作的体现形式主要还是进行SQL语句的执行。 在Linux下 pip install MySQL-py…

数据库--mysql

数据库 《高性能Mysql(第三版)》 数据库三大范式、反模式 强调属性的原子性约束&#xff0c;要求属性具有原子性&#xff0c;不可再分解强调记录的唯一性约束&#xff0c;表必须有一个主键&#xff0c;并且没有包含在主键中的列必须完全依赖于主键&#xff0c;而不能只依赖于主…

Python 如何安装 MySQLdb ?

人生苦短 我用python Python 标准数据库接口为 Python DB-API&#xff0c; Python DB-API为开发人员提供了数据库应用编程接口。 Python 数据库接口支持非常多的数据库&#xff0c; 你可以选择适合你项目的数据库&#xff1a; GadFlymSQLMySQLPostgreSQLMicrosoft SQL Serve…

MySQL——数据库

1.什么是数据库&#xff1a; 数据库&#xff08;database&#xff09;&#xff1a;存储数据的“仓库”。它保存了一系列有组织的数据。 2.DSMS数据库管理系统&#xff1a; 数据库管理系统&#xff1a;数据库是通过DBMS创建和操作的容器。 数据库管理系统&#xff08;DBMS&a…

数据库----MySQL

文章目录 常识常见数据库数据库结构SQL语句分类 事务事务的4个特性 ACID隔离级别事务处理**提交** **commit****回滚** **rollback** 常用操作库的常用操作建库删库查库使用库 表的常用操作创建表修改表删除表查看所有表查看表结构/设计表 表记录的常用操作插入记录查询记录修改…