Wildfly - 如何在 Windows 上以域模式安装
Wildfly - How to install as domain mode on Windows
我在域模式 Ubuntu
上 运行 Wildfly
,但我在 Windows
中遇到了麻烦。这是我的设置和步骤:
- 我有两个 Windows 服务器(比如,
S1
和 S2
),Wildfly 将在其上 运行 作为 Windows service
- 我有
domain.xml
、host-master.xml
和 host-slave.xml
个文件。在 Linux 上,我更新 /etc/default/wildfly
文件以告诉 S1 服务器它将成为 master
,而 S2 将成为 slave
。主从配置在 host-master.xml
和 host-slave.xml
文件中。所以基本上,我告诉 S1 使用 host-master,S2 使用 host-slave。如果我添加 S3 服务器,我会告诉它使用具有适当配置的主从服务器。
- 在 Linux 上,在告诉 Wildfly 使用哪个 xml 文件后,我将它们安装为 Linux 服务。这就是我想在 Windows
上做的
- 我 cd 到
wildfly\bin\service
目录
- 这是我用于master的代码:
service install /controller S1:9990 /host master /user user /password pass
- 这是给奴隶的:
service install /controller S1:9990 /host slave /user user /password pass
但是正如你所猜到的,虽然我可以登录到管理控制台,但我看不到奴隶。只有主人在场。此外,当我尝试在 S2 上登录管理控制台时,我仍然可以看到主配置的控制台。
我肯定遗漏了一些东西,但我不知道它是什么。你能帮忙吗?
我的主机-master.xml 文件:
<?xml version='1.0' encoding='UTF-8'?>
<host name="S1" xmlns="urn:jboss:domain:3.0">
<extensions>
<extension module="org.jboss.as.jmx"/>
</extensions>
<management>
<security-realms>
<security-realm name="ManagementRealm">
<authentication>
<local default-user="$local" skip-group-loading="true"/>
<properties path="mgmt-users.properties" relative-to="jboss.domain.config.dir"/>
</authentication>
<authorization map-groups-to-roles="false">
<properties path="mgmt-groups.properties" relative-to="jboss.domain.config.dir"/>
</authorization>
</security-realm>
<security-realm name="ApplicationRealm">
<authentication>
<local default-user="$local" allowed-users="*" skip-group-loading="true"/>
<properties path="application-users.properties" relative-to="jboss.domain.config.dir"/>
</authentication>
<authorization>
<properties path="application-roles.properties" relative-to="jboss.domain.config.dir"/>
</authorization>
</security-realm>
</security-realms>
<audit-log>
<formatters>
<json-formatter name="json-formatter"/>
</formatters>
<handlers>
<file-handler name="host-file" formatter="json-formatter" path="audit-log.log" relative-to="jboss.domain.data.dir"/>
<file-handler name="server-file" formatter="json-formatter" path="audit-log.log" relative-to="jboss.server.data.dir"/>
</handlers>
<logger log-boot="true" log-read-only="false" enabled="false">
<handlers>
<handler name="host-file"/>
</handlers>
</logger>
<server-logger log-boot="true" log-read-only="false" enabled="false">
<handlers>
<handler name="server-file"/>
</handlers>
</server-logger>
</audit-log>
<management-interfaces>
<native-interface security-realm="ManagementRealm">
<socket interface="management" port="${jboss.management.native.port:9999}"/>
</native-interface>
<http-interface security-realm="ManagementRealm" http-upgrade-enabled="true">
<socket interface="management" port="${jboss.management.http.port:9990}"/>
</http-interface>
</management-interfaces>
</management>
<domain-controller>
<local/>
</domain-controller>
<interfaces>
<interface name="management">
<any-address/>
</interface>
</interfaces>
<jvms>
<jvm name="default">
<heap size="64m" max-size="256m"/>
<permgen size="256m" max-size="256m"/>
<jvm-options>
<option value="-server"/>
</jvm-options>
</jvm>
</jvms>
<servers>
<server name="solr-server" group="solr_server" auto-start="false">
<socket-bindings socket-binding-group="full-sockets" port-offset="983"/>
</server>
<server name="80-8200" group="edys-web-servers" auto-start="false">
<socket-bindings socket-binding-group="full-sockets" port-offset="199"/>
</server>
</servers>
<profile>
<subsystem xmlns="urn:jboss:domain:jmx:1.3">
<expose-resolved-model/>
<expose-expression-model/>
<remoting-connector/>
</subsystem>
</profile>
</host>
我的主机-slave.xml 文件:
<?xml version='1.0' encoding='UTF-8'?>
<host name="S2" xmlns="urn:jboss:domain:3.0">
<extensions>
<extension module="org.jboss.as.jmx"/>
</extensions>
<management>
<security-realms>
<security-realm name="ManagementRealm">
<server-identities>
<secret value="UGFzc3cwcmQ="/>
</server-identities>
<authentication>
<local default-user="$local" skip-group-loading="true"/>
<properties path="mgmt-users.properties" relative-to="jboss.domain.config.dir"/>
</authentication>
<authorization map-groups-to-roles="false">
<properties path="mgmt-groups.properties" relative-to="jboss.domain.config.dir"/>
</authorization>
</security-realm>
<security-realm name="ApplicationRealm">
<authentication>
<local default-user="$local" allowed-users="*" skip-group-loading="true"/>
<properties path="application-users.properties" relative-to="jboss.domain.config.dir"/>
</authentication>
<authorization>
<properties path="application-roles.properties" relative-to="jboss.domain.config.dir"/>
</authorization>
</security-realm>
</security-realms>
<audit-log>
<formatters>
<json-formatter name="json-formatter"/>
</formatters>
<handlers>
<file-handler name="host-file" formatter="json-formatter" path="audit-log.log" relative-to="jboss.domain.data.dir"/>
<file-handler name="server-file" formatter="json-formatter" path="audit-log.log" relative-to="jboss.server.data.dir"/>
</handlers>
<logger log-boot="true" log-read-only="false" enabled="false">
<handlers>
<handler name="host-file"/>
</handlers>
</logger>
<server-logger log-boot="true" log-read-only="false" enabled="false">
<handlers>
<handler name="server-file"/>
</handlers>
</server-logger>
</audit-log>
<management-interfaces>
<native-interface security-realm="ManagementRealm">
<socket interface="management" port="${jboss.management.native.port:9999}"/>
</native-interface>
</management-interfaces>
</management>
<domain-controller>
<remote security-realm="ManagementRealm" username="ebys">
<discovery-options>
<static-discovery name="primary" protocol="${jboss.domain.master.protocol:remote}" host="${jboss.domain.master.address:S1}"
port="${jboss.domain.master.port:9999}"/>
</discovery-options>
</remote>
</domain-controller>
<interfaces>
<interface name="management">
<inet-address value="${jboss.bind.address.management:S2}"/>
</interface>
<interface name="public">
<inet-address value="${jboss.bind.address:S2}"/>
</interface>
<interface name="unsecure">
<inet-address value="${jboss.bind.address.unsecure:S2}"/>
</interface>
</interfaces>
<jvms>
<jvm name="default">
<heap size="64m" max-size="256m"/>
<permgen size="256m" max-size="256m"/>
<jvm-options>
<option value="-server"/>
</jvm-options>
</jvm>
</jvms>
<profile>
<subsystem xmlns="urn:jboss:domain:jmx:1.3">
<expose-resolved-model/>
<expose-expression-model/>
<remoting-connector/>
</subsystem>
</profile>
</host>
PS: Windows 上有一个错误,我无法停止 Wildfly 服务。我必须重新启动服务器(服务处于手动模式),然后卸载该服务。因此,我不能不先重新启动服务器就卸载和安装服务。有一个关于此的错误报告,但不幸的是这些建议对我不起作用。
我建议您使用 https://github.com/tfonteyn/jboss7service.bat
EAP6/AS7/WildFly8+ 的服务脚本,因为它也支持域模式。
您只需要 apache prunsrv.exe,您可以从以下位置获得:http://commons.apache.org/proper/commons-daemon/binaries.html
我建议阅读 service.bat 中的评论,以了解有哪些选项以及如何使用它。
- 运行 WildFly 即服务
在将WildFly定义为服务之前,需要先定义一个环境变量:
JAVA_OPTS=-Djboss.bind.address=<local bind address> -Djboss.bind.address.management=<management bind address> -Djboss.domain.master.address=<address of the domain controller>
注意!!!对于 WildFly 10 需要添加额外的变量:jboss.bind.address.private=<集群中服务器的地址>
Powershell:
[Environment]::SetEnvironmentVariable("JAVA_OPTS", "-Djboss.bind.address=<local bind address> -Djboss.bind.address.management=<management bind address> -Djboss.domain.master.address=<address of the domain controller>", "Machine")
最后一个参数"jboss.domain.master.address" - 仅对从节点需要。
Windows服务可以通过里面的脚本安装
< wildfly_home_dir >/bin/service:
主节点
service.bat install /host master
从节点
service.bat install /controller <domain_conroller_address>:9990 /host <slave_host_name> /user <admin_user_to_domain_controller> /password <admin_password_to_domain_controller>
对于从节点需要更改系统注册表项(激活从模式配置):
注册表编辑器
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Apache Software Foundation\Procrun 2.0\Wildfly\Parameters\Start
Params:REG_MULTI_SZ
/c "set NOPAUSE=Y && domain.bat --host-config=host-slave.xml"
- 为管理定义安全凭证
在域控制器节点上为从节点添加一个新用户(可以是所有节点的一个用户)。交互式命令行脚本 - add_user[.bat].
完成后 - 它会在控制台上打印带有密码的 XML 标签(< 秘密值...)。这应该被复制并插入到从属节点上的 host-slave.xml 文件中(用户名应该添加到标签 host/domain-controller/remote 作为属性 "username":
主机-slave.xml
<host xmlns="urn:jboss:domain:3.0" name="slave">
<management>
<security-realms>
<security-realm name="ManagementRealm">
<server-identities>
<secret value="MQ=="/>
</server-identities>
</security-realm>
</security-realms>
</management>
<domain-controller>
<remote security-realm="ManagementRealm" username="slave">
<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>
</host>
- 启动主节点
- 配置HornetMQ/ActiveMQ集群密码
jboss-cli
/profile=full-ha/subsystem=messaging/hornetq-server=default:write-attribute(name=cluster-password,value="${jboss.messaging.cluster.password:CHANGE ME!!}")
另一种方式是为全ha配置的所有WildFly节点定义一个系统环境变量:jboss.messaging.cluster.password(可以在启动域控制器后在管理UI界面中完成)。
5.Start 从节点
我在域模式 Ubuntu
上 运行 Wildfly
,但我在 Windows
中遇到了麻烦。这是我的设置和步骤:
- 我有两个 Windows 服务器(比如,
S1
和S2
),Wildfly 将在其上 运行 作为Windows service
- 我有
domain.xml
、host-master.xml
和host-slave.xml
个文件。在 Linux 上,我更新/etc/default/wildfly
文件以告诉 S1 服务器它将成为master
,而 S2 将成为slave
。主从配置在host-master.xml
和host-slave.xml
文件中。所以基本上,我告诉 S1 使用 host-master,S2 使用 host-slave。如果我添加 S3 服务器,我会告诉它使用具有适当配置的主从服务器。 - 在 Linux 上,在告诉 Wildfly 使用哪个 xml 文件后,我将它们安装为 Linux 服务。这就是我想在 Windows 上做的
- 我 cd 到
wildfly\bin\service
目录 - 这是我用于master的代码:
service install /controller S1:9990 /host master /user user /password pass
- 这是给奴隶的:
service install /controller S1:9990 /host slave /user user /password pass
但是正如你所猜到的,虽然我可以登录到管理控制台,但我看不到奴隶。只有主人在场。此外,当我尝试在 S2 上登录管理控制台时,我仍然可以看到主配置的控制台。
我肯定遗漏了一些东西,但我不知道它是什么。你能帮忙吗?
我的主机-master.xml 文件:
<?xml version='1.0' encoding='UTF-8'?>
<host name="S1" xmlns="urn:jboss:domain:3.0">
<extensions>
<extension module="org.jboss.as.jmx"/>
</extensions>
<management>
<security-realms>
<security-realm name="ManagementRealm">
<authentication>
<local default-user="$local" skip-group-loading="true"/>
<properties path="mgmt-users.properties" relative-to="jboss.domain.config.dir"/>
</authentication>
<authorization map-groups-to-roles="false">
<properties path="mgmt-groups.properties" relative-to="jboss.domain.config.dir"/>
</authorization>
</security-realm>
<security-realm name="ApplicationRealm">
<authentication>
<local default-user="$local" allowed-users="*" skip-group-loading="true"/>
<properties path="application-users.properties" relative-to="jboss.domain.config.dir"/>
</authentication>
<authorization>
<properties path="application-roles.properties" relative-to="jboss.domain.config.dir"/>
</authorization>
</security-realm>
</security-realms>
<audit-log>
<formatters>
<json-formatter name="json-formatter"/>
</formatters>
<handlers>
<file-handler name="host-file" formatter="json-formatter" path="audit-log.log" relative-to="jboss.domain.data.dir"/>
<file-handler name="server-file" formatter="json-formatter" path="audit-log.log" relative-to="jboss.server.data.dir"/>
</handlers>
<logger log-boot="true" log-read-only="false" enabled="false">
<handlers>
<handler name="host-file"/>
</handlers>
</logger>
<server-logger log-boot="true" log-read-only="false" enabled="false">
<handlers>
<handler name="server-file"/>
</handlers>
</server-logger>
</audit-log>
<management-interfaces>
<native-interface security-realm="ManagementRealm">
<socket interface="management" port="${jboss.management.native.port:9999}"/>
</native-interface>
<http-interface security-realm="ManagementRealm" http-upgrade-enabled="true">
<socket interface="management" port="${jboss.management.http.port:9990}"/>
</http-interface>
</management-interfaces>
</management>
<domain-controller>
<local/>
</domain-controller>
<interfaces>
<interface name="management">
<any-address/>
</interface>
</interfaces>
<jvms>
<jvm name="default">
<heap size="64m" max-size="256m"/>
<permgen size="256m" max-size="256m"/>
<jvm-options>
<option value="-server"/>
</jvm-options>
</jvm>
</jvms>
<servers>
<server name="solr-server" group="solr_server" auto-start="false">
<socket-bindings socket-binding-group="full-sockets" port-offset="983"/>
</server>
<server name="80-8200" group="edys-web-servers" auto-start="false">
<socket-bindings socket-binding-group="full-sockets" port-offset="199"/>
</server>
</servers>
<profile>
<subsystem xmlns="urn:jboss:domain:jmx:1.3">
<expose-resolved-model/>
<expose-expression-model/>
<remoting-connector/>
</subsystem>
</profile>
</host>
我的主机-slave.xml 文件:
<?xml version='1.0' encoding='UTF-8'?>
<host name="S2" xmlns="urn:jboss:domain:3.0">
<extensions>
<extension module="org.jboss.as.jmx"/>
</extensions>
<management>
<security-realms>
<security-realm name="ManagementRealm">
<server-identities>
<secret value="UGFzc3cwcmQ="/>
</server-identities>
<authentication>
<local default-user="$local" skip-group-loading="true"/>
<properties path="mgmt-users.properties" relative-to="jboss.domain.config.dir"/>
</authentication>
<authorization map-groups-to-roles="false">
<properties path="mgmt-groups.properties" relative-to="jboss.domain.config.dir"/>
</authorization>
</security-realm>
<security-realm name="ApplicationRealm">
<authentication>
<local default-user="$local" allowed-users="*" skip-group-loading="true"/>
<properties path="application-users.properties" relative-to="jboss.domain.config.dir"/>
</authentication>
<authorization>
<properties path="application-roles.properties" relative-to="jboss.domain.config.dir"/>
</authorization>
</security-realm>
</security-realms>
<audit-log>
<formatters>
<json-formatter name="json-formatter"/>
</formatters>
<handlers>
<file-handler name="host-file" formatter="json-formatter" path="audit-log.log" relative-to="jboss.domain.data.dir"/>
<file-handler name="server-file" formatter="json-formatter" path="audit-log.log" relative-to="jboss.server.data.dir"/>
</handlers>
<logger log-boot="true" log-read-only="false" enabled="false">
<handlers>
<handler name="host-file"/>
</handlers>
</logger>
<server-logger log-boot="true" log-read-only="false" enabled="false">
<handlers>
<handler name="server-file"/>
</handlers>
</server-logger>
</audit-log>
<management-interfaces>
<native-interface security-realm="ManagementRealm">
<socket interface="management" port="${jboss.management.native.port:9999}"/>
</native-interface>
</management-interfaces>
</management>
<domain-controller>
<remote security-realm="ManagementRealm" username="ebys">
<discovery-options>
<static-discovery name="primary" protocol="${jboss.domain.master.protocol:remote}" host="${jboss.domain.master.address:S1}"
port="${jboss.domain.master.port:9999}"/>
</discovery-options>
</remote>
</domain-controller>
<interfaces>
<interface name="management">
<inet-address value="${jboss.bind.address.management:S2}"/>
</interface>
<interface name="public">
<inet-address value="${jboss.bind.address:S2}"/>
</interface>
<interface name="unsecure">
<inet-address value="${jboss.bind.address.unsecure:S2}"/>
</interface>
</interfaces>
<jvms>
<jvm name="default">
<heap size="64m" max-size="256m"/>
<permgen size="256m" max-size="256m"/>
<jvm-options>
<option value="-server"/>
</jvm-options>
</jvm>
</jvms>
<profile>
<subsystem xmlns="urn:jboss:domain:jmx:1.3">
<expose-resolved-model/>
<expose-expression-model/>
<remoting-connector/>
</subsystem>
</profile>
</host>
PS: Windows 上有一个错误,我无法停止 Wildfly 服务。我必须重新启动服务器(服务处于手动模式),然后卸载该服务。因此,我不能不先重新启动服务器就卸载和安装服务。有一个关于此的错误报告,但不幸的是这些建议对我不起作用。
我建议您使用 https://github.com/tfonteyn/jboss7service.bat EAP6/AS7/WildFly8+ 的服务脚本,因为它也支持域模式。
您只需要 apache prunsrv.exe,您可以从以下位置获得:http://commons.apache.org/proper/commons-daemon/binaries.html
我建议阅读 service.bat 中的评论,以了解有哪些选项以及如何使用它。
- 运行 WildFly 即服务
在将WildFly定义为服务之前,需要先定义一个环境变量:
JAVA_OPTS=-Djboss.bind.address=<local bind address> -Djboss.bind.address.management=<management bind address> -Djboss.domain.master.address=<address of the domain controller>
注意!!!对于 WildFly 10 需要添加额外的变量:jboss.bind.address.private=<集群中服务器的地址>
Powershell:
[Environment]::SetEnvironmentVariable("JAVA_OPTS", "-Djboss.bind.address=<local bind address> -Djboss.bind.address.management=<management bind address> -Djboss.domain.master.address=<address of the domain controller>", "Machine")
最后一个参数"jboss.domain.master.address" - 仅对从节点需要。
Windows服务可以通过里面的脚本安装 < wildfly_home_dir >/bin/service:
主节点
service.bat install /host master
从节点
service.bat install /controller <domain_conroller_address>:9990 /host <slave_host_name> /user <admin_user_to_domain_controller> /password <admin_password_to_domain_controller>
对于从节点需要更改系统注册表项(激活从模式配置):
注册表编辑器
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Apache Software Foundation\Procrun 2.0\Wildfly\Parameters\Start
Params:REG_MULTI_SZ
/c "set NOPAUSE=Y && domain.bat --host-config=host-slave.xml"
- 为管理定义安全凭证
在域控制器节点上为从节点添加一个新用户(可以是所有节点的一个用户)。交互式命令行脚本 - add_user[.bat].
完成后 - 它会在控制台上打印带有密码的 XML 标签(< 秘密值...)。这应该被复制并插入到从属节点上的 host-slave.xml 文件中(用户名应该添加到标签 host/domain-controller/remote 作为属性 "username":
主机-slave.xml
<host xmlns="urn:jboss:domain:3.0" name="slave">
<management>
<security-realms>
<security-realm name="ManagementRealm">
<server-identities>
<secret value="MQ=="/>
</server-identities>
</security-realm>
</security-realms>
</management>
<domain-controller>
<remote security-realm="ManagementRealm" username="slave">
<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>
</host>
- 启动主节点
- 配置HornetMQ/ActiveMQ集群密码
jboss-cli
/profile=full-ha/subsystem=messaging/hornetq-server=default:write-attribute(name=cluster-password,value="${jboss.messaging.cluster.password:CHANGE ME!!}")
另一种方式是为全ha配置的所有WildFly节点定义一个系统环境变量:jboss.messaging.cluster.password(可以在启动域控制器后在管理UI界面中完成)。
5.Start 从节点