2010-05-06 27 views
7

Tôi đã làm theo hướng dẫn trong liên kết sau để tạo RMI registry và máy chủ jmx của riêng tôi trên một cổng duy nhất bên trong tomcat. Theo các ý kiến, tôi cần phải thiết lập -Djava.rmi.server.hostname = localhost. Một khi tôi làm điều đó, tôi thực sự có thể kết nối với máy chủ của tôi thông qua jconsole bằng cách sử dụng cổng chuyển tiếp ssh.Cách kết nối từ xa với jmx trên tomcat bằng đường hầm ssh và không phá vỡ ehcache

http://blogs.oracle.com/jmxetc/entry/connecting_through_firewall_using_jmx

Tuy nhiên, tôi đã tìm thấy nó có mặt rất xấu ảnh hưởng đến các vi phạm nhân lên ehcache của chúng tôi trong đó sử dụng RMI. Nó không phàn nàn rằng nó không thể khởi động từ localhost localhost. Tôi đoán vì các đồng nghiệp đều có tên máy chủ rmi của họ được đặt thành localhost từ thiết lập -Djava.rmi.server.hostname = localhost.

Có ai có giải pháp cho vấn đề này không?

Trả lời

1

Tôi vừa gặp phải vấn đề. Vấn đề là thuộc tính java.rmi.servername.hostname là toàn cầu. Để làm cho ehcache và máy chủ jmx chơi hài hòa, bạn phải thực hiện một vài hack trên máy bạn đang chạy VisualVM.

Đây là những gì bạn cần làm. Điều này được dựa trên việc sử dụng một máy Mac cho khách hàng để sửa đổi các lệnh khi cần thiết.

  1. Xóa -Djava.rmi.server.hostname = localhost.

  2. Viết ứng dụng thử nghiệm sẽ cung cấp cho bạn giá trị của InetAddress.getLocalHost(). GetHostAddress() trên máy chủ mà bạn muốn cấu hình. Điều này sẽ cung cấp cho bạn các địa phương ip (tư nhân nếu nat'd). Bạn sẽ phải tham khảo IP này trên máy cục bộ của bạn. Sử dụng IP này, nơi các lệnh bên dưới nói IP.

  3. Bây giờ, đây là phần thú vị: Thêm IP nội bộ vào giao diện vòng lặp của bạn trên máy của bạn. (ifconfig lo0 IP netmask 255.255.255.0 up)

  4. Kiểm tra xem điều này có thực sự hướng lưu lượng truy cập đến vòng lặp hay không. Nó sẽ trả về loopback. (route get IP)

  5. Bắt đầu đường hầm SSH: ssh -C -L IP: PORT: localhost: PORT -L IP: OTHER_PORT: localhost: OTHER_PORT user @ host.

Lưu ý rằng địa chỉ IP cho đường hầm ssh thực sự là mối liên kết với loopback. Bạn không còn đề cập đến localhost, nhưng IP của máy cho tất cả mọi thứ. Bạn cũng sẽ phải sửa đổi URL JMX của mình để chỉ IP này thay vì localhost.

1

Nếu bạn tìm kiếm dễ sử dụng, tường lửa thân thiện với JMX từ xa thay thế, jmx4perl có thể đáng để thử. Nó là một cách tiếp cận dựa trên tác nhân, xuất khẩu JMX MBeans qua HTTP/Rest.

Mặc dù trọng tâm chính của nó được định hướng để sử dụng trong một môi trường kịch bản (ví dụ perl) cho mục đích giám sát, cho các phiên bản dự kiến ​​0,70 thư viện khách hàng Java đã được thêm vào (beta chất lượng)

1

xin lỗi, nhưng câu trả lời đầu tiên của tôi đã sai.Nhưng tôi nghĩ rằng với tomcat6 bạn có một tùy chọn với JmxRemoteLifecycleListener:

public boolean getUseLocalPorts() 

Get the flag that indicates that local ports should be used for all 
connections. If using SSH tunnels, or 
similar, this should be set to true to 
ensure the RMI client uses the tunnel. 

http://tomcat.apache.org/tomcat-6.0-doc/api/org/apache/catalina/mbeans/JmxRemoteLifecycleListener.html

Các vấn đề liên quan