6

Tôi đang gặp vấn đề với get/set thành một cụm ElastiCache từ cá thể EC2 của tôi. Tôi đang nhận - SEVERE: net.spy.memcached.OperationTimeoutException: Timeout waiting for value - lỗi.Không thể kết nối với các cụm AWS ElastiCache bằng cách sử dụng Membase của khách hàng Membase cho memcached

Khi tôi cố gắng lấy hoặc đặt giá trị. Tôi đã sử dụng cùng một mã trên máy cục bộ của mình (mặc dù giao tiếp với một máy chủ memcached cục bộ) và mọi thứ hoạt động tốt. Stacktrace hoàn toàn có thể được tìm thấy ở đây - http://pastebin.com/tYcCJ6cj

đầu tiên tôi thấy rằng tôi có thể ít nhất có được địa chỉ IP của tất cả các nút của một cụm để tôi có thể ăn nó vào client membase tôi & Tôi thực sự có thể tìm thấy ra địa chỉ ip nút. Tôi cũng đảm bảo rằng tất cả các nhóm bảo mật EC2 của tôi cũng được thêm vào nhóm bảo mật nhóm bộ nhớ cache mặc định.

Bất kỳ con trỏ nào về điều này sẽ hữu ích rất nhiều.

CẬP NHẬT

Đoạn mã sử dụng để lấy một kỷ lục đặc biệt.

public String getCachedValue(String namespace, String key) { 
    String value = null; 

    try { 
     MemcachedClient client 
      = CacheConnectionUtil.connectToElastiCacheMemcachedServer(); 

     // Point of origin for the exception. 
     return (String) client.get(namespace + "$" + hashKey(key));   
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

    return value; 
} 

Đoạn mã dùng để kết nối đến máy chủ ElastiCache

private static MemcachedClient connectToElastiCacheMemcachedServer() 
    throws IOException { 

    DescribeCacheClustersResult cacheClustersInfo = null; 
    DescribeCacheClustersRequest cacheClusterRequest 
     = new DescribeCacheClustersRequest(); 
    cacheClusterRequest.setShowCacheNodeInfo(true); 

    try { 
    cacheClustersInfo = AWSConnectionUtil 
     .getElastiCacheObject(null) 
     .describeCacheClusters(cacheClusterRequest); 
    } catch (Exception e) { 
     e.printStackTrace(); 
     throw new IOException("Unable to connect to ElastiCache Cluster.", e); 
    } 

    if (cacheClustersInfo == null) { 
     throw new IOException("ElastiCache Cluster Info Object is null."); 
    } 

    List<CacheCluster> clusters = cacheClustersInfo.getCacheClusters(); 

    if (clusters == null || clusters.isEmpty()) { 
     throw new IOException("No ElastiCache Clusters available."); 
    } 

    List<String> serverList = new ArrayList<String>(); 
    for (CacheCluster cluster : clusters) { 
     if (cluster != null 
      && AWSConstants 
        .CACHE_CLUSTER_ID 
        .equalsIgnoreCase(cluster.getCacheClusterId())) { 

      List<CacheNode> nodes = cluster.getCacheNodes(); 
      if (nodes != null) { 
       for (CacheNode node : nodes) { 
        if (node != null) { 
         Endpoint endpoint = node.getEndpoint(); 
         if (endpoint != null 
          && endpoint.getAddress() != null) { 
          serverList.add(endpoint.getAddress() 
              + ":" 
              + endpoint.getPort()); 
         } 
        } 
       } 
      } 
     } 
    } 

    if (serverList.isEmpty()) { 
     throw new IOException("No Cached nodes available for cluster - " 
           + AWSConstants.CACHE_CLUSTER_ID); 
    } 

    return new MemcachedClient(AddrUtil.getAddresses(serverList)); 
} 
+0

Bạn có thể đăng mã của mình không? Nó không thể để chẩn đoán vấn đề này mà không nhìn thấy những gì bạn đang làm. Theo dõi ngăn xếp chỉ cho biết hoạt động mất quá nhiều thời gian để hoàn thành. – mikewied

+0

@mikewied vui lòng xem câu hỏi được cập nhật có đoạn mã. Cảm ơn. – Chantz

+0

Mã của bạn xuất hiện đúng và không có gì nhảy ra ngoài với tôi. Tôi sẽ chỉ kiểm tra lại rằng sự kết hợp địa chỉ/cổng là chính xác. Nếu nó là sau đó cố gắng telnet đến một trong các máy trong bạn cụm từ cùng một vị trí mã này đang chạy và kiểm tra xem nếu bạn có thể làm một nhận được. – mikewied

Trả lời

0

Sử dụng client ElastiCache Cụm điều chỉnh sản xuất bởi Amazon.

http://docs.aws.amazon.com/AmazonElastiCache/latest/UserGuide/AutoDiscovery.html#AutoDiscovery.ClusterClient

Theo tài liệu, tải Client ElastiCache Cluster:

  1. Đăng nhập vào Management Console AWS và mở ElastiCache console tại https://console.aws.amazon.com/elasticache/.
  2. Từ bảng điều khiển ElastiCache, bấm Tải xuống ứng dụng khách ElastiCache cụm.

Mã nguồn cho ứng dụng khách ElastiCache Cluster cho Java có sẵn tại https://github.com/amazonwebservices/aws-elasticache-cluster-client-memcached-for-java. Thư viện này dựa trên ứng dụng khách Spymemcached phổ biến. Ứng dụng khách ElastiCache Cluster được phát hành theo Giấy phép phần mềm Amazon. Bạn được tự do sửa đổi mã nguồn như bạn thấy phù hợp; bạn thậm chí có thể kết hợp mã vào các thư viện mã nguồn mở khác, hoặc vào mã máy khách của riêng bạn.

Phiên bản hiện tại là 1.0.1. Tôi đã sử dụng phiên bản 1.0 mà không gặp bất kỳ sự cố nào trong hơn một năm.

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