gpt4 book ai didi

java - DC/OS JMX 访问

转载 作者:塔克拉玛干 更新时间:2023-11-01 23:03:34 24 4
gpt4 key购买 nike

我有一个部署到 azure 的 dc/os 集群。我已经使用我的 java 应用程序将容器部署到集群中。但我无法通过 jmx 访问它。

让我们以部署标准 tomcat 镜像为例:

1) 我根据下一条指令打开了端口 8081:https://learn.microsoft.com/en-us/azure/container-service/container-service-enable-public-access#open-a-port-portal .

2)我使用下一个 json 部署服务:

{
"id": "/tomcat",
"instances": 1,
"cpus": 1,
"mem": 512,
"container": {
"type": "DOCKER",
"docker": {
"image": "tomcat:8.0",
"network": "BRIDGE",
"portMappings": [
{ "protocol": "tcp", "hostPort": 8080 , "containerPort": 8080 },
{ "protocol": "tcp", "hostPort": 8081 , "containerPort": 8081 }
]
}
},
"requirePorts": true,
"acceptedResourceRoles": [
"slave_public"
],
"env": {
"JAVA_OPTS": "-Dcom.sun.management.jmxremote -Djava.rmi.server.hostname=10.0.0.4 -Dcom.sun.management.jmxremote.port=8081 -Dcom.sun.management.jmxremote.rmi.port=8081 -Dcom.sun.management.jmxremote.local.only=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false"
},
"healthChecks": [
{
"gracePeriodSeconds": 120,
"intervalSeconds": 30,
"maxConsecutiveFailures": 3,
"path": "/",
"portIndex": 0,
"protocol": "HTTP",
"timeoutSeconds": 5
}
]
}

为了进行连接,我使用 Oracle Java Mission Control。我将“主机”和“端口”字段填写为“prefixagents.westeurope.cloudapp.azure.com”和“8081”。但我无法连接,并收到一条消息:“无法连接”。

但尽管如此,我仍然可以使用 telnet 客户端成功连接到此端口:

telnet prefixagents.westeurope.cloudapp.azure.com 8081

我还可以连接到端口 8080,并且可以通过以下 URL 打开 tomcat Web 控制台:http://agents.westeurope.cloudapp.azure.com:8080

我又安装了一个 jmx 命令行客户端 - http://wiki.cyclopsgroup.org/jmxterm/并尝试连接到该服务:

java -jar jmxterm-1.0-alpha-4-uber.jar  --url service:jmx:rmi:///jndi/rmi://<prefix>agents.westeurope.cloudapp.azure.com:8081/jmxrmi

我收到下一个异常:“java.rmi.ConnectException:连接拒绝主机:10.0.0.4”。 10.0.0.4 是我的公共(public)代理节点的主机名。

我使用 https://learn.microsoft.com/en-us/azure/container-service/container-service-connect 连接到我的 dc/os 集群(主节点) 。我还在那里安装了 jmxterm 并尝试通过 jmx 连接到该服务:

java -jar jmxterm.jar --url service:jmx:rmi:///jndi/rmi://10.0.0.4:8081/jmxrmi

我连接成功了。

有人知道为什么我可以通过 jmx 从我的主节点连接到该服务,但我不能从我的本地计算机连接到该服务吗? 8081端口已开放。

最佳答案

我更改了 JAVA_OPTS 字符串中属性 -Djava.rmi.server.hostname 的值:-Djava.rmi.server.hostname="公共(public)代理 ip"。这对我有用。在端口 8081 打开的情况下,标准 tomcat 容器的工作配置:

{
"id": "/tomcat",
"instances": 1,
"cpus": 1,
"mem": 512,
"container": {
"type": "DOCKER",
"docker": {
"image": "tomcat:8.0",
"network": "BRIDGE",
"portMappings": [
{ "protocol": "tcp", "hostPort": 8080 , "containerPort": 8080 },
{ "protocol": "tcp", "hostPort": 8081 , "containerPort": 8081 }
]
}
},
"requirePorts": true,
"acceptedResourceRoles": [
"slave_public"
],
"env": {
"JAVA_OPTS": "-Dcom.sun.management.jmxremote -Djava.rmi.server.hostname=<public agent ip> -Dcom.sun.management.jmxremote.port=8081 -Dcom.sun.management.jmxremote.rmi.port=8081 -Dcom.sun.management.jmxremote.local.only=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false"
},
"healthChecks": [
{
"gracePeriodSeconds": 120,
"intervalSeconds": 30,
"maxConsecutiveFailures": 3,
"path": "/",
"portIndex": 0,
"protocol": "HTTP",
"timeoutSeconds": 5
}
]
}

我可以使用本地计算机通过 jmx 连接到 tomcat:host="public agent ip"和 port=8081

公共(public)代理 ip = "prefix"agents.westeurope.cloudapp.azure.com

关于java - DC/OS JMX 访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44372719/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com