Hazelcast - 监控
Hazelcast 提供了多种监控集群的方法。 我们将研究如何通过 REST API 和 JMX 进行监控。 让我们首先了解一下 REST API。
通过 REST API 监控 Hazelcast
要通过 REST API 监控集群或成员状态的运行状况,必须启用基于 REST API 的成员通信。 这可以通过配置或编程方式来完成。
让我们通过 hazelcast-monitoring.xml 中的 XML 配置启用基于 REST 的监控 −
<hazelcast xsi:schemaLocation="http://www.hazelcast.com/schema/config http://www.hazelcast.com/schema/config/hazelcast-config-3.12.12.xsd" xmlns="http://www.hazelcast.com/schema/config" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <instance-name>XML_Hazelcast_Instance</instance-name> <network> <rest-api enabled="true"> <endpoint-group name="CLUSTER_READ" enabled="true" /> <endpoint-group name="HEALTH_CHECK" enabled="true" /> </rest-api> </network> </hazelcast>
让我们创建一个在 Server.java 文件中无限期运行的 Hazelcast 实例 −
public class Server { public static void main(String... args){ //initialize hazelcast server/instance HazelcastInstance hazelcast = Hazelcast.newHazelcastInstance(); // do not shutdown, let the server run //hazelcast.shutdown(); } }
现在让我们执行启动集群 −
java '-Dhazelcast.config=hazelcast-monitoring.xml' -cp . arget\demo-0.0.1- SNAPSHOT.jar com.example.demo.Server
启动后,可以通过调用 API 来了解集群的健康状况,例如 −
http://localhost:5701/hazelcast/health
上述 API 调用的输出 −
Hazelcast::NodeState=ACTIVE Hazelcast::ClusterState=ACTIVE Hazelcast::ClusterSafe=TRUE Hazelcast::MigrationQueueSize=0 Hazelcast::ClusterSize=1
这显示我们的集群中有 1 个成员并且它处于活动状态。
有关节点的更多详细信息,例如 IP、端口、名称,可以使用以下命令找到 −
http://localhost:5701/hazelcast/rest/cluster
The output of the above API −
Members {size:1, ver:1} [ Member [localhost]:5701 - e6afefcb-6b7c-48b3-9ccb-63b4f147d79d this ] ConnectionCount: 1 AllConnectionCount: 2
JMX监控
Hazelcast 还支持对嵌入其中的数据结构进行 JMX 监控,例如 IMap、Iqueue 等。
要启用 JMX 监控,我们首先需要启用基于 JVM 的 JMX 代理。 这可以通过将"-Dcom.sun.management.jmxremote"传递给 JVM 来完成。 对于使用不同端口或使用身份验证,我们可以分别使用 -Dcom.sun.management.jmxremote.port、-Dcom.sun.management.jmxremote.authenticate。
除此之外,我们还必须为 Hazelcast MBean 启用 JMX。 让我们通过 hazelcast-monitoring.xml 中的 XML 配置启用基于 JMX 的监控 −
<hazelcast xsi:schemaLocation="http://www.hazelcast.com/schema/config http://www.hazelcast.com/schema/config/hazelcast-config-3.12.12.xsd" xmlns="http://www.hazelcast.com/schema/config" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <instance-name>XML_Hazelcast_Instance</instance-name> <properties> <property name="hazelcast.jmx">true</property> </properties> </hazelcast>
让我们创建一个在 Server.java 文件中无限期运行的 Hazelcast 实例并添加一个映射 −
class Server { public static void main(String... args){ //initialize hazelcast server/instance HazelcastInstance hazelcast = Hazelcast.newHazelcastInstance(); //create a simple map Map<String, String> vehicleOwners = hazelcast.getMap("vehicleOwnerMap"); // add key-value to map vehicleOwners.put("John", "Honda-9235"); // do not shutdown, let the server run //hazelcast.shutdown(); } }
现在我们可以执行以下命令来启用JMX −
java '-Dcom.sun.management.jmxremote' '-Dhazelcast.config=others\hazelcastmonitoring. xml' -cp . arget\demo-0.0.1-SNAPSHOT.jar com.example.demo.Server
JMX 端口现在可以通过 jConsole、VisualVM 等 JMX 客户端连接。
下面是使用 jConsole 连接并查看 VehicleMap 属性时将得到的内容的快照。 可以看到,映射名称为vehicleOwnerMap,映射大小为1。